From 80e79f848ddd835a35e5549d032d736c4fd63fb5 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 1 Aug 2024 11:47:04 +0300 Subject: [PATCH 001/114] Updated: Library control statements --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 116 ++++++++++-------- .../gmod_tool/stools/trackassembly.lua | 61 ++++----- 3 files changed, 98 insertions(+), 81 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 4d9bac18..991088af 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.760") +asmlib.SetOpVar("TOOL_VERSION","8.761") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 75a43402..874215d7 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2959,10 +2959,11 @@ function CreateTable(sTable,defTab,bDelete,bReload) end -- Populate the data after the trigger does its thing if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") for iD = 1, qtDef.Size do arLine[iD] = self:Match(arLine[iD],iD,true) end - local Q = CacheStmt(qsKey:format(sFunc, qtDef.Nick), nil, unpack(arLine)) + local qIndx = qsKey:format(sFunc, qtDef.Nick) + local Q = CacheStmt(qIndx, nil, unpack(arLine)) if(not Q) then local sStmt = self:Insert():Values(unpack(qtDef.Query[sFunc])):Get() - if(not IsHere(sStmt)) then LogInstance("Build statement failed",tabDef.Nick); return nil end - Q = CacheStmt(qsKey:format(sFunc, qtDef.Nick), sStmt, unpack(arLine)) + if(not IsHere(sStmt)) then LogInstance("Build statement failed "..GetReport(qIndx,arLine[1]),tabDef.Nick); return nil end + Q = CacheStmt(qIndx, sStmt, unpack(arLine)) end -- The query is built based on table definition if(not IsHere(Q)) then LogInstance("Internal cache error",tabDef.Nick); return false end @@ -3092,28 +3093,30 @@ function CacheQueryPiece(sModel) local qModel = makTab:Match(sModel,1,true) LogInstance("Save >> "..GetReport(sModel)) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 - local Q = CacheStmt(qsKey:format(sFunc, ""), nil, qModel) + local qIndx = qsKey:format(sFunc, "") + local Q = CacheStmt(qIndx, nil, qModel) if(not Q) then local sStmt = makTab:Select():Where({1,"%s"}):Order(4):Get() if(not IsHere(sStmt)) then - LogInstance("Build statement failed"); return nil end - Q = CacheStmt(qsKey:format(sFunc, ""), sStmt, qModel) + LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end + Q = CacheStmt(qIndx, sStmt, qModel) end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local iCnt = 1; stData.Slot, stData.Size = sModel, 0 + stData.Slot, stData.Size = sModel, #qData stData.Type = qData[iCnt][makTab:GetColumnName(2)] stData.Name = qData[iCnt][makTab:GetColumnName(3)] stData.Unit = qData[iCnt][makTab:GetColumnName(8)] - while(qData[iCnt]) do local qRec = qData[iCnt] + for iCnt = 1, stData.Size do + local qRec = qData[iCnt] if(not IsHere(RegisterPOA(stData,iCnt, qRec[makTab:GetColumnName(5)], qRec[makTab:GetColumnName(6)], qRec[makTab:GetColumnName(7)]))) then LogInstance("Cannot process offset "..GetReport(iCnt, sModel)); return nil - end; stData.Size, iCnt = iCnt, (iCnt + 1) + end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil else LogInstance("Unsupported mode "..GetReport(sMoDB,defTab.Nick)); return nil end @@ -3141,21 +3144,22 @@ function CacheQueryAdditions(sModel) local qModel = makTab:Match(sModel,1,true) LogInstance("Save >> "..GetReport(sModel)) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 - local Q = CacheStmt(qsKey:format(sFunc, ""), nil, qModel) + local qIndx = qsKey:format(sFunc, "") + local Q = CacheStmt(qIndx, nil, qModel) if(not Q) then local sStmt = makTab:Select(2,3,4,5,6,7,8,9,10,11,12):Where({1,"%s"}):Order(4):Get() if(not IsHere(sStmt)) then - LogInstance("Build statement failed"); return nil end - Q = CacheStmt(qsKey:format(sFunc, ""), sStmt, qModel) + LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end + Q = CacheStmt(qIndx, sStmt, qModel) end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local iCnt = 1; stData.Slot, stData.Size = sModel, 0 - while(qData[iCnt]) do local qRec = qData[iCnt]; stData[iCnt] = {} + stData.Slot, stData.Size = sModel, #qData + for iCnt = 1, stData.Size do + local qRec = qData[iCnt]; stData[iCnt] = {} for col, val in pairs(qRec) do stData[iCnt][col] = val end - stData.Size, iCnt = iCnt, (iCnt + 1) end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil else LogInstance("Unsupported mode "..GetReport(sMoDB, sModel)); return nil end @@ -3218,33 +3222,33 @@ function CacheQueryPanel(bExp) libCache[keyPan] = {}; stPanel = libCache[keyPan] local sMoDB = GetOpVar("MODE_DATABASE") if(sMoDB == "SQL") then - local Q = CacheStmt(qsKey:format(sFunc,""), nil, 1) + local qIndx = qsKey:format(sFunc,"") + local Q = CacheStmt(qIndx, nil, 1) if(not Q) then local sStmt = makTab:Select(1,2,3):Where({4,"%d"}):Order(2,1):Get() if(not IsHere(sStmt)) then - LogInstance("Build statement failed"); return nil end - Q = CacheStmt(qsKey:format(sFunc,""), sStmt, 1) + LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end + Q = CacheStmt(qIndx, sStmt, 1) end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError())); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local iCnt = 1; stPanel.Size = 0 - while(qData[iCnt]) do - stPanel[iCnt] = qData[iCnt] - stPanel.Size, iCnt = iCnt, (iCnt + 1) - end; stPanel = makTab:TimerAttach(sFunc, keyPan) + stPanel.Size = #qData -- Store the amount of SQL rows + for iCnt = 1, stPanel.Size do stPanel[iCnt] = qData[iCnt] end + stPanel = makTab:TimerAttach(sFunc, keyPan) return ExportPanelDB(stPanel, bExp, makTab, sFunc) elseif(sMoDB == "LUA") then local tCache = libCache[defTab.Name] -- Sort directly by the model local tSort = Sort(tCache,{"Type","Slot"}); if(not tSort) then - LogInstance("Cannot sort cache data"); return nil end; stPanel.Size = 0 + LogInstance("Cannot sort cache data"); return nil end for iCnt = 1, tSort.Size do stPanel[iCnt] = {} local vSort, vPanel = tSort[iCnt], stPanel[iCnt] vPanel[makTab:GetColumnName(1)] = vSort.Key vPanel[makTab:GetColumnName(2)] = vSort.Rec.Type - vPanel[makTab:GetColumnName(3)] = vSort.Rec.Name; stPanel.Size = iCnt - end; return ExportPanelDB(stPanel, bExp, makTab, sFunc) + vPanel[makTab:GetColumnName(3)] = vSort.Rec.Name + end; stPanel.Size = tSort.Size -- Store the amount sort rows + return ExportPanelDB(stPanel, bExp, makTab, sFunc) else LogInstance("Unsupported mode "..GetReport(sMoDB)); return nil end end end @@ -3276,23 +3280,23 @@ function CacheQueryProperty(sType) return stName else if(sMoDB == "SQL") then - local qType = makTab:Match(sType,1,true) arNames[sType] = {}; stName = arNames[sType]; stName.Size = 0 - local Q = CacheStmt(qsKey:format(sFunc,keyName), nil, qType) + local qType = makTab:Match(sType,1,true) + local qIndx = qsKey:format(sFunc,keyName) + local Q = CacheStmt(qIndx, nil, qType) if(not Q) then local sStmt = makTab:Select(3):Where({1,"%s"}):Order(2):Get() if(not IsHere(sStmt)) then - LogInstance("Build statement failed"); return nil end - Q = CacheStmt(qsKey:format(sFunc,keyName), sStmt, qType) + LogInstance("Build statement failed "..GetReport(qIndx,qType)); return nil end + Q = CacheStmt(qIndx, sStmt, qType) end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local iCnt = 1; stName.Size, stName.Slot = 0, sType - while(qData[iCnt]) do + stName.Slot, stName.Size = sType, #qData + for iCnt = 1, stName.Size do -- Store types count as rows count stName[iCnt] = qData[iCnt][makTab:GetColumnName(3)] - stName.Size, iCnt = iCnt, (iCnt + 1) end; LogInstance("Save >> "..GetReport(sType, keyName)) stName = makTab:TimerAttach(sFunc, defTab.Name, keyName, sType); return stName elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil @@ -3309,21 +3313,21 @@ function CacheQueryProperty(sType) else if(sMoDB == "SQL") then tCache[keyType] = {}; stType = tCache[keyType]; stType.Size = 0 - local Q = CacheStmt(qsKey:format(sFunc,keyType), nil, 1) + local qIndx = qsKey:format(sFunc,keyType) + local Q = CacheStmt(qIndx, nil, 1) if(not Q) then local sStmt = makTab:Select(1):Where({2,"%d"}):Order(1):Get() if(not IsHere(sStmt)) then - LogInstance("Build statement failed"); return nil end - Q = CacheStmt(qsKey:format(sFunc,keyType), sStmt, 1) + LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end + Q = CacheStmt(qIndx, sStmt, 1) end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local iCnt = 1; stType.Size = 0 - while(qData[iCnt]) do + stType.Size = #qData -- Store types count as rows count + for iCnt = 1, stType.Size do stType[iCnt] = qData[iCnt][makTab:GetColumnName(1)] - stType.Size, iCnt = iCnt, (iCnt + 1) end; LogInstance("Save >> "..GetReport(keyType)) stType = makTab:TimerAttach(sFunc, defTab.Name, keyType); return stType elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil @@ -3784,14 +3788,20 @@ function SetAdditionsAR(sModel, makTab, qList) if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") local qModel = makTab:Match(tostring(sModel or ""), 1, true) - local Q = CacheStmt(qsKey:format(sFunc, "ADDITIONS"), nil, qModel) + local qIndx = qsKey:format(sFunc, "ADDITIONS") + local Q = CacheStmt(qIndx, nil, qModel) if(not Q) then local sStmt = makTab:Select():Where({1,"%s"}):Order(4):Get() - if(not IsHere(sStmt)) then LogInstance("Build statement failed"); return - end; Q = CacheStmt(qsKey:format(sFunc, "ADDITIONS"), sStmt, qModel) + if(not IsHere(sStmt)) then + LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return + end; Q = CacheStmt(qIndx, sStmt, qModel) end -- Check whenever we have some data present. Quit when not found - qData = sqlQuery(Q); if(not qData and isbool(qData)) then - LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return + qData = sqlQuery(Q) + if(not qData and isbool(qData)) then + LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return end + if(not IsHere(qData) or IsEmpty(qData)) then + LogInstance("No data found "..GetReport(Q)) + if(not IsHere(qData)) then qData = {} end end elseif(sMoDB == "LUA") then local iCnt = 0; qData = {} @@ -3813,8 +3823,7 @@ function SetAdditionsAR(sModel, makTab, qList) LogInstance("Sort cache mismatch"); return end; tableEmpty(qData) for iD = 1, tSort.Size do qData[iD] = tSort[iD].Rec end else - LogInstance("Unsupported mode "..GetReport(sMoDB, sModel)) - fE:Flush(); fE:Close(); fS:Close(); return + LogInstance("Unsupported mode "..GetReport(sMoDB, sModel)); return end; local iE = #qList if(not IsHere(qData) or IsEmpty(qData)) then return end for iD = 1, #qData do qList[iE + iD] = qData[iD] end @@ -3906,17 +3915,24 @@ function ExportTypeAR(sType) fE:Flush(); fE:Close(); fS:Close(); return end local qType = makP:Match(sType, 2, true) - local Q = CacheStmt(qsKey:format(sFunc, "PIECES"), nil, qType) + local qIndx = qsKey:format(sFunc, "PIECES") + local Q = CacheStmt(qIndx, nil, qType) if(not Q) then local sStmt = makP:Select():Where({2,"%s"}):Order(1,4):Get() - if(not IsHere(sStmt)) then LogInstance("Build statement failed") + if(not IsHere(sStmt)) then + LogInstance("Build statement failed "..GetReport(qIndx,qType)) fE:Flush(); fE:Close(); fS:Close(); return - end; Q = CacheStmt(qsKey:format(sFunc, "PIECES"), sStmt, qType) + end; Q = CacheStmt(qIndx, sStmt, qType) end -- Check whenever we have some data present. Quit when not found - qPieces = sqlQuery(Q); if(not qPieces and isbool(qPieces)) then + qPieces = sqlQuery(Q); + if(not qPieces and isbool(qPieces)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)) fE:Flush(); fE:Close(); fS:Close(); return end + if(not IsHere(qData) or IsEmpty(qData)) then + LogInstance("No data found "..GetReport(Q)) + if(not IsHere(qData)) then qPieces = {} end + end elseif(sMoDB == "LUA") then local iCnt = 0; qPieces = {} local tCache = libCache[defP.Name] diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 84459c28..446ee3d7 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2304,13 +2304,11 @@ function TOOL.BuildCPanel(CPanel) pComboPresets:AddConVar(val) end CPanel:AddItem(pComboPresets) - local cqPanel = asmlib.CacheQueryPanel(devmode); if(not cqPanel) then + local qPanel = asmlib.CacheQueryPanel(devmode); if(not qPanel) then asmlib.LogInstance("Panel population empty",sLog); return end local makTab = asmlib.GetBuilderNick("PIECES"); if(not asmlib.IsHere(makTab)) then asmlib.LogInstance("Missing builder table",sLog); return end - local defTable = makTab:GetDefinition() - local catTypes = asmlib.GetOpVar("TABLE_CATEGORIES") - local pTree = vguiCreate("DTree", CPanel); if(not pTree) then + local pTree = vguiCreate("DTree", CPanel); if(not pTree) then asmlib.LogInstance("Database tree empty",sLog); return end pTree:Dock(TOP) -- Initialize to fill left and right bounds pTree:SetTall(400) -- Make it quite large @@ -2318,9 +2316,11 @@ function TOOL.BuildCPanel(CPanel) pTree:SetIndentSize(0) -- All track types are closed pTree:UpdateColours(drmSkin) -- Apply current skin CPanel:AddItem(pTree) -- Register it to the panel - local iCnt, iTyp, pTypes, pCateg, pNode = 1, 1, {}, {} - while(cqPanel[iCnt]) do - local vRec, bNow = cqPanel[iCnt], true + local defTable = makTab:GetDefinition() + local catTypes = asmlib.GetOpVar("TABLE_CATEGORIES") + local iC, iTyp, pTypes, pCateg, pNode = 1, 1, {}, {} + for iC = 1, qPanel.Size do + local vRec, bNow = qPanel[iC], true local sMod = vRec[makTab:GetColumnName(1)] local sTyp = vRec[makTab:GetColumnName(2)] local sNam = vRec[makTab:GetColumnName(3)] @@ -2343,37 +2343,38 @@ function TOOL.BuildCPanel(CPanel) if(pTypes[sTyp]) then pItem = pTypes[sTyp] else pItem = pTree end -- Register the category if definition functional is given if(catTypes[sTyp]) then -- There is a category definition - local bSuc, ptCat, psNam = pcall(catTypes[sTyp].Cmp, sMod) + local bSuc, vCat, sNam = pcall(catTypes[sTyp].Cmp, sMod) if(bSuc) then -- When the call is successful in protected mode - if(psNam and not asmlib.IsBlank(psNam)) then - sNam = asmlib.GetBeautifyName(psNam) + if(sNam and not asmlib.IsBlank(sNam)) then + sNam = asmlib.GetBeautifyName(sNam) end -- Custom name override when the addon requests - local pCurr = pCateg[sTyp] - if(not asmlib.IsHere(pCurr)) then - pCateg[sTyp] = {}; pCurr = pCateg[sTyp] end - if(asmlib.IsBlank(ptCat)) then ptCat = nil end - if(asmlib.IsHere(ptCat)) then - if(not istable(ptCat)) then ptCat = {ptCat} end - if(ptCat[1]) then local iD = 1 - while(ptCat[iD]) do local sCat = tostring(ptCat[iD]):lower():Trim() - if(asmlib.IsBlank(sCat)) then sCat = "other" end - sCat = asmlib.GetBeautifyName(sCat) -- Beautify the category - if(pCurr[sCat]) then -- Jump next if already created - pCurr, pItem = asmlib.GetDirectory(pCurr, sCat) - else - pCurr, pItem = asmlib.SetDirectory(pItem, pCurr, sCat) - end; iD = iD + 1 -- Create the last needed node regarding pItem - end + local pCur = pCateg[sTyp] + if(not asmlib.IsHere(pCur)) then + pCateg[sTyp] = {}; pCur = pCateg[sTyp] end + if(asmlib.IsBlank(vCat)) then vCat = nil end + if(asmlib.IsHere(vCat)) then + if(not istable(vCat)) then vCat = {vCat} end + for iD = 1, #vCat do -- Create category tree path + local sCat = tostring(vCat[iD] or ""):lower():Trim() + if(asmlib.IsBlank(sCat)) then sCat = "other" end + sCat = asmlib.GetBeautifyName(sCat) -- Beautify the category + if(pCur[sCat]) then -- Jump next if already created + pCur, pItem = asmlib.GetDirectory(pCur, sCat) + else -- Create a new sub-category for the incoming content + pCur, pItem = asmlib.SetDirectory(pItem, pCur, sCat) + end -- Create the last needed node regarding pItem end -- When the category has at least one element else -- Store the creation information of the ones without category for later tableInsert(pCateg[sTyp], {sNam, sMod}); bNow = false end -- Is there is any category apply it. When available process it now - end - end -- Register the node associated with the track piece when is intended for later + else -- When there is an error in the category execution report it + asmlib.LogInstance("Category "..asmlib.GetReport(sTyp, sMod).." execution error: "..vCat,sLog) + end -- Category factory has been executed and sub-folders are created + end -- Category definition has been processed and nothing more to be done + -- Register the node associated with the track piece when is intended for later if(bNow) then asmlib.SetDirectoryNode(pItem, sNam, sMod) end -- SnapReview is ignored because a query must be executed for points count else asmlib.LogInstance("Ignoring item "..asmlib.GetReport(sTyp, sNam, sMod),sLog) end - iCnt = iCnt + 1 end -- Attach the hanging items to the type root for typ, val in pairs(pCateg) do @@ -2384,7 +2385,7 @@ function TOOL.BuildCPanel(CPanel) asmlib.LogInstance("Rooting item "..asmlib.GetReport(typ, nam, mod),sLog) end end -- Process all the items without category defined - asmlib.LogInstance("Found items #"..tostring(iCnt - 1), sLog) + asmlib.LogInstance("Found items #"..qPanel.Size, sLog) -- http://wiki.garrysmod.com/page/Category:DComboBox local sName = asmlib.GetAsmConvar("workmode", "NAM") From ce0f36feb742b4d0edf60afce9b65ad368875c04 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 1 Aug 2024 11:56:04 +0300 Subject: [PATCH 002/114] Fixed: Close generated files on sort fail --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 991088af..9b204b0f 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.761") +asmlib.SetOpVar("TOOL_VERSION","8.762") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 874215d7..4139f40a 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3964,8 +3964,11 @@ function ExportTypeAR(sType) end end end - local tSort = Sort(qPieces, {pkModel, sLineID}); if(not tSort) then - LogInstance("Sort cache mismatch"); return end; tableEmpty(qPieces) + local tSort = Sort(qPieces, {pkModel, sLineID}) + if(not tSort) then + LogInstance("Sort cache mismatch") + fE:Flush(); fE:Close(); fS:Close(); return + end; tableEmpty(qPieces) for iD = 1, tSort.Size do qPieces[iD] = tSort[iD].Rec end else LogInstance("Unsupported mode "..GetReport(sMoDB)) From 5a65385c50632e758e3af53929dbec818b81d59c Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 1 Aug 2024 14:16:46 +0300 Subject: [PATCH 003/114] Utilize: Addition.Size --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 16 +++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 9b204b0f..57552f84 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.762") +asmlib.SetOpVar("TOOL_VERSION","8.763") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4139f40a..3a7f6b35 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3178,16 +3178,17 @@ end function ExportPanelDB(stPanel, bExp, makTab, sFunc) if(bExp) then local sMiss = GetOpVar("MISS_NOAV") + local sBase = GetOpVar("DIRPATH_BAS") local sExpo = GetOpVar("DIRPATH_EXP") local sMoDB = GetOpVar("MODE_DATABASE") local symSep, cT = GetOpVar("OPSYM_SEPARATOR") - local iCnt, sBase = 1, GetOpVar("DIRPATH_BAS") if(not fileExists(sBase, "DATA")) then fileCreateDir(sBase) end local fName = (sBase..sExpo..GetOpVar("NAME_LIBRARY").."_db.txt") local F = fileOpen(fName, "wb" ,"DATA"), sMiss; if(not F) then LogInstance("Open fail "..GetReport(fName)); return stPanel end F:Write("# "..sFunc..":("..tostring(bExp)..") "..GetDateTime().." [ "..sMoDB.." ]\n") - while(stPanel[iCnt]) do local vPanel = stPanel[iCnt] + for iCnt = 1, stPanel.Size do + local vPanel = stPanel[iCnt] local sM = vPanel[makTab:GetColumnName(1)] local sT = vPanel[makTab:GetColumnName(2)] local sN = vPanel[makTab:GetColumnName(3)] @@ -3195,8 +3196,9 @@ function ExportPanelDB(stPanel, bExp, makTab, sFunc) F:Write("# Categorize [ "..sMoDB.." ]("..sT.."): "..tostring(WorkshopID(sT) or sMiss)) F:Write("\n"); cT = sT -- Cache category name end -- Otherwise just write down the piece active point - F:Write("\""..sM.."\""..symSep.."\""..sT.."\""..symSep.."\""..sN.."\"") - F:Write("\n"); iCnt = iCnt + 1 + F:Write("\""..sM.."\""..symSep) + F:Write("\""..sT.."\""..symSep) + F:Write("\""..sN.."\""); F:Write("\n") end; F:Flush(); F:Close() end; return stPanel end @@ -4465,10 +4467,10 @@ function AttachAdditions(ePiece) local eAng, ePos, sMoc = ePiece:GetAngles(), ePiece:GetPos(), ePiece:GetModel() local stData = CacheQueryAdditions(sMoc); if(not IsHere(stData)) then LogInstance("Model skip "..GetReport(sMoc)); return true end - local makTab, iCnt = GetBuilderNick("ADDITIONS"), 1; if(not IsHere(makTab)) then + local makTab = GetBuilderNick("ADDITIONS"); if(not IsHere(makTab)) then LogInstance("Missing table definition"); return nil end local sEoa = GetOpVar("OPSYM_ENTPOSANG"); LogInstance("PIECE:MODEL("..sMoc..")") - while(stData[iCnt]) do -- While additions are present keep adding them + for iCnt = 1, stData.Size do -- While additions are present keep adding them local arRec = stData[iCnt]; LogInstance("PIECE:ADDITION("..iCnt..")") local dCass, oPOA = GetOpVar("ENTITY_DEFCLASS"), NewPOA() local sCass = GetEmpty(arRec[makTab:GetColumnName(3)], nil, dCass) @@ -4522,7 +4524,7 @@ function AttachAdditions(ePiece) local mA = stData[iCnt][makTab:GetColumnName(2)] local mC = stData[iCnt][makTab:GetColumnName(3)] LogInstance("Entity invalid "..GetReport(iCnt, sMoc, mA, mC)); return false - end; iCnt = iCnt + 1 + end end; LogInstance("Success"); return true end From 200ef1b2b8c8cbbf631d691cceece5e0e3eb66cb Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 1 Aug 2024 14:43:59 +0300 Subject: [PATCH 004/114] Fixed: Phys property size being bound to sequential records Updated: Additions data insertion trigger in LUA mode Updated: Pieces DSV export multi-liner --- lua/autorun/trackassembly_init.lua | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 57552f84..be6bf98e 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.763") +asmlib.SetOpVar("TOOL_VERSION","8.764") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1717,8 +1717,9 @@ asmlib.CreateTable("PIECES",{ local sP, sO, sA = stPnt.P:Export(stPnt.O), stPnt.O:Export(), stPnt.A:Export() local sC = (asmlib.IsHere(tData.Unit) and tostring(tData.Unit) or noSQL) sC = ((sC == sClass) and noSQL or sC) -- Export default class as noSQL - oFile:Write(sData..sDelim..makTab:Match(iD,4,true,"\"")..sDelim.. - "\""..sP.."\""..sDelim.."\""..sO.."\""..sDelim.."\""..sA.."\""..sDelim.."\""..sC.."\"\n") + oFile:Write(sData..sDelim..makTab:Match(iD,4,true,"\"")..sDelim) + oFile:Write("\""..sP.."\""..sDelim.."\""..sO.."\""..sDelim) + oFile:Write("\""..sA.."\""..sDelim.."\""..sC.."\"\n") end end; return true end, @@ -1752,14 +1753,12 @@ asmlib.CreateTable("ADDITIONS",{ tCache[snPK] = {}; stData = tCache[snPK] end if(not asmlib.IsHere(stData.Size)) then stData.Size = 0 end if(not asmlib.IsHere(stData.Slot)) then stData.Slot = snPK end - local nCnt, iID = 2, makTab:Match(arLine[4],4); if(not asmlib.IsHere(iID)) then + local iID = makTab:Match(arLine[4],4); if(not asmlib.IsHere(iID)) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(4,arLine[4],snPK),vSrc); return false end stData[iID] = {} -- LineID has to be set properly - while(nCnt <= defTab.Size) do sCol = makTab:GetColumnName(nCnt) - stData[iID][sCol] = makTab:Match(arLine[nCnt],nCnt) - if(not asmlib.IsHere(stData[iID][sCol])) then -- Check data conversion output - asmlib.LogInstance("Cannot match "..asmlib.GetReport(nCnt,arLine[nCnt],snPK),vSrc); return false - end; nCnt = (nCnt + 1) + for iCnt = 2, defTab.Size do local sC = makTab:GetColumnName(iCnt) -- Check data conversion output + stData[iID][sC] = makTab:Match(arLine[iCnt],iCnt); if(not asmlib.IsHere(stData[iID][sC])) then + asmlib.LogInstance("Cannot match "..asmlib.GetReport(iCnt,arLine[iCnt],snPK),vSrc); return false end end; stData.Size = iID; return true end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) @@ -1817,7 +1816,7 @@ asmlib.CreateTable("PHYSPROPERTIES",{ tTypes[tTypes.Size] = snPK; tNames[snPK] = {} tNames[snPK].Size, tNames[snPK].Slot = 0, snPK end -- Data matching crashes only on numbers - tNames[snPK].Size = iNameID + tNames[snPK].Size = tNames[snPK].Size + 1 tNames[snPK][iNameID] = makTab:Match(arLine[3],3); return true end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) From c1ba6d4b4401dac5f15981ee04e6c77934958e7e Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 1 Aug 2024 15:29:10 +0300 Subject: [PATCH 005/114] Fixed: Node name is always overridden by category --- lua/autorun/trackassembly_init.lua | 2 +- lua/weapons/gmod_tool/stools/trackassembly.lua | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index be6bf98e..004778d2 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.764") +asmlib.SetOpVar("TOOL_VERSION","8.765") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 446ee3d7..fc032c35 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2343,10 +2343,10 @@ function TOOL.BuildCPanel(CPanel) if(pTypes[sTyp]) then pItem = pTypes[sTyp] else pItem = pTree end -- Register the category if definition functional is given if(catTypes[sTyp]) then -- There is a category definition - local bSuc, vCat, sNam = pcall(catTypes[sTyp].Cmp, sMod) + local bSuc, vCat, vNam = pcall(catTypes[sTyp].Cmp, sMod) if(bSuc) then -- When the call is successful in protected mode - if(sNam and not asmlib.IsBlank(sNam)) then - sNam = asmlib.GetBeautifyName(sNam) + if(vNam and not asmlib.IsBlank(vNam)) then + sNam = asmlib.GetBeautifyName(vNam) end -- Custom name override when the addon requests local pCur = pCateg[sTyp] if(not asmlib.IsHere(pCur)) then From 64d45089b7a78064c10cf4af50055747252f0856 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 2 Aug 2024 16:48:54 +0300 Subject: [PATCH 006/114] Updated: SQL build statement library --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 326 ++++++++++++++++------------- 2 files changed, 187 insertions(+), 141 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 004778d2..78f15ca7 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.765") +asmlib.SetOpVar("TOOL_VERSION","8.767") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 3a7f6b35..147b4929 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -672,7 +672,7 @@ function InitBase(sName, sPurp) SetOpVar("LOG_INIT",{"*Init", false, 0}) SetOpVar("TIME_INIT",Time()) SetOpVar("DELAY_ACTION",0.01) - SetOpVar("DELAY_REMOVE",0.5) + SetOpVar("DELAY_REMOVE",0.2) SetOpVar("MAX_ROTATION",360) SetOpVar("ANG_ZERO",Angle()) SetOpVar("VEC_ZERO",Vector()) @@ -2540,11 +2540,11 @@ function GetBuilderID(vID) return makTab -- Return the dedicated table builder object end -function CreateTable(sTable,defTab,bDelete,bReload) +function NewTable(sTable,defTab,bDelete,bReload) if(not isstring(sTable)) then LogInstance("Table nick mismatch "..GetReport(sTable)); return false end if(IsBlank(sTable)) then - LogInstance("Table name must not be empty"); return false end + LogInstance("Table nick is mandatory"); return false end if(not istable(defTab)) then LogInstance("Table definition missing for "..GetReport(sTable)); return false end defTab.Nick = sTable:upper(); defTab.Name = GetOpVar("TOOLNAME_PU")..defTab.Nick @@ -2576,6 +2576,12 @@ function CreateTable(sTable,defTab,bDelete,bReload) function self:GetCommand(vK) if(vK) then return tabCmd[vK] end; return tabCmd end + -- Deny the currently built statement + function self:Deny() + local qtCmd = self:GetCommand() + if(not qtCmd.STMT) then return self end + qtCmd[qtCmd.STMT] = false; return self + end -- Alias for reading the last created SQL statement function self:Get(vK) local qtCmd = self:GetCommand() @@ -2621,10 +2627,10 @@ function CreateTable(sTable,defTab,bDelete,bReload) local qtCmd, qtDef = self:GetCommand(), self:GetDefinition() local sTm = tostring((vTim and vTim or qtDef.Timer) or "") local tTm = GetOpVar("OPSYM_REVISION"):Explode(sTm) - tTm[1] = tostring(tTm[1] or "CQT") -- Timer mode - tTm[2] = (tonumber(tTm[2]) or 0) -- Record life - tTm[3] = ((tonumber(tTm[3]) or 0) ~= 0) and true or false -- Kill command - tTm[4] = ((tonumber(tTm[4]) or 0) ~= 0) and true or false -- Collect garbage call + tTm[1] = tostring(tTm[1] or "CQT") -- Timer mode + tTm[2] = (tonumber(tTm[2]) or 0) -- Record life + tTm[3] = ((tonumber(tTm[3]) or 0) ~= 0) -- Kill command + tTm[4] = ((tonumber(tTm[4]) or 0) ~= 0) -- Collect garbage call qtCmd.Timer = tTm; return self end -- Navigates the reference in the cache @@ -2802,144 +2808,188 @@ function CreateTable(sTable,defTab,bDelete,bReload) else LogInstance("Invalid column type "..GetReport(tyCol),tabDef.Nick); return nil end; return snOut end - -- Build drop statement + -- Build SQL drop statement function self:Drop() local qtDef = self:GetDefinition() - local qtCmd = self:GetCommand(); qtCmd.STMT = "Drop" + local qtCmd = self:GetCommand(); qtCmd.STMT = "DROP" local qsKey = GetOpVar("FORM_KEYSTMT"):format(qtCmd.STMT, "") local sStmt = CacheStmt(qsKey, nil, qtDef.Name) - if(not sStmt) then sStmt = CacheStmt(qsKey, "DROP TABLE %s;", qtDef.Name) end + if(not sStmt) then sStmt = CacheStmt(qsKey, qtCmd.STMT.." TABLE %s;", qtDef.Name) end qtCmd[qtCmd.STMT] = sStmt; return self end - -- Build delete statement + -- Build SQL delete statement function self:Delete() local qtDef = self:GetDefinition() - local qtCmd = self:GetCommand(); qtCmd.STMT = "Delete" + local qtCmd = self:GetCommand(); qtCmd.STMT = "DELETE" local qsKey = GetOpVar("FORM_KEYSTMT"):format(qtCmd.STMT, "") local sStmt = CacheStmt(qsKey, nil, qtDef.Name) - if(not sStmt) then sStmt = CacheStmt(qsKey, "DELETE FROM %s;", qtDef.Name) end + if(not sStmt) then sStmt = CacheStmt(qsKey, qtCmd.STMT.." FROM %s;", qtDef.Name) end qtCmd[qtCmd.STMT] = sStmt; return self end -- https://wiki.garrysmod.com/page/sql/Begin + -- Build SQL begin statement function self:Begin() - local qtCmd = self:GetCommand() - qtCmd.Begin = "BEGIN;"; return self + local qtCmd = self:GetCommand(); qtCmd.STMT = "BEGIN" + local qsKey = GetOpVar("FORM_KEYSTMT"):format(qtCmd.STMT, "") + local sStmt = CacheStmt(qsKey) + if(not sStmt) then sStmt = CacheStmt(qsKey, qtCmd.STMT..";") end + qtCmd[qtCmd.STMT] = sStmt; return self end -- https://wiki.garrysmod.com/page/sql/Commit + -- Build SQL commit statement function self:Commit() - local qtCmd = self:GetCommand() - qtCmd.Commit = "COMMIT;"; return self + local qtCmd = self:GetCommand(); qtCmd.STMT = "COMMIT" + local qsKey = GetOpVar("FORM_KEYSTMT"):format(qtCmd.STMT, "") + local sStmt = CacheStmt(qsKey) + if(not sStmt) then sStmt = CacheStmt(qsKey, qtCmd.STMT..";") end + qtCmd[qtCmd.STMT] = sStmt; return self end -- Build create/drop/delete statement table of statements - function self:Create() + -- Build SQL create table statement + function self:Create(...) + local nA, tA = select("#", ...); local qtDef = self:GetDefinition() - local qtCmd, iInd = self:GetCommand(), 1; qtCmd.STMT = "Create" - qtCmd.Create = "CREATE TABLE "..qtDef.Name.." ( " - while(qtDef[iInd]) do local v = qtDef[iInd] - if(not v[1]) then LogInstance("Missing col name "..GetReport(iInd),tabDef.Nick); return nil end - if(not v[2]) then LogInstance("Missing col type "..GetReport(iInd),tabDef.Nick); return nil end - qtCmd.Create = qtCmd.Create..(v[1]):upper().." "..(v[2]):upper() - iInd = (iInd + 1); if(qtDef[iInd]) then qtCmd.Create = qtCmd.Create ..", " end + if(nA > 0) then tA = {...} else + tA = qtDef.Create; nI = #tA + LogInstance("Definition index", tabDef.Nick) end - qtCmd.Create = qtCmd.Create.." );"; return self + local qtDef = self:GetDefinition() + local qtCmd = self:GetCommand(); qtCmd.STMT = "CREATE" + local sStmt = qtCmd.STMT.." TABLE "..qtDef.Name.." ( " + for iCnt = 1, qtDef.Size do + local tC = qtDef[iCnt]; if(not tC) then + LogInstance("Column missing "..GetReport(nA,iCnt), tabDef.Nick); return self:Deny() end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column name mismatch "..GetReport(nA,iCnt),tabDef.Nick); return self:Deny() end + local sT = tostring(tC[2] or ""); if(IsBlank(sT)) then + LogInstance("Column type mismatch "..GetReport(nA,iCnt),tabDef.Nick); return self:Deny() end + sStmt = sStmt..sC:upper():Trim().." "..sC:upper():Trim()..", " + end; qtCmd[qtCmd.STMT] = sStmt:sub(1, -3).." );"; return self end - -- Build SQL table indexes - function self:Index(...) local tIndex = {...} - local qtCmd, qtDef = self:GetCommand(), self:GetDefinition() - if(not (istable(tIndex) and tIndex[1])) then - tIndex = qtDef.Index end -- Empty stack use table definition - if(istable(qtCmd.Index)) then tableEmpty(qtCmd.Index) - else qtCmd.Index = {} end; local iCnt, iInd = 1, 1 - while(tIndex[iInd]) do -- Build index query and reload index commands - local vI = tIndex[iInd]; if(not istable(vI)) then - LogInstance("Value not table "..GetReport(iInd, vI),tabDef.Nick); return nil end - local cU, cC = "", ""; qtCmd.Index[iInd], iCnt = "CREATE INDEX IND_"..qtDef.Name, 1 - while(vI[iCnt]) do local vF = tonumber(vI[iCnt]); if(not vF) then - LogInstance("Value NaN "..GetReport(vI[iCnt], iInd, iCnt),tabDef.Nick); return nil end - if(not qtDef[vF]) then - LogInstance("Column missing "..GetReport(vF, tabDef.Size),tabDef.Nick); return nil end - cU, cC = (cU.."_" ..(qtDef[vF][1]):upper()), (cC..(qtDef[vF][1]):upper()); vI[iCnt] = vF - iCnt = iCnt + 1; if(vI[iCnt]) then cC = cC ..", " end + -- Build SQL table indexes statement + function self:Index(...) + local nA, tA = select("#", ...); + local qtDef = self:GetDefinition() + if(nA > 0) then tA = {...} else + tA = qtDef.Index; nA = #tA + LogInstance("Definition index", tabDef.Nick) + end + local qtCmd = self:GetCommand(); qtCmd.STMT = "INDEX" + local tStmt = qtCmd[qtCmd.STMT] + if(not tStmt) then tStmt = {}; qtCmd[qtCmd.STMT] = tStmt end + local tV = {}; tableEmpty(tStmt) + for iCnt = 1, nA do local vA = tA[iCnt]; tableEmpty(tV) + if(isnumber(vA)) then vA = {vA} end; if(not istable(vA)) then + LogInstance("Argument not table "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end + for iInd = 1, #vA do + local iA = mathFloor(tonumber(vA[iInd]) or 0); if(iA == 0) then + LogInstance("Index mismatch "..GetReport(nA,iCnt,iInd),tabDef.Nick); return self:Deny() end + local tC = qtDef[iA]; if(not tC) then + LogInstance("Column missing "..GetReport(nA,iCnt,iInd,iA), tabDef.Nick); return self:Deny() end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column mismatch "..GetReport(nA,iCnt,iInd,iA),tabDef.Nick); return self:Deny() end + tV[iInd] = sC end - qtCmd.Index[iInd] = qtCmd.Index[iInd]..cU.." ON "..qtDef.Name.." ( "..cC.." );" - iInd = iInd + 1 - end; return self + tStmt[iCnt] = "CREATE INDEX IND_"..qtDef.Nick.. "_" ..tableConcat(tV, "_" ) + .." ON "..qtDef.Name.." ( "..tableConcat(tV, ", ").." );" + end return self end - -- Build SQL select statement + -- Builds an SQL select statement function self:Select(...) local qtCmd = self:GetCommand() - local qtDef = self:GetDefinition(); qtCmd.STMT = "Select" - local sStmt, iCnt, tCols = "SELECT ", 1, {...} - if(tCols[1]) then - while(tCols[iCnt]) do - local v = tonumber(tCols[iCnt]); if(not IsHere(v)) then - LogInstance("Index type mismatch "..GetReport(tCols[iCnt]),tabDef.Nick); return nil end - if(not qtDef[v]) then - LogInstance("Missing column "..GetReport(v),tabDef.Nick); return nil end - if(qtDef[v][1]) then sStmt = sStmt..qtDef[v][1] - else LogInstance("Missing column name "..GetReport(v),tabDef.Nick); return nil end - iCnt = (iCnt + 1); if(tCols[iCnt]) then sStmt = sStmt ..", " end - end + local qtDef = self:GetDefinition(); qtCmd.STMT = "SELECT" + local sStmt, nA = qtCmd.STMT.." ", select("#", ...) + if(nA > 0) then local tA = {...} + for iCnt = 1, nA do + local vA = mathFloor(tonumber(tA[iCnt]) or 0); if(vA == 0) then + LogInstance("Index mismatch "..GetReport(nA,iCnt),tabDef.Nick); return self:Deny() end + local tC = qtDef[vA]; if(not tC) then + LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column mismatch "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end + sStmt = sStmt..sC..", " + end; sStmt = sStmt:sub(1, -3) else sStmt = sStmt.."*" end - qtCmd.Select = sStmt .." FROM "..qtDef.Name..";"; return self + qtCmd[qtCmd.STMT] = sStmt .." FROM "..qtDef.Name..";"; return self end - -- Add where clause to the select statement - function self:Where(...) local tWhere = {...} - if(not tWhere[1]) then return self end - local iCnt, qtDef, qtCmd = 1, self:GetDefinition(), self:GetCommand() - local sStmt = qtCmd.Select:Trim("%s"):Trim(";") - while(tWhere[iCnt]) do local k = tonumber(tWhere[iCnt][1]) - local v, t = tWhere[iCnt][2], qtDef[k][2]; if(not (k and v and t) ) then - LogInstance("Where clause inconsistent "..GetReport(k, v, t), tabDef.Nick); return nil end - if(not IsHere(v)) then - LogInstance("Data matching failed "..GetReport(iCnt, v),tabDef.Nick); return nil end - if(iCnt == 1) then sStmt = sStmt.." WHERE "..qtDef[k][1].." = "..tostring(v) - else sStmt = sStmt.." AND " ..qtDef[k][1].." = "..tostring(v) end - iCnt = iCnt + 1 - end; qtCmd.Select = sStmt..";"; return self + -- Add where clause to the current statement + function self:Where(...) + local nA = select("#", ...); if(nA == 0) then + LogInstance("Arguments missing", tabDef.Nick); return self end + local qtCmd = self:GetCommand(); if(not qtCmd.STMT) then + LogInstance("Current missing "..GetReport(nA,...), tabDef.Nick); return self end + local sStmt = qtCmd[qtCmd.STMT]; if(not InHere(sStmt)) then + LogInstance("Statement missing "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end + if(not sStmt) then + LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end + local qtDef = self:GetDefinition() + local tA = {...}; sStmt = sStmt:Trim("%s"):Trim(";") + for iCnt = 1, nA do + local vA, sW = tA[iCnt], ((iCnt == 1) and " WHERE " or " AND "); if(not istable(vA)) then + LogInstance("Argument not table "..GetReport(nA,iCnt), tabDef.Nick); return self:Deny() end + local wC, wV = vA[1], vA[2]; if(wC and wV) then + LogInstance("Parameters missing "..GetReport(nA,iCnt,wC,wV), tabDef.Nick); return self:Deny() end + local tC = qtDef[wC]; if(not tC) then + LogInstance("Column missing "..GetReport(nA,iCnt,wC,wV), tabDef.Nick); return self:Deny() end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column mismatch "..GetReport(nA,iCnt,wC,wV),tabDef.Nick); return self:Deny() end + sStmt = sStmt..sW..sC.." = "..tostring(wV) + end; qtCmd[qtCmd.STMT] = sStmt..";"; return self end - -- Add order by clause to the select statement - function self:Order(...) local tOrder = {...} - if(not tOrder[1]) then return self end - local qtCmd, qtDef = self:GetCommand(), self:GetDefinition() - local sDir, sStmt, iCnt = "", " ORDER BY ", 1 - qtCmd.Select = qtCmd.Select:Trim("%s"):Trim(";") - while(tOrder[iCnt]) do local v = tOrder[iCnt] - if(v ~= 0) then if(v > 0) then sDir = " ASC" - else sDir, tOrder[iCnt] = " DESC", -v; v = -v end - else LogInstance("Mismatch column ID "..GetReport(iCnt),tabDef.Nick); return nil end - sStmt, iCnt = (sStmt..qtDef[v][1]..sDir), (iCnt + 1) - if(tOrder[iCnt]) then sStmt = sStmt..", " end - end; qtCmd.Select = qtCmd.Select..sStmt..";" return self + -- Add order by clause to the current statement + function self:Order(...) + local nA = select("#", ...); if(nA == 0) then + LogInstance("Arguments missing", tabDef.Nick); return self end + local qtCmd = self:GetCommand(); if(not qtCmd.STMT) then + LogInstance("Current missing "..GetReport(nA,...), tabDef.Nick); return self end + local sStmt = qtCmd[qtCmd.STMT]; if(not IsHere(sStmt)) then + LogInstance("Statement missing "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end + if(not sStmt) then + LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end + local sDir, tA = "", {...} + local qtDef = self:GetDefinition() + sStmt = sStmt:Trim("%s"):Trim(";").." ORDER BY " + for iCnt = 1, nA do + local vA = mathFloor(tonumber(tA[iCnt]) or 0); if(vA == 0) then + LogInstance("Column undefined "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end + sDir = ((vA > 0) and " ASC" or " DESC"); vA = mathAbs(vA) + local tC = qtDef[vA]; if(not tC) then + LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column mismatch "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end + sStmt = (sStmt..sC..sDir..", ") + end; qtCmd[qtCmd.STMT] = sStmt:sub(1, -3)..";"; return self end -- Build SQL insert statement function self:Insert(...) - local qtCmd, iCnt, qIns = self:GetCommand(), 1, "" - local tInsert, qtDef = {...}, self:GetDefinition(); qtCmd.STMT = "Insert" - local sStmt = "INSERT INTO "..qtDef.Name.." ( " - if(not tInsert[1]) then - for iCnt = 1, qtDef.Size do qIns = qIns..qtDef[iCnt][1] - if(iCnt < qtDef.Size) then qIns = qIns..", " else qIns = qIns.." ) " end end - else - while(tInsert[iCnt]) do local vInd = tInsert[iCnt] - local iIns = tonumber(vInd); if(not IsHere(iIns)) then - LogInstance("Column ID NaN "..GetReport(vInd), tabDef.Nick); return nil end - local cIns = qtDef[iIns]; if(not IsHere(cIns)) then - LogInstance("Column ID mismatch "..GetReport(iIns), tabDef.Nick); return nil end - iCnt, qIns = (iCnt + 1), qIns..cIns[1] - if(tInsert[iCnt]) then qIns = qIns..", " else qIns = qIns.." ) " end + local qtCmd, nA = self:GetCommand(), select("#", ...) + local qtDef = self:GetDefinition(); qtCmd.STMT = "INSERT" + local sStmt = qtCmd.STMT.." INTO "..qtDef.Name.." ( " + if(nA > 0) then tA = {...} + for iCnt = 1, nA do -- Assume the user wants to build custom insert + local vA = mathFloor(tonumber(tA[iCnt]) or 0); if(vA == 0) then + LogInstance("Column undefined "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end + local tC = qtDef[vA]; if(not tC) then + LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column mismatch "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end + sStmt = sStmt..sC..", " + end + else -- When called with no arguments is the same as picking all columns + for iCnt = 1, qtDef.Size do + sStmt = sStmt..qtDef[iCnt][1]..", " end - end; qtCmd.Insert = sStmt..qIns; return self + end; qtCmd[qtCmd.STMT] = sStmt:sub(1, -3).." ) "; return self end - -- Build SQL values statement + -- Add values clause to the current statement function self:Values(...) - local qtDef, tValues = self:GetDefinition(), {...} - local qtCmd, iCnt, qVal = self:GetCommand(), 1, "" - local sStmt = qtCmd.Insert.." VALUES ( " - while(tValues[iCnt]) do - iCnt, qVal = (iCnt + 1), qVal..tostring(tValues[iCnt]) - if(tValues[iCnt]) then qVal = qVal..", " else qVal = qVal.." )" end - end; qtCmd.Insert = sStmt..qVal..";"; return self + local qtCmd, nA = self:GetCommand(), select("#", ...) + local qtDef = self:GetDefinition() + local sStmt = qtCmd[qtCmd.STMT]; if(not isstring(sStmt)) then + LogInstance("Previous missing "..GetReport(nA,qtCmd.STMT),tabDef.Nick); return self:Deny() end + sStmt = sStmt:Trim("%s"):Trim(";").." VALUES ( " + for iCnt = 1, nA do sStmt = sStmt..tostring(nA[iCnt])..", " end + qtCmd[qtCmd.STMT] = sStmt:sub(1, -3).." );"; return self end -- Uses the given array to create a record in the table function self:Record(arLine) @@ -2984,28 +3034,28 @@ function CreateTable(sTable,defTab,bDelete,bReload) return true -- The dynamic cache population was successful end -- When database mode is SQL create a table in sqlite - if(sMoDB == "SQL") then local makTab - makTab = self:Create(); if(not IsHere(makTab)) then + if(sMoDB == "SQL") then local vO + vO = self:Create():Get(); if(not IsHere(vO)) then LogInstance("Build create failed"); return self:Remove(false) end - makTab = self:Index(); if(not IsHere(makTab)) then + vO = self:Index(); if(not IsHere(vO)) then LogInstance("Build index failed"); return self:Remove(false) end - makTab = self:Drop(); if(not IsHere(makTab)) then + vO = self:Drop(); if(not IsHere(vO)) then LogInstance("Build drop failed"); return self:Remove(false) end - makTab = self:Delete(); if(not IsHere(makTab)) then + vO = self:Delete(); if(not IsHere(vO)) then LogInstance("Build delete failed"); return self:Remove(false) end - makTab = self:Begin(); if(not IsHere(makTab)) then + vO = self:Begin(); if(not IsHere(vO)) then LogInstance("Build begin failed"); return self:Remove(false) end - makTab = self:Commit(); if(not IsHere(makTab)) then + vO = self:Commit(); if(not IsHere(vO)) then LogInstance("Build commit failed"); return self:Remove(false) end - makTab = self:TimerSetup(); if(not IsHere(makTab)) then + vO = self:TimerSetup(); if(not IsHere(vO)) then LogInstance("Build timer failed"); return self:Remove(false) end local tQ = self:GetCommand(); if(not IsHere(tQ)) then - LogInstance("Build statement failed"); return self:Remove(false) end + LogInstance("Build command failed"); return self:Remove(false) end -- When enabled forces a table drop if(bReload) then - if(sqlTableExists(defTab.Name)) then local qRez = sqlQuery(tQ.Drop) + if(sqlTableExists(defTab.Name)) then local qRez = sqlQuery(tQ.DROP) if(not qRez and isbool(qRez)) then -- Remove table when SQL error is present - LogInstance("Table drop fail "..GetReport(sqlLastError(), tQ.Drop), tabDef.Nick) + LogInstance("Table drop fail "..GetReport(sqlLastError(), tQ.DROP), tabDef.Nick) return self:Remove(false) -- Remove table when SQL error is present else LogInstance("Table drop success",tabDef.Nick) end else LogInstance("Table drop skipped",tabDef.Nick) end @@ -3013,13 +3063,13 @@ function CreateTable(sTable,defTab,bDelete,bReload) -- Create the table using the given name and properties if(sqlTableExists(defTab.Name)) then LogInstance("Table create skipped",tabDef.Nick) - else local qRez = sqlQuery(tQ.Create) + else local qRez = sqlQuery(tQ.CREATE) if(not qRez and isbool(qRez)) then -- Remove table when SQL error is present - LogInstance("Table create fail "..GetReport(sqlLastError(), tQ.Create), tabDef.Nick) + LogInstance("Table create fail "..GetReport(sqlLastError(), tQ.CREATE), tabDef.Nick) return self:Remove(false) -- Remove table when SQL error is present end -- Check when SQL query has passed and the table is not yet created if(sqlTableExists(defTab.Name)) then - for k, v in pairs(tQ.Index) do local qRez = sqlQuery(v) + for k, v in pairs(tQ.INDEX) do local qRez = sqlQuery(v) if(not qRez and isbool(qRez)) then -- Check when the index query has passed LogInstance("Table create index fail "..GetReport(k, sqlLastError(), v), tabDef.Nick) return self:Remove(false) -- Clear table when index is not created @@ -3027,7 +3077,7 @@ function CreateTable(sTable,defTab,bDelete,bReload) LogInstance("Table create index: "..v,tabDef.Nick) end else - LogInstance("Table create check fail "..GetReport(sqlLastError(), tQ.Create), tabDef.Nick) + LogInstance("Table create check fail "..GetReport(sqlLastError(), tQ.CREATE), tabDef.Nick) return self:Remove(false) -- Clear table when it is not created by the first pass end end @@ -5020,14 +5070,15 @@ end * bCol > When enabled calls the garbage collector * Well gang, I guess that wraps up the mystery. ]] -function ClearGhosts(vSiz, bCol) +function ClearGhosts(vSiz, vStr, bCol) if(SERVER) then return true end local tGho = GetOpVar("ARRAY_GHOST") if(not IsHere(tGho)) then return true end if(tGho.Size == 0) then return true end + local iStr = mathFloor(tonumber(vStr) or 1) local iSiz = mathCeil(tonumber(vSiz) or tGho.Size) local nDer = GetOpVar("DELAY_REMOVE") - for iD = 1, iSiz do local eGho = tGho[iD] + for iD = iStr, iSiz do local eGho = tGho[iD] SafeRemoveEntityDelayed(eGho, nDer) end; tGho.Size, tGho.Slot = 0, GetOpVar("MISS_NOMD") if(bCol) then collectgarbage() end; return true @@ -5088,25 +5139,20 @@ end * Not until we walk around the ghost town and see what we can find. ]] function NewGhosts(nCnt, sModel) -- Only he's not a shadow, he's a green ghost! - if(SERVER) then return true end -- Ghosting is client side only - local tGho = GetOpVar("ARRAY_GHOST") -- Read ghosts stack array + if(SERVER) then return true end -- Leave it to Daphne to pick the wrong door! + local tGho = GetOpVar("ARRAY_GHOST") -- Let's split up and look for clues! if(not IsHere(tGho)) then return true end -- Not available then nothing to do if(nCnt == 0 and tGho.Size == 0) then return true end -- Skip processing - if(nCnt == 0 and tGho.Size ~= 0) then return ClearGhosts() end -- Disabled ghosting - local iD = 1; FadeGhosts(true) -- Fade the current ghost stack - while(iD <= nCnt) do local eGho = tGho[iD] + if(nCnt == 0 and tGho.Size ~= 0) then return ClearGhosts() end -- Disabled + FadeGhosts(true); ClearGhosts(nil, nCnt + 1) -- Trim the current ghost stack + for iD = 1, nCnt do local eGho = tGho[iD] -- Let's set a trap! if(eGho and eGho:IsValid()) then eGho:SetNoDraw(true) if(eGho:GetModel() ~= sModel) then eGho:SetModel(sModel) end - else -- Reconfigure the first `nCnt` ghosts + else -- Great, but next time, please don't do me any favors. tGho[iD] = NewEntityGhost(sModel); eGho = tGho[iD] - if(not (eGho and eGho:IsValid())) then ClearGhosts(iD) + if(not (eGho and eGho:IsValid())) then ClearGhosts(nCnt) LogInstance("Invalid "..GetReport(iD, sModel)); return false end - end; iD = iD + 1 -- Fade all the ghosts and refresh these that must be drawn - end -- Remove all others that must not be drawn to save memory - local nDer = GetOpVar("DELAY_REMOVE") - for iR = iD, tGho.Size do -- Executes only when (nCnt <= tGho.Size) - local eGho = tGho[iR] -- Read the current ghosted entity - SafeRemoveEntityDelayed(eGho, nDer) -- Make sure the item is NIL + end -- Fade all the ghosts and refresh these that must be drawn end; tGho.Size, tGho.Slot = nCnt, sModel; return true end From 14200a10ad85ce4b7d1efe00ffdbcdc8aa898f36 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 2 Aug 2024 17:33:23 +0300 Subject: [PATCH 007/114] Fixed: Primary table validation proper build error report Fixed: Creating table index error report order Fixed: Exit properly on SQL build deny Added: Store index count in the SQL command table --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 37 +++++++++++++++++++----------- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 78f15ca7..879bcc7f 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.767") +asmlib.SetOpVar("TOOL_VERSION","8.768") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 147b4929..17915f57 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2877,7 +2877,7 @@ function NewTable(sTable,defTab,bDelete,bReload) local qtCmd = self:GetCommand(); qtCmd.STMT = "INDEX" local tStmt = qtCmd[qtCmd.STMT] if(not tStmt) then tStmt = {}; qtCmd[qtCmd.STMT] = tStmt end - local tV = {}; tableEmpty(tStmt) + local tV = {}; tableEmpty(tStmt); tStmt.Size = nA for iCnt = 1, nA do local vA = tA[iCnt]; tableEmpty(tV) if(isnumber(vA)) then vA = {vA} end; if(not istable(vA)) then LogInstance("Argument not table "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end @@ -2920,8 +2920,10 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Current missing "..GetReport(nA,...), tabDef.Nick); return self end local sStmt = qtCmd[qtCmd.STMT]; if(not InHere(sStmt)) then LogInstance("Statement missing "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end - if(not sStmt) then - LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end + if(not sStmt and isbool(sStmt)) then + LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end + if(not isstring(sStmt)) then + LogInstance("Previous mismatch "..GetReport(nA,qtCmd.STMT,sStmt),tabDef.Nick); return self:Deny() end local qtDef = self:GetDefinition() local tA = {...}; sStmt = sStmt:Trim("%s"):Trim(";") for iCnt = 1, nA do @@ -2944,8 +2946,10 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Current missing "..GetReport(nA,...), tabDef.Nick); return self end local sStmt = qtCmd[qtCmd.STMT]; if(not IsHere(sStmt)) then LogInstance("Statement missing "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end - if(not sStmt) then - LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end + if(not sStmt and isbool(sStmt)) then + LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end + if(not isstring(sStmt)) then + LogInstance("Previous mismatch "..GetReport(nA,qtCmd.STMT,sStmt),tabDef.Nick); return self:Deny() end local sDir, tA = "", {...} local qtDef = self:GetDefinition() sStmt = sStmt:Trim("%s"):Trim(";").." ORDER BY " @@ -2985,8 +2989,11 @@ function NewTable(sTable,defTab,bDelete,bReload) function self:Values(...) local qtCmd, nA = self:GetCommand(), select("#", ...) local qtDef = self:GetDefinition() - local sStmt = qtCmd[qtCmd.STMT]; if(not isstring(sStmt)) then - LogInstance("Previous missing "..GetReport(nA,qtCmd.STMT),tabDef.Nick); return self:Deny() end + local sStmt = qtCmd[qtCmd.STMT]; + if(not sStmt and isbool(sStmt)) then + LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end + if(not isstring(sStmt)) then + LogInstance("Previous mismatch "..GetReport(nA,qtCmd.STMT,sStmt),tabDef.Nick); return self:Deny() end sStmt = sStmt:Trim("%s"):Trim(";").." VALUES ( " for iCnt = 1, nA do sStmt = sStmt..tostring(nA[iCnt])..", " end qtCmd[qtCmd.STMT] = sStmt:sub(1, -3).." );"; return self @@ -3037,15 +3044,15 @@ function NewTable(sTable,defTab,bDelete,bReload) if(sMoDB == "SQL") then local vO vO = self:Create():Get(); if(not IsHere(vO)) then LogInstance("Build create failed"); return self:Remove(false) end - vO = self:Index(); if(not IsHere(vO)) then + vO = self:Index():Get(); if(not IsHere(vO)) then LogInstance("Build index failed"); return self:Remove(false) end - vO = self:Drop(); if(not IsHere(vO)) then + vO = self:Drop():Get(); if(not IsHere(vO)) then LogInstance("Build drop failed"); return self:Remove(false) end - vO = self:Delete(); if(not IsHere(vO)) then + vO = self:Delete():Get(); if(not IsHere(vO)) then LogInstance("Build delete failed"); return self:Remove(false) end - vO = self:Begin(); if(not IsHere(vO)) then + vO = self:Begin():Get(); if(not IsHere(vO)) then LogInstance("Build begin failed"); return self:Remove(false) end - vO = self:Commit(); if(not IsHere(vO)) then + vO = self:Commit():Get(); if(not IsHere(vO)) then LogInstance("Build commit failed"); return self:Remove(false) end vO = self:TimerSetup(); if(not IsHere(vO)) then LogInstance("Build timer failed"); return self:Remove(false) end @@ -3069,9 +3076,11 @@ function NewTable(sTable,defTab,bDelete,bReload) return self:Remove(false) -- Remove table when SQL error is present end -- Check when SQL query has passed and the table is not yet created if(sqlTableExists(defTab.Name)) then - for k, v in pairs(tQ.INDEX) do local qRez = sqlQuery(v) + for iQ = 1, #tQ.INDEX do + local qInx = tQ.INDEX[iQ] + local qRez = sqlQuery(qInx) if(not qRez and isbool(qRez)) then -- Check when the index query has passed - LogInstance("Table create index fail "..GetReport(k, sqlLastError(), v), tabDef.Nick) + LogInstance("Table create index fail "..GetReport(sqlLastError(), iQ, qInx), tabDef.Nick) return self:Remove(false) -- Clear table when index is not created end LogInstance("Table create index: "..v,tabDef.Nick) From 091987fba138ad5bb7c9d75f08db11b7d6dc0ca9 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 20 Aug 2024 14:02:41 +0300 Subject: [PATCH 008/114] Added: Centralized function to copy from list view Added: Menu options size instead of a while + increment Utilize for-integer loop with Table.Size in some places Removed: `PushSortValues` integrated in `GetFrequentModels` Optimized: Read phys-properties column name in a local variable --- lua/autorun/trackassembly_init.lua | 31 +++----- .../core/custom/trackasmlib_wire.lua | 8 +- lua/trackassembly/trackasmlib.lua | 79 +++++++++++-------- .../gmod_tool/stools/trackassembly.lua | 12 +-- 4 files changed, 65 insertions(+), 65 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 879bcc7f..4c26aef1 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.768") +asmlib.SetOpVar("TOOL_VERSION","8.769") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -796,8 +796,8 @@ if(CLIENT) then tDat[3] = tostring(tDat[3] or ""):Trim() tDat[3] = (asmlib.IsBlank(tDat[3]) and sMis or tDat[3]) if(not asmlib.IsBlank(tDat[1]) and not asmlib.IsBlank(tDat[2])) then - if(nID and nID > 0 and pnRow and not tpText[1].m_NewDSV) then local iU = 1 - while(pnRow.Columns[iU]) do pnRow:SetColumnText(iU, tDat[iU]); iU = iU + 1 end + if(nID and nID > 0 and pnRow and not tpText[1].m_NewDSV) then + for iU = 1, tpText.Size do pnRow:SetColumnText(iU, tDat[iU]) end else pnListView:AddLine(tDat[1], tDat[2], tDat[3]):SetTooltip(tDat[3]) end; end; for iV = 1, tpText.Size do tpText[iV]:SetValue(""); tpText[iV]:SetText("") end end @@ -882,23 +882,17 @@ if(CLIENT) then if(not IsValid(pnMenu)) then pnFrame:Close() asmlib.LogInstance("Menu invalid",sLog..".ListView"); return nil end local mX, mY = inputGetCursorPos() - local iO, tOptions = 1, { - function() - local cC, cX, cY = 0, pnSelf:ScreenToLocal(mX, mY) - while(cX > 0) do cC = (cC + 1); cX = (cX - pnSelf:ColumnWidth(cC)) - end; local nID, pnRow = pnSelf:GetSelectedLine() - if(nID and nID > 0 and pnRow) then SetClipboardText(pnRow:GetColumnText(cC)) end - end, + local tOptions = { + function() asmlib.SetListViewClipboard(pnSelf) end, function() SetClipboardText(convRow(pnLine)) end, function() pnLine:SetColumnText(1, ((pnLine:GetColumnText(1) == "V") and "X" or "V")) end, function() excgRow(pnLine); tpText[1].m_NewDSV = false end, function() excgRow(pnLine); tpText[1].m_NewDSV = true end, function() pnSelf:RemoveLine(nIndex) end - } - while(tOptions[iO]) do local sO = tostring(iO) + }; tOptions.Size = #tOptions + for iO = 1, tOptions.Size do local sO = tostring(iO) local sDescr = languageGetPhrase("tool."..gsToolNameL..".pn_externdb_cm"..sO) pnMenu:AddOption(sDescr, tOptions[iO]):SetIcon(asmlib.ToIcon("pn_externdb_cm"..sO)) - iO = iO + 1 -- Loop trough the functions list and add to the menu end; pnMenu:Open() end -- Process only the right mouse button end -- Populate the tables for every database @@ -937,7 +931,7 @@ if(CLIENT) then local pnMenu = vguiCreate("DMenu") if(not IsValid(pnMenu)) then pnFrame:Close() asmlib.LogInstance("Menu invalid",sLog..".Button"); return nil end - local iO, tOptions = 1, { + local tOptions = { function() SetClipboardText(pnSelf:GetText()) end, function() SetClipboardText(sDsv) end, function() SetClipboardText(defTab.Nick) end, @@ -965,11 +959,10 @@ if(CLIENT) then asmlib.LogInstance("Deleted "..asmlib.GetReport(sCat), sLog..".Button") end end; pnManage:Remove() end - } - while(tOptions[iO]) do local sO = tostring(iO) + }; tOptions.Size = #tOptions + for iO = 1, tOptions.Size do local sO = tostring(iO) local sDescr = languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bt"..sO) pnMenu:AddOption(sDescr, tOptions[iO]):SetIcon(asmlib.ToIcon("pn_externdb_bt"..sO)) - iO = iO + 1 -- Loop trough the functions list and add them to the menu end; pnMenu:Open() end else asmlib.LogInstance("File missing ["..tostring(iP).."]",sLog..".Button") end @@ -1159,9 +1152,7 @@ if(CLIENT) then asmlib.SetAsmConvar(oPly, "model" , uiMod) end -- Copy the line model to the clipboard so it can be pasted with Ctrl+V pnListView.OnRowRightClick = function(pnSelf, nIndex, pnLine) - local cC, cX, cY = 0, inputGetCursorPos(); cX, cY = pnSelf:ScreenToLocal(cX, cY) - while(cX > 0) do cC = (cC + 1); cX = (cX - pnSelf:ColumnWidth(cC)) end - SetClipboardText(pnLine:GetColumnText(cC)) + asmlib.SetListViewClipboard(pnSelf) end if(not asmlib.UpdateListView(pnListView,frUsed,nCount)) then asmlib.LogInstance("Populate the list view failed",sLog); return nil end diff --git a/lua/entities/gmod_wire_expression2/core/custom/trackasmlib_wire.lua b/lua/entities/gmod_wire_expression2/core/custom/trackasmlib_wire.lua index c6499d53..ea3b256e 100644 --- a/lua/entities/gmod_wire_expression2/core/custom/trackasmlib_wire.lua +++ b/lua/entities/gmod_wire_expression2/core/custom/trackasmlib_wire.lua @@ -224,10 +224,10 @@ local function getAdditionsLine(sModel, nID) local defTab = makTab:GetDefinition(); if(not defTab) then asmlib.LogInstance("No table definition"); return {} end local stRec = asmlib.CacheQueryAdditions(sModel); if(not stRec) then return {} end - if(not stRec[nID]) then return {} end; stRec = stRec[nID] - local iRow, arData = 2, {} -- The model is missed by the main SELECT - while(defTab[iRow]) do -- Ordered by ID. Get the line per model - arData[iRow-1] = stRec[defTab[iRow][1]]; iRow = (iRow + 1) + if(not stRec[nID]) then return {} end -- There is no line with such number + local arData = {}; stRec = stRec[nID] -- The model is missed by the main SELECT + for iRow = 2, defTab.Size do -- Ordered by ID. Get the line per model + arData[iRow-1] = stRec[defTab[iRow][1]] end; return arData end diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 17915f57..4cc0c153 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1771,22 +1771,8 @@ function SetDirectoryNode(pnBase, sName, sModel) return pNode end -function PushSortValues(tTable,snCnt,nsValue,tData) - local iCnt, iInd = mathFloor(tonumber(snCnt) or 0), 1 - if(not (tTable and istable(tTable) and (iCnt > 0))) then return 0 end - if(not tTable[iInd]) then - tTable[iInd] = {Value = nsValue, Table = tData}; return iInd - else - while(tTable[iInd] and (tTable[iInd].Value < nsValue)) do iInd = iInd + 1 end - if(iInd > iCnt) then return iInd end - while(iInd < iCnt) do - tTable[iCnt] = tTable[iCnt - 1]; iCnt = iCnt - 1 - end; tTable[iInd] = {Value = nsValue, Table = tData}; return iInd - end -end - -function GetFrequentModels(snCount) - local snCount = (tonumber(snCount) or 0); if(snCount < 1) then +function GetFrequentModels(iCnt) + local iCnt = (tonumber(iCnt) or 0); if(iCnt < 1) then LogInstance("Count not applicable"); return nil end local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then LogInstance("Missing table builder"); return nil end @@ -1795,22 +1781,47 @@ function GetFrequentModels(snCount) local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then LogInstance("Missing table cache space"); return nil end local frUsed = GetOpVar("TABLE_FREQUENT_MODELS") - local iInd, tmNow = 1, Time(); tableEmpty(frUsed) + local iInd, tmNow = 1, Time(); tableEmpty(frUsed); frUsed.Size = 0 + local cM, cT, = makTab:GetColumnName(1), makTab:GetColumnName(2) + local cN, cS, = makTab:GetColumnName(3), makTab:GetColumnName(4) for mod, rec in pairs(tCache) do if(IsHere(rec.Used) and IsHere(rec.Size) and rec.Size > 0) then - iInd = PushSortValues(frUsed,snCount,tmNow-rec.Used,{ - [makTab:GetColumnName(1)] = mod, - [makTab:GetColumnName(2)] = rec.Type, - [makTab:GetColumnName(3)] = rec.Name, - [makTab:GetColumnName(4)] = rec.Size - }) - if(iInd < 1) then LogInstance("Array index out of border"); return nil end - end - end - if(IsHere(frUsed) and IsHere(frUsed[1])) then return frUsed, snCount end + local rmComp = (tmNow - rec.Used) + local stData = {[cM] = mod , [cT] = rec.Type, + [cN] = rec.Name, [cS] = rec.Size} + if(frUsed.Size == 0) then frUsed.Size = 1 + tableInsert(frUsed, {Value = rmComp, Table = stData}) + else local bTop = true -- Registered records are more than one + if(frUsed.Size >= iCnt) then break end -- Reached count + for iD = 1, frUsed.Size do -- Still something to add + if(frUsed[iD].Value >= rmComp) then -- Check placement + frUsed.Size, bTop = (frUsed.Size + 1), false -- Increment + tableInsert(frUsed, iD, {Value = rmComp, Table = stData}) + break -- Exist the inner check loop and add the record + end -- Snapshot is inserted and registered + end -- We have to add the item at the end of the array + if(bTop) then tableInsert(frUsed, {Value = rmComp, Table = stData}) end + end -- By default top addition is enabled. When found this is skipped + end -- Make a report for every record that is valid in the cache + end -- If there is at least one record added return the array reference + if(IsHere(frUsed) and IsHere(frUsed[1])) then return frUsed, iCnt end LogInstance("Array is empty or not available"); return nil end +function SetListViewClipboard(pnListView, nX, nY) + local mX, mY = inputGetCursorPos() + local nX, nY = (tonumber(nX) or mX), (tonumber(nY) or mY) + local cC, cX, cY = 0, pnListView:ScreenToLocal(nX, nY) + while(cX > 0) do + cC = (cC + 1) + cX = (cX - pnListView:ColumnWidth(cC)) + end + local nID, pnRow = pnListView:GetSelectedLine() + if(nID and nID > 0 and pnRow) then + SetClipboardText(pnRow:GetColumnText(cC)) + end +end + function SetComboBoxClipboard(pnCombo) local sV = pnCombo:GetValue() local iD = pnCombo:GetSelectedID() @@ -3355,10 +3366,9 @@ function CacheQueryProperty(sType) LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - stName.Slot, stName.Size = sType, #qData - for iCnt = 1, stName.Size do -- Store types count as rows count - stName[iCnt] = qData[iCnt][makTab:GetColumnName(3)] - end; LogInstance("Save >> "..GetReport(sType, keyName)) + local cName = makTab:GetColumnName(3); stName.Slot, stName.Size = sType, #qData + for iCnt = 1, stName.Size do stName[iCnt] = qData[iCnt][cName] end + LogInstance("Save >> "..GetReport(sType, keyName)) stName = makTab:TimerAttach(sFunc, defTab.Name, keyName, sType); return stName elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil else LogInstance("Unsupported mode "..GetReport(sMoDB, keyName)); return nil end @@ -3386,10 +3396,9 @@ function CacheQueryProperty(sType) LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - stType.Size = #qData -- Store types count as rows count - for iCnt = 1, stType.Size do - stType[iCnt] = qData[iCnt][makTab:GetColumnName(1)] - end; LogInstance("Save >> "..GetReport(keyType)) + local cName = makTab:GetColumnName(1); stType.Size = #qData + for iCnt = 1, stType.Size do stType[iCnt] = qData[iCnt][cName] end + LogInstance("Save >> "..GetReport(keyType)) stType = makTab:TimerAttach(sFunc, defTab.Name, keyType); return stType elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil else LogInstance("Unsupported mode "..GetReport(sMoDB, keyType)); return nil end diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index fc032c35..c83a4bb7 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2318,7 +2318,7 @@ function TOOL.BuildCPanel(CPanel) CPanel:AddItem(pTree) -- Register it to the panel local defTable = makTab:GetDefinition() local catTypes = asmlib.GetOpVar("TABLE_CATEGORIES") - local iC, iTyp, pTypes, pCateg, pNode = 1, 1, {}, {} + local iC, pTypes, pCateg, pNode = 1, 1, {}, {} for iC = 1, qPanel.Size do local vRec, bNow = qPanel[iC], true local sMod = vRec[makTab:GetColumnName(1)] @@ -2425,18 +2425,18 @@ function TOOL.BuildCPanel(CPanel) local cqProperty = asmlib.CacheQueryProperty(); if(not cqProperty) then asmlib.LogInstance("Property population empty",sLog); return end - while(cqProperty[iTyp]) do + for iTyp = 1, cqProperty.Size do local sT, sI = cqProperty[iTyp], asmlib.ToIcon("property_type") - pComboPhysType:AddChoice(sT, sT, false, sI); iTyp = iTyp + 1 + pComboPhysType:AddChoice(sT, sT, false, sI) end pComboPhysType.OnSelect = function(pnSelf, nInd, sVal, anyData) local cqNames = asmlib.CacheQueryProperty(sVal) - if(cqNames) then local iNam = 1; pComboPhysName:Clear() + if(cqNames) then pComboPhysName:Clear() pComboPhysName:SetValue(languageGetPhrase("tool."..gsToolNameL..".phyname_def")) - while(cqNames[iNam]) do + for iNam = 1, cqNames.Size do local sN, sI = cqNames[iNam], asmlib.ToIcon("property_name") - pComboPhysName:AddChoice(sN, sN, false, sI); iNam = iNam + 1 + pComboPhysName:AddChoice(sN, sN, false, sI) end else asmlib.LogInstance("Property type <"..sVal.."> names mismatch",sLog) end end From 7f37c09e4fb130200ddd866f4052d9bbd9094c9c Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 20 Aug 2024 15:33:46 +0300 Subject: [PATCH 009/114] Added: Sequential checks for all tables in SQL/LUA mode --- lua/autorun/trackassembly_init.lua | 14 ++++++++----- lua/trackassembly/trackasmlib.lua | 33 +++++++++++++++++++----------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 4c26aef1..0c821400 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.769") +asmlib.SetOpVar("TOOL_VERSION","8.770") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1678,12 +1678,12 @@ asmlib.CreateTable("PIECES",{ if(not asmlib.IsHere(stData.Slot)) then stData.Slot = snPK end local nOffsID = makTab:Match(arLine[4],4); if(not asmlib.IsHere(nOffsID)) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(4,arLine[4],snPK),vSrc); return false end + if(nOffsID ~= (stData.Size + 1)) then + asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(nOffsID,snPK),vSrc); return false end local stPOA = asmlib.RegisterPOA(stData,nOffsID,arLine[5],arLine[6],arLine[7]) if(not asmlib.IsHere(stPOA)) then asmlib.LogInstance("Cannot process "..asmlib.GetReport(nOffsID, snPK),vSrc); return false end - if(nOffsID > stData.Size) then stData.Size = nOffsID else - asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(nOffsID),vSrc); return false end - return true + stData.Size = stData.Size + 1; return true end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local tData, defTab = {}, makTab:GetDefinition() @@ -1746,11 +1746,13 @@ asmlib.CreateTable("ADDITIONS",{ if(not asmlib.IsHere(stData.Slot)) then stData.Slot = snPK end local iID = makTab:Match(arLine[4],4); if(not asmlib.IsHere(iID)) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(4,arLine[4],snPK),vSrc); return false end + if(iID ~= (stData.Size + 1)) then + asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iID,snPK),vSrc); return false end stData[iID] = {} -- LineID has to be set properly for iCnt = 2, defTab.Size do local sC = makTab:GetColumnName(iCnt) -- Check data conversion output stData[iID][sC] = makTab:Match(arLine[iCnt],iCnt); if(not asmlib.IsHere(stData[iID][sC])) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(iCnt,arLine[iCnt],snPK),vSrc); return false end - end; stData.Size = iID; return true + end; stData.Size = stData.Size + 1; return true end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() @@ -1807,6 +1809,8 @@ asmlib.CreateTable("PHYSPROPERTIES",{ tTypes[tTypes.Size] = snPK; tNames[snPK] = {} tNames[snPK].Size, tNames[snPK].Slot = 0, snPK end -- Data matching crashes only on numbers + if(iNameID ~= (tNames[snPK].Size + 1)) then + asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iNameID,snPK),vSrc); return false end tNames[snPK].Size = tNames[snPK].Size + 1 tNames[snPK][iNameID] = makTab:Match(arLine[3],3); return true end, diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4cc0c153..141f8041 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3176,15 +3176,17 @@ function CacheQueryPiece(sModel) if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end stData.Slot, stData.Size = sModel, #qData - stData.Type = qData[iCnt][makTab:GetColumnName(2)] - stData.Name = qData[iCnt][makTab:GetColumnName(3)] - stData.Unit = qData[iCnt][makTab:GetColumnName(8)] + stData.Type = qData[1][makTab:GetColumnName(2)] + stData.Name = qData[1][makTab:GetColumnName(3)] + stData.Unit = qData[1][makTab:GetColumnName(8)] + local cI = makTab:GetColumnName(4) + local cP = makTab:GetColumnName(5) + local cO = makTab:GetColumnName(6) + local cA = makTab:GetColumnName(7) for iCnt = 1, stData.Size do - local qRec = qData[iCnt] - if(not IsHere(RegisterPOA(stData,iCnt, - qRec[makTab:GetColumnName(5)], - qRec[makTab:GetColumnName(6)], - qRec[makTab:GetColumnName(7)]))) then + local qRec = qData[iCnt]; if(iCnt ~= qRec[cI]) then + asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end + if(not IsHere(RegisterPOA(stData,iCnt, qRec[cP], qRec[cO], qRec[cA]))) then LogInstance("Cannot process offset "..GetReport(iCnt, sModel)); return nil end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData @@ -3227,9 +3229,11 @@ function CacheQueryAdditions(sModel) if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end stData.Slot, stData.Size = sModel, #qData + local cI = makTab:GetColumnName(4) for iCnt = 1, stData.Size do - local qRec = qData[iCnt]; stData[iCnt] = {} - for col, val in pairs(qRec) do stData[iCnt][col] = val end + local qRec = qData[iCnt]; if(iCnt ~= qRec[cI]) then + asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end + stData[iCnt] = {}; for col, val in pairs(qRec) do stData[iCnt][col] = val end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil else LogInstance("Unsupported mode "..GetReport(sMoDB, sModel)); return nil end @@ -3366,8 +3370,13 @@ function CacheQueryProperty(sType) LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local cName = makTab:GetColumnName(3); stName.Slot, stName.Size = sType, #qData - for iCnt = 1, stName.Size do stName[iCnt] = qData[iCnt][cName] end + local cI, cN = makTab:GetColumnName(2), makTab:GetColumnName(3) + stName.Slot, stName.Size = sType, #qData + for iCnt = 1, stName.Size do + local qRec = qData[iCnt]; if(iCnt ~= qRec[cI]) then + asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sType)); return nil end + stName[iCnt] = qRec[cN] -- Properties are stored as arrays of strings + end LogInstance("Save >> "..GetReport(sType, keyName)) stName = makTab:TimerAttach(sFunc, defTab.Name, keyName, sType); return stName elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil From 93eb6c6484bf976fa7e145b65ee457d57a7a83bc Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 20 Aug 2024 16:25:44 +0300 Subject: [PATCH 010/114] Added: Some micro-optimizations --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 33 ++++++++++++++++-------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 0c821400..870ae252 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.770") +asmlib.SetOpVar("TOOL_VERSION","8.771") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 141f8041..393e1f88 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2772,13 +2772,12 @@ function NewTable(sTable,defTab,bDelete,bReload) -- Creates table column list as string function self:GetColumnList(sD) if(not IsHere(sD)) then return "" end - local qtDef, sRes, iCnt = self:GetDefinition(), "", 1 local sD = tostring(sD or "\t"):sub(1,1); if(IsBlank(sD)) then LogInstance("Missing delimiter",tabDef.Nick); return "" end - while(iCnt <= qtDef.Size) do - sRes, iCnt = (sRes..qtDef[iCnt][1]), (iCnt + 1) - if(qtDef[iCnt]) then sRes = sRes..sD end - end; return sRes + local qtDef, sRes, iCnt = self:GetDefinition(), sD, 1 + for iCnt = 1, qtDef.Size do + sRes = (sRes..tostring(qtDef[iCnt][1] or "")..sD) + end; return sRes:sub(2, -2) end -- Internal type matching function self:Match(snValue,ivID,bQuoted,sQuote,bNoRev,bNoNull) @@ -3255,20 +3254,21 @@ function ExportPanelDB(stPanel, bExp, makTab, sFunc) local sBase = GetOpVar("DIRPATH_BAS") local sExpo = GetOpVar("DIRPATH_EXP") local sMoDB = GetOpVar("MODE_DATABASE") - local symSep, cT = GetOpVar("OPSYM_SEPARATOR") + local symSep, rT = GetOpVar("OPSYM_SEPARATOR") if(not fileExists(sBase, "DATA")) then fileCreateDir(sBase) end local fName = (sBase..sExpo..GetOpVar("NAME_LIBRARY").."_db.txt") local F = fileOpen(fName, "wb" ,"DATA"), sMiss; if(not F) then LogInstance("Open fail "..GetReport(fName)); return stPanel end F:Write("# "..sFunc..":("..tostring(bExp)..") "..GetDateTime().." [ "..sMoDB.." ]\n") + local cM = makTab:GetColumnName(1) + local cT = makTab:GetColumnName(2) + local cN = makTab:GetColumnName(3) for iCnt = 1, stPanel.Size do local vPanel = stPanel[iCnt] - local sM = vPanel[makTab:GetColumnName(1)] - local sT = vPanel[makTab:GetColumnName(2)] - local sN = vPanel[makTab:GetColumnName(3)] - if(not cT or cT ~= sT) then -- Category has been changed + local sM, sT, sN = vPanel[cM], vPanel[cT], vPanel[cN] + if(not rT or rT ~= sT) then -- Category has been changed F:Write("# Categorize [ "..sMoDB.." ]("..sT.."): "..tostring(WorkshopID(sT) or sMiss)) - F:Write("\n"); cT = sT -- Cache category name + F:Write("\n"); rT = sT -- Cache category name end -- Otherwise just write down the piece active point F:Write("\""..sM.."\""..symSep) F:Write("\""..sT.."\""..symSep) @@ -3318,11 +3318,14 @@ function CacheQueryPanel(bExp) local tCache = libCache[defTab.Name] -- Sort directly by the model local tSort = Sort(tCache,{"Type","Slot"}); if(not tSort) then LogInstance("Cannot sort cache data"); return nil end + local cM = makTab:GetColumnName(1) + local cT = makTab:GetColumnName(2) + local cN = makTab:GetColumnName(3) for iCnt = 1, tSort.Size do stPanel[iCnt] = {} local vSort, vPanel = tSort[iCnt], stPanel[iCnt] - vPanel[makTab:GetColumnName(1)] = vSort.Key - vPanel[makTab:GetColumnName(2)] = vSort.Rec.Type - vPanel[makTab:GetColumnName(3)] = vSort.Rec.Name + vPanel[cM] = vSort.Key + vPanel[cT] = vSort.Rec.Type + vPanel[cN] = vSort.Rec.Name end; stPanel.Size = tSort.Size -- Store the amount sort rows return ExportPanelDB(stPanel, bExp, makTab, sFunc) else LogInstance("Unsupported mode "..GetReport(sMoDB)); return nil end @@ -3892,7 +3895,7 @@ function SetAdditionsAR(sModel, makTab, qList) for iD = 1, rec.Size do iCnt = (iCnt + 1) qData[iCnt] = {[pkModel] = mod} for iC = 2, defTab.Size do - local sN = makTab:GetColumnName(iC) + local sN = defTab[iC][1] qData[iCnt][sN] = rec[iD][sN] end end From a3d6aeb7f1ac9ac3c96688a2e281716e01c22202 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 20 Aug 2024 16:33:48 +0300 Subject: [PATCH 011/114] Utilize integer-for loop --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 870ae252..1a39876c 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.771") +asmlib.SetOpVar("TOOL_VERSION","8.772") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 393e1f88..6777f114 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -4028,9 +4028,9 @@ function ExportTypeAR(sType) LogInstance("Missing point ID "..GetReport(iID, rec.Slot)) fE:Flush(); fE:Close(); fS:Close(); return end - while(rPOA) do + for iID = 1, rec.Size do iCnt = (iCnt + 1); qPieces[iCnt] = {} -- Allocate row memory - local qRow = qPieces[iCnt] + local qRow = qPieces[iCnt]; rPOA = tOffs[iID] local sP, sO, sA = rPOA.P:Export(rPOA.O), rPOA.O:Export(), rPOA.A:Export() local sC = (IsHere(rec.Unit) and tostring(rec.Unit) or noSQL) sC = ((sC == sClass) and noSQL or sC) -- Export default class as noSQL @@ -4042,7 +4042,6 @@ function ExportTypeAR(sType) qRow[makP:GetColumnName(6)] = sO qRow[makP:GetColumnName(7)] = sA qRow[makP:GetColumnName(8)] = sC - iID = (iID + 1); rPOA = tOffs[iID] end end end From ce3083df49f7182a8cce0c8c94505751d4679f00 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 22 Aug 2024 13:45:20 +0300 Subject: [PATCH 012/114] Updated: Micro-optimization when calling `GetColumnName` --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 140 ++++++++++-------- .../gmod_tool/stools/trackassembly.lua | 7 +- 3 files changed, 81 insertions(+), 68 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 1a39876c..7fb70f03 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.772") +asmlib.SetOpVar("TOOL_VERSION","8.773") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 6777f114..ef8bd8e7 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1682,19 +1682,19 @@ function UpdateListView(pnListView,frUsed,nCount,sCol,sPat) LogInstance("Invalid ListView"); return false end pnListView:SetVisible(false); pnListView:Clear() else LogInstance("Missing ListView"); return false end - local sCol, iCnt = tostring(sCol or ""), 1 - local sPat, sDat = tostring(sPat or ""), nil - while(frUsed[iCnt]) do + local sCol = tostring(sCol or "") + local sPat = tostring(sPat or "") + for iCnt = 1, frUsed.Size do if(IsBlank(sPat)) then if(not AddLineListView(pnListView,frUsed,iCnt)) then LogInstance("Failed to add line on "..GetReport(iCnt)); return false end else - sDat = tostring(frUsed[iCnt].Table[sCol] or "") + local sDat = tostring(frUsed[iCnt].Table[sCol] or "") if(sDat:find(sPat)) then if(not AddLineListView(pnListView,frUsed,iCnt)) then LogInstance("Failed to add line "..GetReport(iCnt, sDat, sPat, sCol)); return false end end - end; iCnt = iCnt + 1 + end end; pnListView:SetVisible(true) LogInstance("Crated "..GetReport(iCnt-1)); return true end @@ -1782,13 +1782,13 @@ function GetFrequentModels(iCnt) LogInstance("Missing table cache space"); return nil end local frUsed = GetOpVar("TABLE_FREQUENT_MODELS") local iInd, tmNow = 1, Time(); tableEmpty(frUsed); frUsed.Size = 0 - local cM, cT, = makTab:GetColumnName(1), makTab:GetColumnName(2) - local cN, cS, = makTab:GetColumnName(3), makTab:GetColumnName(4) + local coMo, coTy, = makTab:GetColumnName(1), makTab:GetColumnName(2) + local coNm, coSz, = makTab:GetColumnName(3), makTab:GetColumnName(4) for mod, rec in pairs(tCache) do if(IsHere(rec.Used) and IsHere(rec.Size) and rec.Size > 0) then local rmComp = (tmNow - rec.Used) - local stData = {[cM] = mod , [cT] = rec.Type, - [cN] = rec.Name, [cS] = rec.Size} + local stData = {[coMo] = mod , [coTy] = rec.Type, + [coNm] = rec.Name, [coSz] = rec.Size} if(frUsed.Size == 0) then frUsed.Size = 1 tableInsert(frUsed, {Value = rmComp, Table = stData}) else local bTop = true -- Registered records are more than one @@ -3178,14 +3178,14 @@ function CacheQueryPiece(sModel) stData.Type = qData[1][makTab:GetColumnName(2)] stData.Name = qData[1][makTab:GetColumnName(3)] stData.Unit = qData[1][makTab:GetColumnName(8)] - local cI = makTab:GetColumnName(4) - local cP = makTab:GetColumnName(5) - local cO = makTab:GetColumnName(6) - local cA = makTab:GetColumnName(7) + local coLnID = makTab:GetColumnName(4) + local coP = makTab:GetColumnName(5) + local coO = makTab:GetColumnName(6) + local coA = makTab:GetColumnName(7) for iCnt = 1, stData.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[cI]) then + local qRec = qData[iCnt]; if(iCnt ~= qRec[coLnID]) then asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end - if(not IsHere(RegisterPOA(stData,iCnt, qRec[cP], qRec[cO], qRec[cA]))) then + if(not IsHere(RegisterPOA(stData,iCnt, qRec[coP], qRec[coO], qRec[coA]))) then LogInstance("Cannot process offset "..GetReport(iCnt, sModel)); return nil end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData @@ -3228,9 +3228,9 @@ function CacheQueryAdditions(sModel) if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end stData.Slot, stData.Size = sModel, #qData - local cI = makTab:GetColumnName(4) + local coLnID = makTab:GetColumnName(4) for iCnt = 1, stData.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[cI]) then + local qRec = qData[iCnt]; if(iCnt ~= qRec[coLnID]) then asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end stData[iCnt] = {}; for col, val in pairs(qRec) do stData[iCnt][col] = val end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData @@ -3254,21 +3254,21 @@ function ExportPanelDB(stPanel, bExp, makTab, sFunc) local sBase = GetOpVar("DIRPATH_BAS") local sExpo = GetOpVar("DIRPATH_EXP") local sMoDB = GetOpVar("MODE_DATABASE") - local symSep, rT = GetOpVar("OPSYM_SEPARATOR") + local symSep, cT = GetOpVar("OPSYM_SEPARATOR") if(not fileExists(sBase, "DATA")) then fileCreateDir(sBase) end local fName = (sBase..sExpo..GetOpVar("NAME_LIBRARY").."_db.txt") local F = fileOpen(fName, "wb" ,"DATA"), sMiss; if(not F) then LogInstance("Open fail "..GetReport(fName)); return stPanel end F:Write("# "..sFunc..":("..tostring(bExp)..") "..GetDateTime().." [ "..sMoDB.." ]\n") - local cM = makTab:GetColumnName(1) - local cT = makTab:GetColumnName(2) - local cN = makTab:GetColumnName(3) + local coMo = makTab:GetColumnName(1) + local coTy = makTab:GetColumnName(2) + local coNm = makTab:GetColumnName(3) for iCnt = 1, stPanel.Size do local vPanel = stPanel[iCnt] - local sM, sT, sN = vPanel[cM], vPanel[cT], vPanel[cN] - if(not rT or rT ~= sT) then -- Category has been changed + local sM, sT, sN = vPanel[coMo], vPanel[coTy], vPanel[coNm] + if(not cT or cT ~= sT) then -- Category has been changed F:Write("# Categorize [ "..sMoDB.." ]("..sT.."): "..tostring(WorkshopID(sT) or sMiss)) - F:Write("\n"); rT = sT -- Cache category name + F:Write("\n"); cT = sT -- Cache category name end -- Otherwise just write down the piece active point F:Write("\""..sM.."\""..symSep) F:Write("\""..sT.."\""..symSep) @@ -3318,14 +3318,14 @@ function CacheQueryPanel(bExp) local tCache = libCache[defTab.Name] -- Sort directly by the model local tSort = Sort(tCache,{"Type","Slot"}); if(not tSort) then LogInstance("Cannot sort cache data"); return nil end - local cM = makTab:GetColumnName(1) - local cT = makTab:GetColumnName(2) - local cN = makTab:GetColumnName(3) + local coMo = makTab:GetColumnName(1) + local coTy = makTab:GetColumnName(2) + local coNm = makTab:GetColumnName(3) for iCnt = 1, tSort.Size do stPanel[iCnt] = {} local vSort, vPanel = tSort[iCnt], stPanel[iCnt] - vPanel[cM] = vSort.Key - vPanel[cT] = vSort.Rec.Type - vPanel[cN] = vSort.Rec.Name + vPanel[coMo] = vSort.Key + vPanel[coTy] = vSort.Rec.Type + vPanel[coNm] = vSort.Rec.Name end; stPanel.Size = tSort.Size -- Store the amount sort rows return ExportPanelDB(stPanel, bExp, makTab, sFunc) else LogInstance("Unsupported mode "..GetReport(sMoDB)); return nil end @@ -3373,12 +3373,12 @@ function CacheQueryProperty(sType) LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local cI, cN = makTab:GetColumnName(2), makTab:GetColumnName(3) + local coLnID, coNm = makTab:GetColumnName(2), makTab:GetColumnName(3) stName.Slot, stName.Size = sType, #qData for iCnt = 1, stName.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[cI]) then + local qRec = qData[iCnt]; if(iCnt ~= qRec[coLnID]) then asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sType)); return nil end - stName[iCnt] = qRec[cN] -- Properties are stored as arrays of strings + stName[iCnt] = qRec[coNm] -- Properties are stored as arrays of strings end LogInstance("Save >> "..GetReport(sType, keyName)) stName = makTab:TimerAttach(sFunc, defTab.Name, keyName, sType); return stName @@ -3408,8 +3408,8 @@ function CacheQueryProperty(sType) LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local cName = makTab:GetColumnName(1); stType.Size = #qData - for iCnt = 1, stType.Size do stType[iCnt] = qData[iCnt][cName] end + local coNm = makTab:GetColumnName(1); stType.Size = #qData + for iCnt = 1, stType.Size do stType[iCnt] = qData[iCnt][coNm] end LogInstance("Save >> "..GetReport(keyType)) stType = makTab:TimerAttach(sFunc, defTab.Name, keyType); return stType elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil @@ -3888,12 +3888,12 @@ function SetAdditionsAR(sModel, makTab, qList) elseif(sMoDB == "LUA") then local iCnt = 0; qData = {} local tCache = libCache[defTab.Name] - local pkModel = makTab:GetColumnName(1) - local sLineID = makTab:GetColumnName(4) + local coMo = makTab:GetColumnName(1) + local coLn = makTab:GetColumnName(4) for mod, rec in pairs(tCache) do if(mod == sModel) then for iD = 1, rec.Size do iCnt = (iCnt + 1) - qData[iCnt] = {[pkModel] = mod} + qData[iCnt] = {[coMo] = mod} for iC = 2, defTab.Size do local sN = defTab[iC][1] qData[iCnt][sN] = rec[iD][sN] @@ -3901,7 +3901,7 @@ function SetAdditionsAR(sModel, makTab, qList) end end end - local tSort = Sort(qData, {pkModel, sLineID}); if(not tSort) then + local tSort = Sort(qData, {coMo, coLn}); if(not tSort) then LogInstance("Sort cache mismatch"); return end; tableEmpty(qData) for iD = 1, tSort.Size do qData[iD] = tSort[iD].Rec end else @@ -3933,8 +3933,10 @@ function ExportPiecesAR(fF,qData,sName,sInd,qList) fF:Write("local "..sName.." = {\n") local pkID, sInd, fRow = 1, " ", true local idxID = makTab:GetColumnID("LINEID") - for iD = 1, #qData do local qRow = qData[iD] - local mMod = qRow[makTab:GetColumnName(1)] + local coMo = makTab:GetColumnName(1) + for iD = 1, #qData do + local qRow = qData[iD] + local mMod = qRow[coMo] local aRow = makTab:GetArrayRow(qRow) for iA = 1, #aRow do local vA = aRow[iA] aRow[iA] = makTab:Match(vA,iA,true,"\"",true,true); if(not IsHere(aRow[iA])) then @@ -4018,8 +4020,14 @@ function ExportTypeAR(sType) elseif(sMoDB == "LUA") then local iCnt = 0; qPieces = {} local tCache = libCache[defP.Name] - local pkModel = makP:GetColumnName(1) - local sLineID = makP:GetColumnName(4) + local coMo = makP:GetColumnName(1) + local coTy = makP:GetColumnName(2) + local coNm = makP:GetColumnName(3) + local coLn = makP:GetColumnName(4) + local coP = makP:GetColumnName(5) + local coO = makP:GetColumnName(6) + local coA = makP:GetColumnName(7) + local coC = makP:GetColumnName(8) local sClass = GetOpVar("ENTITY_DEFCLASS") for mod, rec in pairs(tCache) do if(rec.Type == sType) then @@ -4034,18 +4042,16 @@ function ExportTypeAR(sType) local sP, sO, sA = rPOA.P:Export(rPOA.O), rPOA.O:Export(), rPOA.A:Export() local sC = (IsHere(rec.Unit) and tostring(rec.Unit) or noSQL) sC = ((sC == sClass) and noSQL or sC) -- Export default class as noSQL - qRow[makP:GetColumnName(1)] = rec.Slot - qRow[makP:GetColumnName(2)] = rec.Type - qRow[makP:GetColumnName(3)] = rec.Name - qRow[makP:GetColumnName(4)] = iID - qRow[makP:GetColumnName(5)] = sP - qRow[makP:GetColumnName(6)] = sO - qRow[makP:GetColumnName(7)] = sA - qRow[makP:GetColumnName(8)] = sC + qRow[coMo] = rec.Slot + qRow[coTy] = rec.Type + qRow[coNm] = rec.Name + qRow[coLn] = iID + qRow[coP ] = sP; qRow[coO ] = sO + qRow[coA ] = sA; qRow[coC ] = sC end end end - local tSort = Sort(qPieces, {pkModel, sLineID}) + local tSort = Sort(qPieces, {coMo, coLn}) if(not tSort) then LogInstance("Sort cache mismatch") fE:Flush(); fE:Close(); fS:Close(); return @@ -4549,17 +4555,23 @@ function AttachAdditions(ePiece) local makTab = GetBuilderNick("ADDITIONS"); if(not IsHere(makTab)) then LogInstance("Missing table definition"); return nil end local sEoa = GetOpVar("OPSYM_ENTPOSANG"); LogInstance("PIECE:MODEL("..sMoc..")") + local coMB, coMA = makTab:GetColumnName(1), makTab:GetColumnName(2) + local coEN, coLI = makTab:GetColumnName(3), makTab:GetColumnName(4) + local coPO, coAN = makTab:GetColumnName(5), makTab:GetColumnName(6) + local coMO, coPI = makTab:GetColumnName(7), makTab:GetColumnName(8) + local coDR, coPM = makTab:GetColumnName(9), makTab:GetColumnName(10) + local coPS, coSE = makTab:GetColumnName(11), makTab:GetColumnName(12) for iCnt = 1, stData.Size do -- While additions are present keep adding them local arRec = stData[iCnt]; LogInstance("PIECE:ADDITION("..iCnt..")") local dCass, oPOA = GetOpVar("ENTITY_DEFCLASS"), NewPOA() - local sCass = GetEmpty(arRec[makTab:GetColumnName(3)], nil, dCass) + local sCass = GetEmpty(arRec[coEN], nil, dCass) local eBonus = entsCreate(sCass); LogInstance("ents.Create("..sCass..")") if(eBonus and eBonus:IsValid()) then - local sMoa = tostring(arRec[makTab:GetColumnName(2)]) + local sMoa = tostring(arRec[coMA]) if(not IsModel(sMoa, true)) then LogInstance("Invalid attachment "..GetReport(iCnt, sMoc, sMoa)); return false end eBonus:SetModel(sMoa) LogInstance("ENT:SetModel("..sMoa..")") - local sPos = arRec[makTab:GetColumnName(5)]; if(not isstring(sPos)) then + local sPos = arRec[coPO]; if(not isstring(sPos)) then LogInstance("Position mismatch "..GetReport(iCnt, sMoc, sPos)); return false end if(not GetEmpty(sPos)) then oPOA:Decode(sPos, eBonus, "Pos") @@ -4567,7 +4579,7 @@ function AttachAdditions(ePiece) vPos:Set(ePiece:LocalToWorld(vPos)) eBonus:SetPos(vPos); LogInstance("ENT:SetPos(DB)") else eBonus:SetPos(ePos); LogInstance("ENT:SetPos(PIECE:POS)") end - local sAng = arRec[makTab:GetColumnName(6)]; if(not isstring(sAng)) then + local sAng = arRec[coAN]; if(not isstring(sAng)) then LogInstance("Angle mismatch "..GetReport(iCnt, sMoc, sAng)); return false end if(not GetEmpty(sAng)) then oPOA:Decode(sAng, eBonus, "Ang") @@ -4575,33 +4587,33 @@ function AttachAdditions(ePiece) aAng:Set(ePiece:LocalToWorldAngles(aAng)) eBonus:SetAngles(aAng); LogInstance("ENT:SetAngles(DB)") else eBonus:SetAngles(eAng); LogInstance("ENT:SetAngles(PIECE:ANG)") end - local nMo = (tonumber(arRec[makTab:GetColumnName(7)]) or -1) + local nMo = (tonumber(arRec[coMO]) or -1) if(nMo >= 0) then eBonus:SetMoveType(nMo) LogInstance("ENT:SetMoveType("..nMo..")") end - local nPh = (tonumber(arRec[makTab:GetColumnName(8)]) or -1) + local nPh = (tonumber(arRec[coPI]) or -1) if(nPh >= 0) then eBonus:PhysicsInit(nPh) LogInstance("ENT:PhysicsInit("..nPh..")") end - local nSh = (tonumber(arRec[makTab:GetColumnName(9)]) or 0) + local nSh = (tonumber(arRec[coDR]) or 0) if(nSh ~= 0) then nSh = (nSh > 0); eBonus:DrawShadow(nSh) LogInstance("ENT:DrawShadow("..tostring(nSh)..")") end eBonus:SetParent(ePiece); LogInstance("ENT:SetParent(PIECE)") eBonus:Spawn(); LogInstance("ENT:Spawn()") pPonus = eBonus:GetPhysicsObject() if(pPonus and pPonus:IsValid()) then - local bEm = (tonumber(arRec[makTab:GetColumnName(10)]) or 0) + local bEm = (tonumber(arRec[coPM]) or 0) if(bEm ~= 0) then bEm = (bEm > 0); pPonus:EnableMotion(bEm) LogInstance("ENT:EnableMotion("..tostring(bEm)..")") end - local nZe = (tonumber(arRec[makTab:GetColumnName(11)]) or 0) + local nZe = (tonumber(arRec[coPS]) or 0) if(nZe > 0) then pPonus:Sleep(); LogInstance("ENT:Sleep()") end end eBonus:Activate(); LogInstance("ENT:Activate()") ePiece:DeleteOnRemove(eBonus); LogInstance("PIECE:DeleteOnRemove(ENT)") - local nSo = (tonumber(arRec[makTab:GetColumnName(12)]) or -1) + local nSo = (tonumber(arRec[coSE]) or -1) if(nSo >= 0) then eBonus:SetSolid(nSo) LogInstance("ENT:SetSolid("..tostring(nSo)..")") end else - local mA = stData[iCnt][makTab:GetColumnName(2)] - local mC = stData[iCnt][makTab:GetColumnName(3)] + local mA = stData[iCnt][coMA] + local mC = stData[iCnt][coEN] LogInstance("Entity invalid "..GetReport(iCnt, sMoc, mA, mC)); return false end end; LogInstance("Success"); return true diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index c83a4bb7..1d20dc0e 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2319,11 +2319,12 @@ function TOOL.BuildCPanel(CPanel) local defTable = makTab:GetDefinition() local catTypes = asmlib.GetOpVar("TABLE_CATEGORIES") local iC, pTypes, pCateg, pNode = 1, 1, {}, {} + local coMo = makP:GetColumnName(1) + local coTy = makP:GetColumnName(2) + local coNm = makP:GetColumnName(3) for iC = 1, qPanel.Size do local vRec, bNow = qPanel[iC], true - local sMod = vRec[makTab:GetColumnName(1)] - local sTyp = vRec[makTab:GetColumnName(2)] - local sNam = vRec[makTab:GetColumnName(3)] + local sMod, sTyp, sNam = vRec[coMo], vRec[coTy], vRec[coNm] if(asmlib.IsModel(sMod)) then if(not (asmlib.IsBlank(sTyp) or pTypes[sTyp])) then local pRoot = pTree:AddNode(sTyp) -- No type folder made already From d6db1123af398e94c52aa5ddeb2e25cdd866844b Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 22 Aug 2024 14:15:09 +0300 Subject: [PATCH 013/114] Added: Varargs to custom sorting --- lua/autorun/trackassembly_init.lua | 4 +-- lua/trackassembly/trackasmlib.lua | 56 +++++++++++++----------------- 2 files changed, 27 insertions(+), 33 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 7fb70f03..9e5cb11a 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.773") +asmlib.SetOpVar("TOOL_VERSION","8.774") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1689,7 +1689,7 @@ asmlib.CreateTable("PIECES",{ local tData, defTab = {}, makTab:GetDefinition() for mod, rec in pairs(tCache) do tData[mod] = {KEY = (rec.Type..rec.Name..mod)} end - local tSort = asmlib.Sort(tData,{"KEY"}) + local tSort = asmlib.Sort(tData, "KEY") if(not tSort) then oFile:Flush(); oFile:Close() asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end local noSQL = asmlib.GetOpVar("MISS_NOSQL") diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index ef8bd8e7..7037dc9c 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1696,7 +1696,7 @@ function UpdateListView(pnListView,frUsed,nCount,sCol,sPat) end end end; pnListView:SetVisible(true) - LogInstance("Crated "..GetReport(iCnt-1)); return true + LogInstance("Updated "..GetReport(frUsed.Size)); return true end function GetDirectory(pCurr, vName) @@ -2269,21 +2269,21 @@ function RegisterPOA(stData, ivID, sP, sO, sA) return tOffs -- On success return the populated POA offset end -function Sort(tTable, tCols) +function Sort(tTable, ...) local tS, iS = {Size = 0}, 0 local fS = GetOpVar("VCOMPARE_SORT") - local tC = tCols or {}; tC.Size = #tC - for key, rec in pairs(tTable) do - iS = (iS + 1); tS[iS] = {} - tS[iS].Key, tS[iS].Rec = key, rec - if(istable(rec)) then tS[iS].Val = "" -- Allocate sorting value + local tC = {...}; tC.Size = select("#", ...) + for key, rec in pairs(tTable) do -- Scan the entire table + iS = (iS + 1); tS[iS] = {} -- Allocate key/record and store + local rS = tS[iS]; rS.Key, rS.Rec = key, rec -- Local reference + if(istable(rec)) then rS.Val = "" -- Allocate sorting value if(tC.Size > 0) then -- When there are sorting column names provided - for iI = 1, tC.Size do local sC = tC[iI]; if(not IsHere(rec[sC])) then + for iC = 1, tC.Size do local sC = tC[iC]; if(not IsHere(rec[sC])) then LogInstance("Key missing "..GetReport(sC)); return nil end - tS[iS].Val = tS[iS].Val..tostring(rec[sC]) -- Concatenate sort value + rS.Val = rS.Val..tostring(rec[sC]) -- Concatenate sort value end -- When no sort columns are provided sort by the keys instead - else tS[iS].Val = key end -- When column list not specified use the key - else tS[iS].Val = rec end -- When the element is not a table use the value + else rS.Val = key end -- When column list not specified use the key + else rS.Val = rec end -- When the element is not a table use the value end; tS.Size = iS; tableSort(tS, fS); return tS end @@ -3178,12 +3178,10 @@ function CacheQueryPiece(sModel) stData.Type = qData[1][makTab:GetColumnName(2)] stData.Name = qData[1][makTab:GetColumnName(3)] stData.Unit = qData[1][makTab:GetColumnName(8)] - local coLnID = makTab:GetColumnName(4) - local coP = makTab:GetColumnName(5) - local coO = makTab:GetColumnName(6) - local coA = makTab:GetColumnName(7) + local coID, coP = makTab:GetColumnName(4), makTab:GetColumnName(5) + local coO , coA = makTab:GetColumnName(6), makTab:GetColumnName(7) for iCnt = 1, stData.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[coLnID]) then + local qRec = qData[iCnt]; if(iCnt ~= qRec[coID]) then asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end if(not IsHere(RegisterPOA(stData,iCnt, qRec[coP], qRec[coO], qRec[coA]))) then LogInstance("Cannot process offset "..GetReport(iCnt, sModel)); return nil @@ -3228,9 +3226,9 @@ function CacheQueryAdditions(sModel) if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end stData.Slot, stData.Size = sModel, #qData - local coLnID = makTab:GetColumnName(4) + local coID = makTab:GetColumnName(4) for iCnt = 1, stData.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[coLnID]) then + local qRec = qData[iCnt]; if(iCnt ~= qRec[coID]) then asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end stData[iCnt] = {}; for col, val in pairs(qRec) do stData[iCnt][col] = val end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData @@ -3316,7 +3314,7 @@ function CacheQueryPanel(bExp) return ExportPanelDB(stPanel, bExp, makTab, sFunc) elseif(sMoDB == "LUA") then local tCache = libCache[defTab.Name] -- Sort directly by the model - local tSort = Sort(tCache,{"Type","Slot"}); if(not tSort) then + local tSort = Sort(tCache, "Type", "Slot"); if(not tSort) then LogInstance("Cannot sort cache data"); return nil end local coMo = makTab:GetColumnName(1) local coTy = makTab:GetColumnName(2) @@ -3373,10 +3371,10 @@ function CacheQueryProperty(sType) LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - local coLnID, coNm = makTab:GetColumnName(2), makTab:GetColumnName(3) + local coID, coNm = makTab:GetColumnName(2), makTab:GetColumnName(3) stName.Slot, stName.Size = sType, #qData for iCnt = 1, stName.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[coLnID]) then + local qRec = qData[iCnt]; if(iCnt ~= qRec[coID]) then asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sType)); return nil end stName[iCnt] = qRec[coNm] -- Properties are stored as arrays of strings end @@ -3901,7 +3899,7 @@ function SetAdditionsAR(sModel, makTab, qList) end end end - local tSort = Sort(qData, {coMo, coLn}); if(not tSort) then + local tSort = Sort(qData, coMo, coLn); if(not tSort) then LogInstance("Sort cache mismatch"); return end; tableEmpty(qData) for iD = 1, tSort.Size do qData[iD] = tSort[iD].Rec end else @@ -4020,14 +4018,10 @@ function ExportTypeAR(sType) elseif(sMoDB == "LUA") then local iCnt = 0; qPieces = {} local tCache = libCache[defP.Name] - local coMo = makP:GetColumnName(1) - local coTy = makP:GetColumnName(2) - local coNm = makP:GetColumnName(3) - local coLn = makP:GetColumnName(4) - local coP = makP:GetColumnName(5) - local coO = makP:GetColumnName(6) - local coA = makP:GetColumnName(7) - local coC = makP:GetColumnName(8) + local coMo, coTy = makP:GetColumnName(1), makP:GetColumnName(2) + local coNm, coLn = makP:GetColumnName(3), makP:GetColumnName(4) + local coP , coO = makP:GetColumnName(5), makP:GetColumnName(6) + local coA , coC = makP:GetColumnName(7), makP:GetColumnName(8) local sClass = GetOpVar("ENTITY_DEFCLASS") for mod, rec in pairs(tCache) do if(rec.Type == sType) then @@ -4051,7 +4045,7 @@ function ExportTypeAR(sType) end end end - local tSort = Sort(qPieces, {coMo, coLn}) + local tSort = Sort(qPieces, coMo, coLn) if(not tSort) then LogInstance("Sort cache mismatch") fE:Flush(); fE:Close(); fS:Close(); return From 282bb32a2379966f7d187e1cb534a9fdc2f48d77 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 23 Aug 2024 19:55:36 +0300 Subject: [PATCH 014/114] Added: Query store and format as table method --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 227 +++++++++++++---------------- 2 files changed, 105 insertions(+), 124 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 9e5cb11a..763571c1 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.774") +asmlib.SetOpVar("TOOL_VERSION","8.775") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 7037dc9c..96a01b0d 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2521,17 +2521,6 @@ end -------------------------- BUILDSQL ------------------------------ -function CacheStmt(sHash,sStmt,...) - if(not IsHere(sHash)) then LogInstance("Missing hash"); return nil end - local sHash, tStore = tostring(sHash), GetOpVar("QUERY_STORE") - if(not IsHere(tStore)) then LogInstance("Missing storage"); return nil end - if(IsHere(sStmt)) then -- If the key is located return the query - tStore[sHash] = tostring(sStmt); LogTable(tStore,"STMT") end - local sBase = tStore[sHash]; if(not IsHere(sBase)) then - LogInstance("Missing statement "..GetReport(sHash, sStmt)); return nil end - return sBase:format(...) -end - function GetBuilderNick(sTable) if(not isstring(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return nil end @@ -2593,10 +2582,26 @@ function NewTable(sTable,defTab,bDelete,bReload) if(not qtCmd.STMT) then return self end qtCmd[qtCmd.STMT] = false; return self end + -- Store built query in command list + function self:Store(vK, sQ) + local qtCmd = self:GetCommand() + if(not IsHere(vK)) then return self end + local mQ, tQ = qtCmd.STMT, GetOpVar("QUERY_STORE") + local sQ = (sQ or (mQ and qtCmd[mQ]) or nil) + LogInstance("Store "..GetReport(vK, sQ), tabDef.Nick) + tQ[vK] = sQ; return self + end -- Alias for reading the last created SQL statement - function self:Get(vK) + function self:Get(vK, ...) local qtCmd = self:GetCommand() - local iK = (vK or qtCmd.STMT); return qtCmd[iK] + local iK = (vK or qtCmd.STMT) + if(vK) then + local tQ = GetOpVar("QUERY_STORE") + local sQ = tQ[vK] -- Store entry + if(not IsHere(sQ)) then return sQ end + if(not sQ) then return sQ end + return sQ:format(...) + end; return qtCmd[iK] end -- Returns ID of the found column valid > 0 function self:GetColumnID(sN) @@ -2823,46 +2828,48 @@ function NewTable(sTable,defTab,bDelete,bReload) local qtDef = self:GetDefinition() local qtCmd = self:GetCommand(); qtCmd.STMT = "DROP" local qsKey = GetOpVar("FORM_KEYSTMT"):format(qtCmd.STMT, "") - local sStmt = CacheStmt(qsKey, nil, qtDef.Name) - if(not sStmt) then sStmt = CacheStmt(qsKey, qtCmd.STMT.." TABLE %s;", qtDef.Name) end - qtCmd[qtCmd.STMT] = sStmt; return self + local sStmt = self:Get(qsKey, qtDef.Name) + if(not IsHere(sStmt)) then + sStmt = qtCmd.STMT.." TABLE %s;" + sStmt = self:Store(qsKey, sStmt):Get(qsKey, qtDef.Name) + end; qtCmd[qtCmd.STMT] = sStmt; return self end -- Build SQL delete statement function self:Delete() local qtDef = self:GetDefinition() local qtCmd = self:GetCommand(); qtCmd.STMT = "DELETE" local qsKey = GetOpVar("FORM_KEYSTMT"):format(qtCmd.STMT, "") - local sStmt = CacheStmt(qsKey, nil, qtDef.Name) - if(not sStmt) then sStmt = CacheStmt(qsKey, qtCmd.STMT.." FROM %s;", qtDef.Name) end - qtCmd[qtCmd.STMT] = sStmt; return self + local sStmt = self:Get(qsKey, qtDef.Name) + if(not sStmt) then + sStmt = qtCmd.STMT.." FROM %s;" + sStmt = self:Store(qsKey, sStmt):Get(qsKey, qtDef.Name) + end; qtCmd[qtCmd.STMT] = sStmt; return self end -- https://wiki.garrysmod.com/page/sql/Begin -- Build SQL begin statement function self:Begin() local qtCmd = self:GetCommand(); qtCmd.STMT = "BEGIN" local qsKey = GetOpVar("FORM_KEYSTMT"):format(qtCmd.STMT, "") - local sStmt = CacheStmt(qsKey) - if(not sStmt) then sStmt = CacheStmt(qsKey, qtCmd.STMT..";") end - qtCmd[qtCmd.STMT] = sStmt; return self + local sStmt = self:Get(qsKey) + if(not sStmt) then + sStmt = qtCmd.STMT..";" + sStmt = self:Store(qsKey, sStmt):Get(qsKey) + end; qtCmd[qtCmd.STMT] = sStmt; return self end -- https://wiki.garrysmod.com/page/sql/Commit -- Build SQL commit statement function self:Commit() local qtCmd = self:GetCommand(); qtCmd.STMT = "COMMIT" local qsKey = GetOpVar("FORM_KEYSTMT"):format(qtCmd.STMT, "") - local sStmt = CacheStmt(qsKey) - if(not sStmt) then sStmt = CacheStmt(qsKey, qtCmd.STMT..";") end - qtCmd[qtCmd.STMT] = sStmt; return self + local sStmt = self:Get(qsKey) + if(not sStmt) then + sStmt = qtCmd.STMT..";" + sStmt = self:Store(qsKey, sStmt):Get(qsKey) + end; qtCmd[qtCmd.STMT] = sStmt; return self end -- Build create/drop/delete statement table of statements -- Build SQL create table statement - function self:Create(...) - local nA, tA = select("#", ...); - local qtDef = self:GetDefinition() - if(nA > 0) then tA = {...} else - tA = qtDef.Create; nI = #tA - LogInstance("Definition index", tabDef.Nick) - end + function self:Create() local qtDef = self:GetDefinition() local qtCmd = self:GetCommand(); qtCmd.STMT = "CREATE" local sStmt = qtCmd.STMT.." TABLE "..qtDef.Name.." ( " @@ -2873,35 +2880,36 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Column name mismatch "..GetReport(nA,iCnt),tabDef.Nick); return self:Deny() end local sT = tostring(tC[2] or ""); if(IsBlank(sT)) then LogInstance("Column type mismatch "..GetReport(nA,iCnt),tabDef.Nick); return self:Deny() end - sStmt = sStmt..sC:upper():Trim().." "..sC:upper():Trim()..", " - end; qtCmd[qtCmd.STMT] = sStmt:sub(1, -3).." );"; return self + sStmt = sStmt..sC.." "..sT..(iCnt ~= qtDef.Size and ", " or " );") + end; qtCmd[qtCmd.STMT] = sStmt; return self end -- Build SQL table indexes statement function self:Index(...) - local nA, tA = select("#", ...); + local nA, tA = select("#", ...) local qtDef = self:GetDefinition() if(nA > 0) then tA = {...} else tA = qtDef.Index; nA = #tA - LogInstance("Definition index", tabDef.Nick) + LogInstance("Definition source", tabDef.Nick) end local qtCmd = self:GetCommand(); qtCmd.STMT = "INDEX" local tStmt = qtCmd[qtCmd.STMT] if(not tStmt) then tStmt = {}; qtCmd[qtCmd.STMT] = tStmt end - local tV = {}; tableEmpty(tStmt); tStmt.Size = nA - for iCnt = 1, nA do local vA = tA[iCnt]; tableEmpty(tV) + tableEmpty(tStmt); tStmt.Size = nA + for iCnt = 1, nA do local vA = tA[iCnt] if(isnumber(vA)) then vA = {vA} end; if(not istable(vA)) then LogInstance("Argument not table "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end - for iInd = 1, #vA do - local iA = mathFloor(tonumber(vA[iInd]) or 0); if(iA == 0) then + tStmt[iCnt] = "CREATE "..(vA.Un and "UNIQUE " or " ")..qtCmd.STMT..(vA.Ne and " IF NOT EXISTS " or " ") + .."IND_"..qtDef.Name.. "_"..tostring(iCnt).." ON "..qtDef.Name.." ( " + local sV, nV = "", #vA + for iInd = 1, nV do + local iV = mathFloor(tonumber(vA[iInd]) or 0); if(iV == 0) then LogInstance("Index mismatch "..GetReport(nA,iCnt,iInd),tabDef.Nick); return self:Deny() end - local tC = qtDef[iA]; if(not tC) then - LogInstance("Column missing "..GetReport(nA,iCnt,iInd,iA), tabDef.Nick); return self:Deny() end + local tC = qtDef[iV]; if(not tC) then + LogInstance("Column missing "..GetReport(nA,iCnt,iInd,iV), tabDef.Nick); return self:Deny() end local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then - LogInstance("Column mismatch "..GetReport(nA,iCnt,iInd,iA),tabDef.Nick); return self:Deny() end - tV[iInd] = sC - end - tStmt[iCnt] = "CREATE INDEX IND_"..qtDef.Nick.. "_" ..tableConcat(tV, "_" ) - .." ON "..qtDef.Name.." ( "..tableConcat(tV, ", ").." );" + LogInstance("Column mismatch "..GetReport(nA,iCnt,iInd,iV),tabDef.Nick); return self:Deny() end + sV = sV..sC..(iInd ~= nV and ", " or " );") + end; tStmt[iCnt] = tStmt[iCnt]..sV end return self end -- Builds an SQL select statement @@ -2917,8 +2925,8 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then LogInstance("Column mismatch "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end - sStmt = sStmt..sC..", " - end; sStmt = sStmt:sub(1, -3) + sStmt = sStmt..sC..(iCnt ~= nA and ", " or "") + end else sStmt = sStmt.."*" end qtCmd[qtCmd.STMT] = sStmt .." FROM "..qtDef.Name..";"; return self end @@ -2960,19 +2968,18 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end if(not isstring(sStmt)) then LogInstance("Previous mismatch "..GetReport(nA,qtCmd.STMT,sStmt),tabDef.Nick); return self:Deny() end - local sDir, tA = "", {...} - local qtDef = self:GetDefinition() + local qtDef, sDir, tA = self:GetDefinition(), "", {...} sStmt = sStmt:Trim("%s"):Trim(";").." ORDER BY " for iCnt = 1, nA do local vA = mathFloor(tonumber(tA[iCnt]) or 0); if(vA == 0) then LogInstance("Column undefined "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end sDir = ((vA > 0) and " ASC" or " DESC"); vA = mathAbs(vA) local tC = qtDef[vA]; if(not tC) then - LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end + LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then LogInstance("Column mismatch "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end - sStmt = (sStmt..sC..sDir..", ") - end; qtCmd[qtCmd.STMT] = sStmt:sub(1, -3)..";"; return self + sStmt = sStmt..sC..sDir..(iCnt ~= nA and ", " or ";") + end; qtCmd[qtCmd.STMT] = sStmt; return self end -- Build SQL insert statement function self:Insert(...) @@ -2984,16 +2991,16 @@ function NewTable(sTable,defTab,bDelete,bReload) local vA = mathFloor(tonumber(tA[iCnt]) or 0); if(vA == 0) then LogInstance("Column undefined "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end local tC = qtDef[vA]; if(not tC) then - LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end + LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then LogInstance("Column mismatch "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end - sStmt = sStmt..sC..", " + sStmt = sStmt..sC..(iCnt ~= nA and ", " or " )") end - else -- When called with no arguments is the same as picking all columns - for iCnt = 1, qtDef.Size do - sStmt = sStmt..qtDef[iCnt][1]..", " + else nA = qtDef.Size -- When called with no arguments is the same as picking all columns + for iCnt = 1, nA do + sStmt = sStmt..qtDef[iCnt][1]..(iCnt ~= nA and ", " or " )") end - end; qtCmd[qtCmd.STMT] = sStmt:sub(1, -3).." ) "; return self + end; qtCmd[qtCmd.STMT] = sStmt; return self end -- Add values clause to the current statement function self:Values(...) @@ -3005,8 +3012,8 @@ function NewTable(sTable,defTab,bDelete,bReload) if(not isstring(sStmt)) then LogInstance("Previous mismatch "..GetReport(nA,qtCmd.STMT,sStmt),tabDef.Nick); return self:Deny() end sStmt = sStmt:Trim("%s"):Trim(";").." VALUES ( " - for iCnt = 1, nA do sStmt = sStmt..tostring(nA[iCnt])..", " end - qtCmd[qtCmd.STMT] = sStmt:sub(1, -3).." );"; return self + for iCnt = 1, nA do sStmt = sStmt..tostring(nA[iCnt])..(iCnt ~= nA and ", " or " );") end + qtCmd[qtCmd.STMT] = sStmt; return self end -- Uses the given array to create a record in the table function self:Record(arLine) @@ -3027,19 +3034,15 @@ function NewTable(sTable,defTab,bDelete,bReload) if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") for iD = 1, qtDef.Size do arLine[iD] = self:Match(arLine[iD],iD,true) end local qIndx = qsKey:format(sFunc, qtDef.Nick) - local Q = CacheStmt(qIndx, nil, unpack(arLine)) - if(not Q) then local sStmt = self:Insert():Values(unpack(qtDef.Query[sFunc])):Get() - if(not IsHere(sStmt)) then LogInstance("Build statement failed "..GetReport(qIndx,arLine[1]),tabDef.Nick); return nil end - Q = CacheStmt(qIndx, sStmt, unpack(arLine)) - end -- The query is built based on table definition - if(not IsHere(Q)) then - LogInstance("Internal cache error",tabDef.Nick); return false end + local Q = self:Get(qIndx, unpack(arLine)); if(not IsHere(Q)) then + Q = self:Insert():Values(unpack(qtDef.Query[sFunc])):Store(qIndx):Get(qIndx, unpack(arLine)) end + if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,arLine[1]),tabDef.Nick); return false end local qRez = sqlQuery(Q); if(not qRez and isbool(qRez)) then LogInstance("Execution error "..GetReport(sqlLastError(), Q),tabDef.Nick); return false end return true -- The dynamic statement insertion was successful elseif(sMoDB == "LUA") then local snPK = self:Match(arLine[1],1) if(not IsHere(snPK)) then -- If primary key becomes a number - LogInstance("Primary key mismatch "..GetReport(arLine[1], qtDef[1][1], snPK), tabDef.Nick); return nil end + LogInstance("Primary key mismatch "..GetReport(arLine[1], qtDef[1][1], snPK), tabDef.Nick); return false end local tCache = libCache[qtDef.Name]; if(not IsHere(tCache)) then LogInstance("Cache missing",tabDef.Nick); return false end if(not istable(qtDef.Cache)) then @@ -3086,7 +3089,7 @@ function NewTable(sTable,defTab,bDelete,bReload) return self:Remove(false) -- Remove table when SQL error is present end -- Check when SQL query has passed and the table is not yet created if(sqlTableExists(defTab.Name)) then - for iQ = 1, #tQ.INDEX do + for iQ = 1, tQ.INDEX.Size do local qInx = tQ.INDEX[iQ] local qRez = sqlQuery(qInx) if(not qRez and isbool(qRez)) then -- Check when the index query has passed @@ -3102,9 +3105,9 @@ function NewTable(sTable,defTab,bDelete,bReload) end -- When the table is present delete all records if(bDelete) then - if(sqlTableExists(defTab.Name)) then local qRez = sqlQuery(tQ.Delete) + if(sqlTableExists(defTab.Name)) then local qRez = sqlQuery(tQ.DELETE) if(not qRez and isbool(qRez)) then -- Remove table when SQL error is present - LogInstance("Table delete fail "..GetReport(sqlLastError(), tQ.Delete), tabDef.Nick) + LogInstance("Table delete fail "..GetReport(sqlLastError(), tQ.DELETE), tabDef.Nick) return self:Remove(false) -- Remove table when SQL error is present else LogInstance("Table delete success",tabDef.Nick) end else LogInstance("Table delete skipped",tabDef.Nick) end @@ -3163,13 +3166,10 @@ function CacheQueryPiece(sModel) LogInstance("Save >> "..GetReport(sModel)) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 local qIndx = qsKey:format(sFunc, "") - local Q = CacheStmt(qIndx, nil, qModel) - if(not Q) then - local sStmt = makTab:Select():Where({1,"%s"}):Order(4):Get() - if(not IsHere(sStmt)) then - LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end - Q = CacheStmt(qIndx, sStmt, qModel) - end + local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then + Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end + if(not Q) then -- Query creation has failed so no need to build again + LogInstance("Build statement failed "..GetReport(qIndx, qModel)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3214,13 +3214,10 @@ function CacheQueryAdditions(sModel) LogInstance("Save >> "..GetReport(sModel)) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 local qIndx = qsKey:format(sFunc, "") - local Q = CacheStmt(qIndx, nil, qModel) + local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then + Q = makTab:Select(2,3,4,5,6,7,8,9,10,11,12):Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end if(not Q) then - local sStmt = makTab:Select(2,3,4,5,6,7,8,9,10,11,12):Where({1,"%s"}):Order(4):Get() - if(not IsHere(sStmt)) then - LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end - Q = CacheStmt(qIndx, sStmt, qModel) - end + LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3297,13 +3294,10 @@ function CacheQueryPanel(bExp) local sMoDB = GetOpVar("MODE_DATABASE") if(sMoDB == "SQL") then local qIndx = qsKey:format(sFunc,"") - local Q = CacheStmt(qIndx, nil, 1) + local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then + Q = makTab:Select(1,2,3):Where({4,"%d"}):Order(2,1):Store(qIndx):Get(qIndx, 1) end if(not Q) then - local sStmt = makTab:Select(1,2,3):Where({4,"%d"}):Order(2,1):Get() - if(not IsHere(sStmt)) then - LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end - Q = CacheStmt(qIndx, sStmt, 1) - end + LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError())); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3360,13 +3354,10 @@ function CacheQueryProperty(sType) arNames[sType] = {}; stName = arNames[sType]; stName.Size = 0 local qType = makTab:Match(sType,1,true) local qIndx = qsKey:format(sFunc,keyName) - local Q = CacheStmt(qIndx, nil, qType) + local Q = makTab:Get(qIndx, qType); if(not IsHere(Q)) then + Q = makTab:Select(3):Where({1,"%s"}):Order(2):Store(qIndx):Get(qIndx, qType) end if(not Q) then - local sStmt = makTab:Select(3):Where({1,"%s"}):Order(2):Get() - if(not IsHere(sStmt)) then - LogInstance("Build statement failed "..GetReport(qIndx,qType)); return nil end - Q = CacheStmt(qIndx, sStmt, qType) - end + LogInstance("Build statement failed "..GetReport(qIndx,qType)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3395,13 +3386,10 @@ function CacheQueryProperty(sType) if(sMoDB == "SQL") then tCache[keyType] = {}; stType = tCache[keyType]; stType.Size = 0 local qIndx = qsKey:format(sFunc,keyType) - local Q = CacheStmt(qIndx, nil, 1) + local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then + Q = makTab:Select(1):Where({2,"%d"}):Order(1):Store(qIndx):Get(qIndx, 1) end if(not Q) then - local sStmt = makTab:Select(1):Where({2,"%d"}):Order(1):Get() - if(not IsHere(sStmt)) then - LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end - Q = CacheStmt(qIndx, sStmt, 1) - end + LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3869,15 +3857,11 @@ function SetAdditionsAR(sModel, makTab, qList) local qsKey = GetOpVar("FORM_KEYSTMT") local qModel = makTab:Match(tostring(sModel or ""), 1, true) local qIndx = qsKey:format(sFunc, "ADDITIONS") - local Q = CacheStmt(qIndx, nil, qModel) - if(not Q) then - local sStmt = makTab:Select():Where({1,"%s"}):Order(4):Get() - if(not IsHere(sStmt)) then - LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return - end; Q = CacheStmt(qIndx, sStmt, qModel) - end -- Check whenever we have some data present. Quit when not found - qData = sqlQuery(Q) - if(not qData and isbool(qData)) then + local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then + Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end + if(not IsHere(sStmt)) then + LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return + qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)) @@ -3986,7 +3970,7 @@ function ExportTypeAR(sType) LogInstance("Generate fail "..GetReport(sN)); return end local fS = fileOpen(sS, "rb", "DATA"); if(not fS) then fE:Flush(); fE:Close() LogInstance("Source fail "..GetReport(sS)) return end - local makP = GetBuilderNick("PIECES"); if(not makP) then + local makP = GetBuilderNick("PIECES"); if(not makP) then LogInstance("Missing table builder"); return end local defP = makP:GetDefinition(); if(not defP) then LogInstance("Missing table definition"); return end @@ -3998,16 +3982,13 @@ function ExportTypeAR(sType) end local qType = makP:Match(sType, 2, true) local qIndx = qsKey:format(sFunc, "PIECES") - local Q = CacheStmt(qIndx, nil, qType) + local Q = makP:Get(qIndx, qType); if(not IsHere(Q)) then + Q = makP:Select():Where({2,"%s"}):Order(1,4):Store(qIndx):Get(qIndx, qType) end if(not Q) then - local sStmt = makP:Select():Where({2,"%s"}):Order(1,4):Get() - if(not IsHere(sStmt)) then - LogInstance("Build statement failed "..GetReport(qIndx,qType)) - fE:Flush(); fE:Close(); fS:Close(); return - end; Q = CacheStmt(qIndx, sStmt, qType) - end -- Check whenever we have some data present. Quit when not found - qPieces = sqlQuery(Q); - if(not qPieces and isbool(qPieces)) then + LogInstance("Build statement failed "..GetReport(qIndx,qType)) + fE:Flush(); fE:Close(); fS:Close(); return + end + qPieces = sqlQuery(Q); if(not qPieces and isbool(qPieces)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)) fE:Flush(); fE:Close(); fS:Close(); return end From 6e677f14ad28f409434db18b150a9cbe27356785 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Mon, 26 Aug 2024 10:34:02 +0300 Subject: [PATCH 015/114] Fixed: Some runtime errors --- lua/autorun/trackassembly_init.lua | 8 ++++---- lua/trackassembly/trackasmlib.lua | 23 +++++++++++++---------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 763571c1..0977b657 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.775") +asmlib.SetOpVar("TOOL_VERSION","8.776") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1647,7 +1647,7 @@ propertiesAdd(gsOptionsCM, gtOptionsCM) ------------ INITIALIZE DB------------ -asmlib.CreateTable("PIECES",{ +asmlib.NewTable("PIECES",{ Timer = gaTimerSet[1], Index = {{1},{4},{1,4}}, Trigs = { @@ -1730,7 +1730,7 @@ asmlib.CreateTable("PIECES",{ [8] = {"CLASS" , "TEXT" , nil , nil } },true,true) -asmlib.CreateTable("ADDITIONS",{ +asmlib.NewTable("ADDITIONS",{ Timer = gaTimerSet[2], Index = {{1},{4},{1,4}}, Query = { @@ -1783,7 +1783,7 @@ asmlib.CreateTable("ADDITIONS",{ [12] = {"SETSOLID" , "INTEGER", "FLR", nil }, },true,true) -asmlib.CreateTable("PHYSPROPERTIES",{ +asmlib.NewTable("PHYSPROPERTIES",{ Timer = gaTimerSet[3], Index = {{1},{2},{1,2}}, Trigs = { diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 96a01b0d..3ee5c7c3 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1782,8 +1782,8 @@ function GetFrequentModels(iCnt) LogInstance("Missing table cache space"); return nil end local frUsed = GetOpVar("TABLE_FREQUENT_MODELS") local iInd, tmNow = 1, Time(); tableEmpty(frUsed); frUsed.Size = 0 - local coMo, coTy, = makTab:GetColumnName(1), makTab:GetColumnName(2) - local coNm, coSz, = makTab:GetColumnName(3), makTab:GetColumnName(4) + local coMo, coTy = makTab:GetColumnName(1), makTab:GetColumnName(2) + local coNm, coSz = makTab:GetColumnName(3), makTab:GetColumnName(4) for mod, rec in pairs(tCache) do if(IsHere(rec.Used) and IsHere(rec.Size) and rec.Size > 0) then local rmComp = (tmNow - rec.Used) @@ -2593,15 +2593,17 @@ function NewTable(sTable,defTab,bDelete,bReload) end -- Alias for reading the last created SQL statement function self:Get(vK, ...) - local qtCmd = self:GetCommand() - local iK = (vK or qtCmd.STMT) if(vK) then local tQ = GetOpVar("QUERY_STORE") local sQ = tQ[vK] -- Store entry if(not IsHere(sQ)) then return sQ end if(not sQ) then return sQ end return sQ:format(...) - end; return qtCmd[iK] + else + local qtCmd = self:GetCommand() + local iK = (vK or qtCmd.STMT) + return qtCmd[iK] + end end -- Returns ID of the found column valid > 0 function self:GetColumnID(sN) @@ -2936,7 +2938,7 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Arguments missing", tabDef.Nick); return self end local qtCmd = self:GetCommand(); if(not qtCmd.STMT) then LogInstance("Current missing "..GetReport(nA,...), tabDef.Nick); return self end - local sStmt = qtCmd[qtCmd.STMT]; if(not InHere(sStmt)) then + local sStmt = qtCmd[qtCmd.STMT]; if(not IsHere(sStmt)) then LogInstance("Statement missing "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self end if(not sStmt and isbool(sStmt)) then LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end @@ -3004,15 +3006,16 @@ function NewTable(sTable,defTab,bDelete,bReload) end -- Add values clause to the current statement function self:Values(...) - local qtCmd, nA = self:GetCommand(), select("#", ...) + local qtCmd = self:GetCommand() local qtDef = self:GetDefinition() - local sStmt = qtCmd[qtCmd.STMT]; + local sStmt = qtCmd[qtCmd.STMT] + local tA, nA = {...}, select("#", ...) if(not sStmt and isbool(sStmt)) then LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end if(not isstring(sStmt)) then LogInstance("Previous mismatch "..GetReport(nA,qtCmd.STMT,sStmt),tabDef.Nick); return self:Deny() end sStmt = sStmt:Trim("%s"):Trim(";").." VALUES ( " - for iCnt = 1, nA do sStmt = sStmt..tostring(nA[iCnt])..(iCnt ~= nA and ", " or " );") end + for iCnt = 1, nA do sStmt = sStmt..tostring(tA[iCnt])..(iCnt ~= nA and ", " or " );") end qtCmd[qtCmd.STMT] = sStmt; return self end -- Uses the given array to create a record in the table @@ -3860,7 +3863,7 @@ function SetAdditionsAR(sModel, makTab, qList) local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end if(not IsHere(sStmt)) then - LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return + LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return end qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return end if(not IsHere(qData) or IsEmpty(qData)) then From bf87072ee515e9ea365b3b3a30b044e026727dd3 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Mon, 26 Aug 2024 16:20:11 +0300 Subject: [PATCH 016/114] Fixed: Where clause failing with parameter missing Updated: Matching database mode check move up --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 17 ++++++++--------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 0977b657..b1437e43 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.776") +asmlib.SetOpVar("TOOL_VERSION","8.778") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 3ee5c7c3..4df57fd2 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2588,7 +2588,7 @@ function NewTable(sTable,defTab,bDelete,bReload) if(not IsHere(vK)) then return self end local mQ, tQ = qtCmd.STMT, GetOpVar("QUERY_STORE") local sQ = (sQ or (mQ and qtCmd[mQ]) or nil) - LogInstance("Store "..GetReport(vK, sQ), tabDef.Nick) + LogInstance("Entry "..GetReport(vK, sQ), tabDef.Nick) tQ[vK] = sQ; return self end -- Alias for reading the last created SQL statement @@ -2793,13 +2793,13 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Column ID mismatch "..GetReport(ivID),tabDef.Nick); return nil end local defCol = qtDef[nvID]; if(not IsHere(defCol)) then LogInstance("Invalid column "..GetReport(nvID),tabDef.Nick); return nil end - local sMoDB, snOut = GetOpVar("MODE_DATABASE") - local tyCol, opCol = tostring(defCol[2]), defCol[3] + local tyCol, opCol, snOut = tostring(defCol[2]), defCol[3] + local sMoDB = GetOpVar("MODE_DATABASE"); if(sMoDB ~= "SQL" and sMoDB == "LUA") then + LogInstance("Unsupported mode "..GetReport(sMoDB,ivID,tyCol,opCol),tabDef.Nick); return nil end if(tyCol == "TEXT") then snOut = tostring(snValue or "") if(not bNoNull and IsBlank(snOut)) then if (sMoDB == "SQL") then snOut = sNull - elseif(sMoDB == "LUA") then snOut = sNull - else LogInstance("Unsupported mode "..GetReport(sMoDB,ivID,tyCol),tabDef.Nick); return nil end + elseif(sMoDB == "LUA") then snOut = sNull end end if (opCol == "LOW") then snOut = snOut:lower() elseif(opCol == "CAP") then snOut = snOut:upper() end @@ -2810,8 +2810,7 @@ function NewTable(sTable,defTab,bDelete,bReload) sqChar = tostring(sQuote or ""):sub(1,1) else if (sMoDB == "SQL") then sqChar = "'" - elseif(sMoDB == "LUA") then sqChar = "\"" - else LogInstance("Unsupported mode "..GetReport(sMoDB,ivID,tyCol),tabDef.Nick); return nil end + elseif(sMoDB == "LUA") then sqChar = "\"" end end; snOut = sqChar..snOut..sqChar end elseif(tyCol == "REAL" or tyCol == "INTEGER") then @@ -2900,7 +2899,7 @@ function NewTable(sTable,defTab,bDelete,bReload) for iCnt = 1, nA do local vA = tA[iCnt] if(isnumber(vA)) then vA = {vA} end; if(not istable(vA)) then LogInstance("Argument not table "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end - tStmt[iCnt] = "CREATE "..(vA.Un and "UNIQUE " or " ")..qtCmd.STMT..(vA.Ne and " IF NOT EXISTS " or " ") + tStmt[iCnt] = "CREATE "..(vA.Un and "UNIQUE " or "")..qtCmd.STMT..(vA.Ne and " IF NOT EXISTS " or " ") .."IND_"..qtDef.Name.. "_"..tostring(iCnt).." ON "..qtDef.Name.." ( " local sV, nV = "", #vA for iInd = 1, nV do @@ -2949,7 +2948,7 @@ function NewTable(sTable,defTab,bDelete,bReload) for iCnt = 1, nA do local vA, sW = tA[iCnt], ((iCnt == 1) and " WHERE " or " AND "); if(not istable(vA)) then LogInstance("Argument not table "..GetReport(nA,iCnt), tabDef.Nick); return self:Deny() end - local wC, wV = vA[1], vA[2]; if(wC and wV) then + local wC, wV = vA[1], vA[2]; if(not (wC and wV)) then LogInstance("Parameters missing "..GetReport(nA,iCnt,wC,wV), tabDef.Nick); return self:Deny() end local tC = qtDef[wC]; if(not tC) then LogInstance("Column missing "..GetReport(nA,iCnt,wC,wV), tabDef.Nick); return self:Deny() end From 367a28e9ddfe50c229764e39929e7696d7f5306e Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Mon, 26 Aug 2024 16:34:36 +0300 Subject: [PATCH 017/114] Fixed: Reduce the select columns count for additions --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index b1437e43..c5ebcdad 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.778") +asmlib.SetOpVar("TOOL_VERSION","8.779") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4df57fd2..4a47984f 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3217,7 +3217,7 @@ function CacheQueryAdditions(sModel) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 local qIndx = qsKey:format(sFunc, "") local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then - Q = makTab:Select(2,3,4,5,6,7,8,9,10,11,12):Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end + Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then @@ -3225,9 +3225,9 @@ function CacheQueryAdditions(sModel) if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end stData.Slot, stData.Size = sModel, #qData - local coID = makTab:GetColumnName(4) + local coMo, coID = makTab:GetColumnName(1), makTab:GetColumnName(4) for iCnt = 1, stData.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[coID]) then + local qRec = qData[iCnt]; qRec[coMo] = nil; if(iCnt ~= qRec[coID]) then asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end stData[iCnt] = {}; for col, val in pairs(qRec) do stData[iCnt][col] = val end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData From 95e26719adc90fad97bb45aa4bd21d9b398b5c40 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 27 Aug 2024 18:51:53 +0300 Subject: [PATCH 018/114] Updated: Query store selection operator --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index c5ebcdad..0cac02c5 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.779") +asmlib.SetOpVar("TOOL_VERSION","8.780") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4a47984f..6ceef005 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2584,10 +2584,10 @@ function NewTable(sTable,defTab,bDelete,bReload) end -- Store built query in command list function self:Store(vK, sQ) - local qtCmd = self:GetCommand() if(not IsHere(vK)) then return self end + local qtCmd = self:GetCommand() -- Current query local mQ, tQ = qtCmd.STMT, GetOpVar("QUERY_STORE") - local sQ = (sQ or (mQ and qtCmd[mQ]) or nil) + local sQ = (sQ or (mQ and qtCmd[mQ] or nil)) LogInstance("Entry "..GetReport(vK, sQ), tabDef.Nick) tQ[vK] = sQ; return self end From 788b21ce589f7413304a3a9c26e42ed5d18c6f31 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 28 Aug 2024 14:12:45 +0300 Subject: [PATCH 019/114] Updated: Chose the unique index for all tables --- lua/autorun/trackassembly_init.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 0cac02c5..55204af8 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.780") +asmlib.SetOpVar("TOOL_VERSION","8.781") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1649,7 +1649,7 @@ propertiesAdd(gsOptionsCM, gtOptionsCM) asmlib.NewTable("PIECES",{ Timer = gaTimerSet[1], - Index = {{1},{4},{1,4}}, + Index = {{1},{4},{1,4,Un=true}}, Trigs = { Record = function(arLine, vSrc) local noMD = asmlib.GetOpVar("MISS_NOMD") @@ -1732,7 +1732,7 @@ asmlib.NewTable("PIECES",{ asmlib.NewTable("ADDITIONS",{ Timer = gaTimerSet[2], - Index = {{1},{4},{1,4}}, + Index = {{1},{4},{1,4,Un=true}}, Query = { Record = {"%s","%s","%s","%d","%s","%s","%d","%d","%d","%d","%d","%d"}, ExportDSV = {1,4} @@ -1785,7 +1785,7 @@ asmlib.NewTable("ADDITIONS",{ asmlib.NewTable("PHYSPROPERTIES",{ Timer = gaTimerSet[3], - Index = {{1},{2},{1,2}}, + Index = {{1},{2},{1,2,Un=true}}, Trigs = { Record = function(arLine, vSrc) local noTY = asmlib.GetOpVar("MISS_NOTP") From 943913c347334c0e387fa82fdfd657634143b2d3 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 30 Aug 2024 11:09:22 +0300 Subject: [PATCH 020/114] Fixed: Matching forcing errors in LUA mode Updated: Matching exit early when number is invalid Updated: Not exists in some cases by default --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 47 +++++++++++++++--------------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 55204af8..857662e5 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.781") +asmlib.SetOpVar("TOOL_VERSION","8.782") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 6ceef005..36dcd6e7 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2781,10 +2781,12 @@ function NewTable(sTable,defTab,bDelete,bReload) if(not IsHere(sD)) then return "" end local sD = tostring(sD or "\t"):sub(1,1); if(IsBlank(sD)) then LogInstance("Missing delimiter",tabDef.Nick); return "" end - local qtDef, sRes, iCnt = self:GetDefinition(), sD, 1 + local qtDef, sRes = self:GetDefinition(), sD for iCnt = 1, qtDef.Size do - sRes = (sRes..tostring(qtDef[iCnt][1] or "")..sD) - end; return sRes:sub(2, -2) + local sCon = ((iCnt ~= qtDef.Size) and sD or "") + local sVac = tostring(qtDef[iCnt][1] or "") + sRes = (sRes..sVac..sCon) + end; return sRes end -- Internal type matching function self:Match(snValue,ivID,bQuoted,sQuote,bNoRev,bNoNull) @@ -2794,7 +2796,7 @@ function NewTable(sTable,defTab,bDelete,bReload) local defCol = qtDef[nvID]; if(not IsHere(defCol)) then LogInstance("Invalid column "..GetReport(nvID),tabDef.Nick); return nil end local tyCol, opCol, snOut = tostring(defCol[2]), defCol[3] - local sMoDB = GetOpVar("MODE_DATABASE"); if(sMoDB ~= "SQL" and sMoDB == "LUA") then + local sMoDB = GetOpVar("MODE_DATABASE"); if(sMoDB ~= "SQL" and sMoDB ~= "LUA") then LogInstance("Unsupported mode "..GetReport(sMoDB,ivID,tyCol,opCol),tabDef.Nick); return nil end if(tyCol == "TEXT") then snOut = tostring(snValue or "") if(not bNoNull and IsBlank(snOut)) then @@ -2814,13 +2816,12 @@ function NewTable(sTable,defTab,bDelete,bReload) end; snOut = sqChar..snOut..sqChar end elseif(tyCol == "REAL" or tyCol == "INTEGER") then - snOut = tonumber(snValue) - if(IsHere(snOut)) then - if(tyCol == "INTEGER") then - if (opCol == "FLR") then snOut = mathFloor(snOut) - elseif(opCol == "CEL") then snOut = mathCeil (snOut) end - end - else LogInstance("Failed converting number"..GetReport(snValue, nvID),tabDef.Nick); return nil end + snOut = tonumber(snValue); if(not IsHere(snOut)) then + LogInstance("Failed converting number"..GetReport(snValue, nvID),tabDef.Nick); return nil end + if(tyCol == "INTEGER") then + if (opCol == "FLR") then snOut = mathFloor(snOut) + elseif(opCol == "CEL") then snOut = mathCeil (snOut) end + end else LogInstance("Invalid column type "..GetReport(tyCol),tabDef.Nick); return nil end; return snOut end @@ -2873,7 +2874,7 @@ function NewTable(sTable,defTab,bDelete,bReload) function self:Create() local qtDef = self:GetDefinition() local qtCmd = self:GetCommand(); qtCmd.STMT = "CREATE" - local sStmt = qtCmd.STMT.." TABLE "..qtDef.Name.." ( " + local sStmt = qtCmd.STMT.." TABLE IF NOT EXISTS "..qtDef.Name.." ( " for iCnt = 1, qtDef.Size do local tC = qtDef[iCnt]; if(not tC) then LogInstance("Column missing "..GetReport(nA,iCnt), tabDef.Nick); return self:Deny() end @@ -2899,9 +2900,9 @@ function NewTable(sTable,defTab,bDelete,bReload) for iCnt = 1, nA do local vA = tA[iCnt] if(isnumber(vA)) then vA = {vA} end; if(not istable(vA)) then LogInstance("Argument not table "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end - tStmt[iCnt] = "CREATE "..(vA.Un and "UNIQUE " or "")..qtCmd.STMT..(vA.Ne and " IF NOT EXISTS " or " ") - .."IND_"..qtDef.Name.. "_"..tostring(iCnt).." ON "..qtDef.Name.." ( " - local sV, nV = "", #vA + local sV, nV, bNe = "", #vA, (vA.Ne or not IsHere(vA.Ne)) + tStmt[iCnt] = "CREATE "..(vA.Un and "UNIQUE " or "")..qtCmd.STMT..(bNe and " IF NOT EXISTS " or " ") + .."IND_"..qtDef.Name.. "_"..tableConcat(vA).." ON "..qtDef.Name.." ( " for iInd = 1, nV do local iV = mathFloor(tonumber(vA[iInd]) or 0); if(iV == 0) then LogInstance("Index mismatch "..GetReport(nA,iCnt,iInd),tabDef.Nick); return self:Deny() end @@ -3075,8 +3076,8 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Build command failed"); return self:Remove(false) end -- When enabled forces a table drop if(bReload) then - if(sqlTableExists(defTab.Name)) then local qRez = sqlQuery(tQ.DROP) - if(not qRez and isbool(qRez)) then -- Remove table when SQL error is present + if(sqlTableExists(defTab.Name)) then -- Remove table when SQL error is present + local qRez = sqlQuery(tQ.DROP); if(not qRez and isbool(qRez)) then LogInstance("Table drop fail "..GetReport(sqlLastError(), tQ.DROP), tabDef.Nick) return self:Remove(false) -- Remove table when SQL error is present else LogInstance("Table drop success",tabDef.Nick) end @@ -3085,19 +3086,17 @@ function NewTable(sTable,defTab,bDelete,bReload) -- Create the table using the given name and properties if(sqlTableExists(defTab.Name)) then LogInstance("Table create skipped",tabDef.Nick) - else local qRez = sqlQuery(tQ.CREATE) - if(not qRez and isbool(qRez)) then -- Remove table when SQL error is present + else -- Remove table when SQL error is present + local qRez = sqlQuery(tQ.CREATE); if(not qRez and isbool(qRez)) then LogInstance("Table create fail "..GetReport(sqlLastError(), tQ.CREATE), tabDef.Nick) return self:Remove(false) -- Remove table when SQL error is present end -- Check when SQL query has passed and the table is not yet created if(sqlTableExists(defTab.Name)) then - for iQ = 1, tQ.INDEX.Size do - local qInx = tQ.INDEX[iQ] - local qRez = sqlQuery(qInx) - if(not qRez and isbool(qRez)) then -- Check when the index query has passed + for iQ = 1, tQ.INDEX.Size do local qInx = tQ.INDEX[iQ] + local qRez = sqlQuery(qInx); if(not qRez and isbool(qRez)) then LogInstance("Table create index fail "..GetReport(sqlLastError(), iQ, qInx), tabDef.Nick) return self:Remove(false) -- Clear table when index is not created - end + end -- Check when the index query has passed LogInstance("Table create index: "..v,tabDef.Nick) end else From 63dcf71f6675ab45ff5c1d79d556e65158830588 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 30 Aug 2024 11:54:51 +0300 Subject: [PATCH 021/114] Added: Timer definition as table support --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 25 ++++++++++++++++--------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 857662e5..2ffad032 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.782") +asmlib.SetOpVar("TOOL_VERSION","8.783") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 36dcd6e7..435de76a 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2643,13 +2643,20 @@ function NewTable(sTable,defTab,bDelete,bReload) -- Generates a timer settings table and keeps the defaults function self:TimerSetup(vTim) local qtCmd, qtDef = self:GetCommand(), self:GetDefinition() - local sTm = tostring((vTim and vTim or qtDef.Timer) or "") - local tTm = GetOpVar("OPSYM_REVISION"):Explode(sTm) - tTm[1] = tostring(tTm[1] or "CQT") -- Timer mode - tTm[2] = (tonumber(tTm[2]) or 0) -- Record life - tTm[3] = ((tonumber(tTm[3]) or 0) ~= 0) -- Kill command - tTm[4] = ((tonumber(tTm[4]) or 0) ~= 0) -- Collect garbage call - qtCmd.Timer = tTm; return self + local vTm, tTm = (vTim and vTim or qtDef.Timer), qtCmd.Timer + if(not tTm) then qtCmd.Timer = {}; tTm = qtCmd.Timer end + if(isstring(vTm)) then -- String or table passed + local cTm = GetOpVar("OPSYM_REVISION"):Explode(vTm) + tTm[1] = tostring(cTm[1] or "CQT") -- Timer mode + tTm[2] = (tonumber(cTm[2]) or 0) -- Record life + tTm[3] = ((tonumber(cTm[3]) or 0) ~= 0) -- Kill command + tTm[4] = ((tonumber(cTm[4]) or 0) ~= 0) -- Collect garbage call + elseif(istable(vTm)) then -- Transfer table data from definition + tTm[1] = tostring(vTm[1] or vTm["Mo"] or "CQT") -- Timer mode + tTm[2] = (tonumber(vTm[2] or vTm["Li"]) or 0) -- Record life + tTm[3] = ((tonumber(vTm[3] or vTm["Rm"]) or 0) ~= 0) -- Kill command + tTm[4] = ((tonumber(vTm[4] or vTm["Co"]) or 0) ~= 0) -- Collect garbage call + end; return self end -- Navigates the reference in the cache function self:GetNavigate(...) @@ -2896,13 +2903,13 @@ function NewTable(sTable,defTab,bDelete,bReload) local qtCmd = self:GetCommand(); qtCmd.STMT = "INDEX" local tStmt = qtCmd[qtCmd.STMT] if(not tStmt) then tStmt = {}; qtCmd[qtCmd.STMT] = tStmt end - tableEmpty(tStmt); tStmt.Size = nA + local sDiv = GetOpVar("OPSYM_DIVIDER"); tableEmpty(tStmt); tStmt.Size = nA for iCnt = 1, nA do local vA = tA[iCnt] if(isnumber(vA)) then vA = {vA} end; if(not istable(vA)) then LogInstance("Argument not table "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end local sV, nV, bNe = "", #vA, (vA.Ne or not IsHere(vA.Ne)) tStmt[iCnt] = "CREATE "..(vA.Un and "UNIQUE " or "")..qtCmd.STMT..(bNe and " IF NOT EXISTS " or " ") - .."IND_"..qtDef.Name.. "_"..tableConcat(vA).." ON "..qtDef.Name.." ( " + .."IND_"..qtDef.Name..sDiv..tableConcat(vA,sDiv).." ON "..qtDef.Name.." ( " for iInd = 1, nV do local iV = mathFloor(tonumber(vA[iInd]) or 0); if(iV == 0) then LogInstance("Index mismatch "..GetReport(nA,iCnt,iInd),tabDef.Nick); return self:Deny() end From 4aa84d879683fc640e43aca287e1f86b4580aa9c Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 30 Aug 2024 14:42:41 +0300 Subject: [PATCH 022/114] Fixed: `isstring` global being defined two times Added: Timer setup support for multiple types --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 2ffad032..5dd99847 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.783") +asmlib.SetOpVar("TOOL_VERSION","8.784") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 435de76a..a8ec1c7d 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -49,8 +49,9 @@ local isbool = isbool local istable = istable local isnumber = isnumber local isstring = isstring -local isstring = isstring local isvector = isvector +local isangle = isangle +local ismatrix = ismatrix local isfunction = isfunction local Vector = Vector local Matrix = Matrix @@ -2656,6 +2657,17 @@ function NewTable(sTable,defTab,bDelete,bReload) tTm[2] = (tonumber(vTm[2] or vTm["Li"]) or 0) -- Record life tTm[3] = ((tonumber(vTm[3] or vTm["Rm"]) or 0) ~= 0) -- Kill command tTm[4] = ((tonumber(vTm[4] or vTm["Co"]) or 0) ~= 0) -- Collect garbage call + elseif(isfunction(vTm)) then -- Transfer table data from definition + local bS, vO = pcall(vTm); if(not bS) then + LogInstance("Generator "..vO,tabDef.Nick); return self end + return self:TimerSetup(vO) -- Force function return value + elseif(isvector(vTm) or isangle(vTm) or ismatrix(vTm)) then + local cA, cB, cC = vTm:Unpack() + tTm[2] = (cA or 0) -- Record life + tTm[3] = ((cB or 0) ~= 0) -- Kill command + tTm[4] = ((cC or 0) ~= 0) -- Collect garbage call + else -- Transfer table data from definition + tTm[2] = (tonumber(vTm) or 0) -- Record life end; return self end -- Navigates the reference in the cache From 577bdd51ae38c541a7b6148678e549eaaa774418 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Wed, 11 Sep 2024 19:57:07 +0300 Subject: [PATCH 023/114] Added: Synchronization commit from the master branch --- .../{emd.bat => create_report.bat} | 19 +- .../tools/peaces_manager/models_ignored.txt | 4 + lua/autorun/trackassembly_init.lua | 189 +++++++++++++++++- lua/trackassembly/trackasmlib.lua | 82 +++++--- readme.md | 1 + 5 files changed, 265 insertions(+), 30 deletions(-) rename data/trackassembly/tools/peaces_manager/{emd.bat => create_report.bat} (93%) diff --git a/data/trackassembly/tools/peaces_manager/emd.bat b/data/trackassembly/tools/peaces_manager/create_report.bat similarity index 93% rename from data/trackassembly/tools/peaces_manager/emd.bat rename to data/trackassembly/tools/peaces_manager/create_report.bat index dd9a7670..75064077 100644 --- a/data/trackassembly/tools/peaces_manager/emd.bat +++ b/data/trackassembly/tools/peaces_manager/create_report.bat @@ -30,8 +30,8 @@ set emd_chew_dbase=%emd_chew_gmod%\garrysmod\data\trackassembly\exp\trackasmlib_ set emd_chew_skip=%emd_chew_repo%\data\trackassembly\tools\peaces_manager\models_ignored.txt :: How many addons are to be processed -set emd_chew_addfrm=1 -set emd_chew_addcnt=28 +set emd_chew_addfrm=30 +set emd_chew_addcnt=30 :: GMA addons to be processed set emd_chew_addlst[1]=740453553 @@ -62,6 +62,8 @@ set emd_chew_addlst[25]=331192490 set emd_chew_addlst[26]=1888013789 set emd_chew_addlst[27]=1955876643 set emd_chew_addlst[28]=3071058065 +set emd_chew_addlst[29]=3297918081 +set emd_chew_addlst[30]=3314861708 :: Folder list for extraction and the directories they will be extracted set emd_chew_adddir[1]=AlexCookie's 2ft track pack @@ -84,14 +86,17 @@ set emd_chew_adddir[17]=Ron's G Scale Track pack set emd_chew_adddir[18]=Ron's Minitrain Props set emd_chew_adddir[19]=SProps set emd_chew_adddir[20]=Shinji85's Rails -set emd_chew_adddir[21]=SligWolf's Minihover$SligWolf's White Rails -set emd_chew_adddir[22]=SligWolf's Minitrains -set emd_chew_adddir[23]=SligWolf's Railcar -set emd_chew_adddir[24]=SligWolf's Rerailers +set emd_chew_adddir[21]=SligWolf's Modelpack +set emd_chew_adddir[22]=SligWolf's Mini Trains +set emd_chew_adddir[23]=SligWolf's Bodygroup Car +set emd_chew_adddir[24]=SligWolf's Rerailer set emd_chew_adddir[25]=StevenTechno's Buildings 1.0 set emd_chew_adddir[26]=StevenTechno's Buildings 2.0 set emd_chew_adddir[27]=Trackmania United Props set emd_chew_adddir[28]=RockMan's Fortification +set emd_chew_adddir[29]=SligWolf's Suspension Train +set emd_chew_adddir[30]=Modular City Street + :: Show the current folder echo Running in: %emd_chew_pathb% @@ -144,6 +149,7 @@ for /L %%k in (%emd_chew_addfrm%,1,%emd_chew_addcnt%) do ( set emd_chew_fgma=!emd_chew_fgma!!emd_chew_fdid!* set emd_chew_fgma=!emd_chew_fgma!.!emd_chew_adext! set "emd_chew_fdnm=!emd_chew_adddir[%%k]!" + echo Game content: !emd_chew_fgma! for %%i in (!emd_chew_fgma!) do ( set /A emd_chew_match=1 :: Extract the GMA in the current folder @@ -162,6 +168,7 @@ for /L %%k in (%emd_chew_addfrm%,1,%emd_chew_addcnt%) do ( set emd_chew_fgma=!emd_chew_wshop!\ set emd_chew_fgma=!emd_chew_fgma!!emd_chew_fdid!\ set emd_chew_fgma=!emd_chew_fgma!*.!emd_chew_adext! + echo Workshop content: !emd_chew_fgma! for %%i in (!emd_chew_fgma!) do ( set /A emd_chew_match=1 :: Extract the GMA in the current folder diff --git a/data/trackassembly/tools/peaces_manager/models_ignored.txt b/data/trackassembly/tools/peaces_manager/models_ignored.txt index a6c6e873..cd4f130a 100644 --- a/data/trackassembly/tools/peaces_manager/models_ignored.txt +++ b/data/trackassembly/tools/peaces_manager/models_ignored.txt @@ -5661,3 +5661,7 @@ models/props_canal/canal_bridge04.mdl models/props_canal/canal_bridge_railing01.mdl models/props_canal/canal_bridge_railing02.mdl models/props_canal/canal_bridge_railing_lamps.mdl + +# Modular City Street +models/propper/dingles_modular_streets/street_propper_reference_texture_block.mdl +models/propper/dingles_modular_streets/street_propper_reference_texture_block2.mdl diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 5dd99847..b21bba17 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.784") +asmlib.SetOpVar("TOOL_VERSION","8.785") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -506,6 +506,7 @@ if(CLIENT) then asmlib.ToIcon("bnderrmod_hint" , "shape_square_go" ) asmlib.ToIcon("bnderrmod_generic", "shape_square_link" ) asmlib.ToIcon("bnderrmod_error" , "shape_square_error") + -- Workshop matching crap asmlib.WorkshopID("SligWolf's Rerailer" , "132843280") asmlib.WorkshopID("SligWolf's Mini Trains" , "149759773") @@ -521,10 +522,13 @@ if(CLIENT) then asmlib.WorkshopID("Ron's Minitrain Props" , "728833183") asmlib.WorkshopID("SligWolf's Modelpack" , "147812851") asmlib.WorkshopID("Battleship's abandoned rails", "807162936") + asmlib.WorkshopID("Ron's 2ft track pack" , "634000136") + asmlib.WorkshopID("Ron's G Scale Track pack" , "865735701") asmlib.WorkshopID("AlexCookie's 2ft track pack" , "740453553") asmlib.WorkshopID("CAP Walkway" , "180210973") asmlib.WorkshopID("SligWolf's Tiny Hover Racer" , "1375275167") asmlib.WorkshopID("Joe's track pack" , "1658816805") + asmlib.WorkshopID("Plarail" , "1512053748") asmlib.WorkshopID("StevenTechno's Buildings 2.0", "1888013789") asmlib.WorkshopID("Modular Canals" , "1336622735") asmlib.WorkshopID("Trackmania United Props" , "1955876643") @@ -532,6 +536,7 @@ if(CLIENT) then asmlib.WorkshopID("Modular Sewer" , "2340192251") asmlib.WorkshopID("RockMan's Fortification" , "3071058065") asmlib.WorkshopID("SligWolf's Suspension Train" , "3297918081") + asmlib.WorkshopID("Modular City Street" , "3314861708") asmlib.SetAction("CLEAR_GHOSTS" , function() asmlib.ClearGhosts() end) asmlib.SetAction("CTXMENU_OPEN" , function() asmlib.IsFlag("tg_context_menu", true ) end) @@ -4356,6 +4361,188 @@ else PIECES:Record({"models/sligwolf/rerailer/rerailer_2.mdl", "#", "Double Middle", 2, "-1882.106, 0, 3.031", "-2367.072, 0, -5.412", "0,-180,0"}) PIECES:Record({"models/sligwolf/rerailer/rerailer_3.mdl", "#", "Double Long", 1, "-258.249, -0.01, -0.002", "219.415, 0, -5.409"}) PIECES:Record({"models/sligwolf/rerailer/rerailer_3.mdl", "#", "Double Long", 2, "-3124.199, -0.01, 2.997", "-3601.869, -0.377, -5.416", "0,-180,0"}) + asmlib.Categorize("Modular City Street", {"@highway", "@street" , "endcap", "turn", "ramp", + "connector", "tjunction", "intersection", "elevated"}, "models/propper/dingles_modular_streets/") + PIECES:Record({"models/propper/dingles_modular_streets/street64x512.mdl", "#", "#", 1, "", "0,-32,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street64x512.mdl", "#", "#", 2, "", "0, 32,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street64x768.mdl", "#", "#", 1, "", "0,-32,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street64x768.mdl", "#", "#", 2, "", "0, 32,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street128x512.mdl", "#", "#", 1, "", "0,-64,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street128x512.mdl", "#", "#", 2, "", "0, 64,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street128x768.mdl", "#", "#", 1, "", "0,-64,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street128x768.mdl", "#", "#", 2, "", "0, 64,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street128x512_crosswalk.mdl", "#", "#", 1, "", "0,-64,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street128x512_crosswalk.mdl", "#", "#", 2, "", "0, 64,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street128x768_crosswalk.mdl", "#", "#", 1, "", "0,-64,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street128x768_crosswalk.mdl", "#", "#", 2, "", "0, 64,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street256x512.mdl", "#", "#", 1, "", "0,-128,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street256x512.mdl", "#", "#", 2, "", "0, 128,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street256x768.mdl", "#", "#", 1, "", "0,-128,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street256x768.mdl", "#", "#", 2, "", "0, 128,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512.mdl", "#", "#", 1, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512.mdl", "#", "#", 2, "", "0, 256,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768.mdl", "#", "#", 1, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768.mdl", "#", "#", 2, "", "0, 256,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768x512.mdl", "#", "#", 1, "", "0,-384,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768x512.mdl", "#", "#", 2, "", "0, 384,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768x768.mdl", "#", "#", 1, "", "0,-384,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768x768.mdl", "#", "#", 2, "", "0, 384,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512.mdl", "#", "#", 1, "", "0,-512,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512.mdl", "#", "#", 2, "", "0, 512,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768.mdl", "#", "#", 1, "", "0,-512,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768.mdl", "#", "#", 2, "", "0, 512,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street2048x512.mdl", "#", "#", 1, "", "0,-1024,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street2048x512.mdl", "#", "#", 2, "", "0, 1024,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street2048x768.mdl", "#", "#", 1, "", "0,-1024,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street2048x768.mdl", "#", "#", 2, "", "0, 1024,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512_endcap_fancy1.mdl", "#", "#", 1, "", "0,-128,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512_endcap_fancy2.mdl", "#", "#", 1, "", "0,-128,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512_endcap_simple1.mdl", "#", "#", 1, "", "0,-64,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512_endcap_simple2.mdl", "#", "#", 1, "", "0,-64,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768_endcap_fancy1.mdl", "#", "#", 1, "", "0,-192,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768_endcap_fancy2.mdl", "#", "#", 1, "", "0,-192,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768_endcap_simple1.mdl", "#", "#", 1, "", "0,-64,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768_endcap_simple2.mdl", "#", "#", 1, "", "0,-64,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector1.mdl", "#", "#", 1, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector1.mdl", "#", "#", 2, "", "0, 256,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector2.mdl", "#", "#", 1, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector2.mdl", "#", "#", 2, "", "0, 256,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector1.mdl", "#", "#", 1, "", "0,-384,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector1.mdl", "#", "#", 2, "", "0, 384,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector2.mdl", "#", "#", 1, "", "0,-384,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector2.mdl", "#", "#", 2, "", "0, 384,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_512_to_768_connector1.mdl", "#", "#", 1, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_512_to_768_connector1.mdl", "#", "#", 2, "", "384, 0, 0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_512_to_768_connector1.mdl", "#", "#", 3, "", "0, 256,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_512_to_768_connector2.mdl", "#", "#", 1, "", "0, 256,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_512_to_768_connector2.mdl", "#", "#", 2, "", "-384,0,0", "0,180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_512_to_768_connector2.mdl", "#", "#", 3, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_512_to_768_connector2.mdl", "#", "#", 4, "", "384,0,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_tjunction512x512.mdl", "#", "#", 1, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_tjunction512x512.mdl", "#", "#", 2, "", "256, 0, 0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_tjunction512x512.mdl", "#", "#", 3, "", "-256, 0, 0", "0,180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_tjunction768x768.mdl", "#", "#", 1, "", "0,-384,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_tjunction768x768.mdl", "#", "#", 2, "", "384, 0, 0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_tjunction768x768.mdl", "#", "#", 3, "", "-384,0,0", "0,180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_turn512x512.mdl", "#", "#", 1, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_turn512x512.mdl", "#", "#", 2, "", "256, 0, 0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_turn768x768.mdl", "#", "#", 1, "", "0,-384,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_turn768x768.mdl", "#", "#", 2, "", "384, 0, 0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_4wayintersection512x512.mdl", "#", "#", 1, "", "0, 256,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_4wayintersection512x512.mdl", "#", "#", 2, "", "-256,0,0", "0,180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_4wayintersection512x512.mdl", "#", "#", 3, "", "0,-256,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_4wayintersection512x512.mdl", "#", "#", 4, "", "256,0,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_4wayintersection768x768.mdl", "#", "#", 1, "", "0, 384,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_4wayintersection768x768.mdl", "#", "#", 2, "", "-384,0,0", "0,180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_4wayintersection768x768.mdl", "#", "#", 3, "", "0,-384,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street_4wayintersection768x768.mdl", "#", "#", 4, "", "384,0,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768_fork.mdl", "#", "#", 1, "", "0,-655,0", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768_fork.mdl", "#", "#", 2, "", " 994,655,-0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street768_fork.mdl", "#", "#", 3, "", "-994,655,0", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_elevated64high.mdl", "#", "#", 1, "", "0,256,24", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_elevated64high.mdl", "#", "#", 2, "", "0,-256,-24", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_elevated128high.mdl", "#", "#", 1, "", "0,256,56", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_elevated128high.mdl", "#", "#", 2, "", "0,-256,-56", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_elevated192high.mdl", "#", "#", 1, "", "0,256,88", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_elevated192high.mdl", "#", "#", 2, "", "0,-256,-88", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_elevated256high.mdl", "#", "#", 1, "", "0,256,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x512_elevated256high.mdl", "#", "#", 2, "", "0,-256,-120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768_elevated64high.mdl", "#", "#", 1, "", "0,256,24", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768_elevated64high.mdl", "#", "#", 2, "", "0,-256,-24", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768_elevated128high.mdl", "#", "#", 1, "", "0,256,56", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768_elevated128high.mdl", "#", "#", 2, "", "0,-256,-56", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768_elevated192high.mdl", "#", "#", 1, "", "0,256,88", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768_elevated192high.mdl", "#", "#", 2, "", "0,-256,-88", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768_elevated256high.mdl", "#", "#", 1, "", "0,256,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street512x768_elevated256high.mdl", "#", "#", 2, "", "0,-256,-120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512_elevated64high.mdl", "#", "#", 1, "", "0,512,24", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512_elevated64high.mdl", "#", "#", 2, "", "0,-512,-24", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512_elevated128high.mdl", "#", "#", 1, "", "0,512,56", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512_elevated128high.mdl", "#", "#", 2, "", "0,-512,-56", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512_elevated192high.mdl", "#", "#", 1, "", "0,512,88", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512_elevated192high.mdl", "#", "#", 2, "", "0,-512,-88", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512_elevated256high.mdl", "#", "#", 1, "", "0,512,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x512_elevated256high.mdl", "#", "#", 2, "", "0,-512,-120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768_elevated64high.mdl", "#", "#", 1, "", "0,512,24", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768_elevated64high.mdl", "#", "#", 2, "", "0,-512,-24", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768_elevated128high.mdl", "#", "#", 1, "", "0,512,56", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768_elevated128high.mdl", "#", "#", 2, "", "0,-512,-56", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768_elevated192high.mdl", "#", "#", 1, "", "0,512,88", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768_elevated192high.mdl", "#", "#", 2, "", "0,-512,-88", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768_elevated256high.mdl", "#", "#", 1, "", "0,512,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/street1024x768_elevated256high.mdl", "#", "#", 2, "", "0,-512,-120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_ramp_street768_short_tall_connector.mdl", "#", "#", 1, "", " 512,0,-8"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_ramp_street768_short_tall_connector.mdl", "#", "#", 2, "", "-512,0,248", "0,180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_ramp_street1024x768.mdl", "#", "#", 1, "", "0, 512, 120", "0, 90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_ramp_street1024x768.mdl", "#", "#", 2, "", "0,-512,-120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_ramp_street2048x768_tall.mdl", "#", "#", 1, "", "0, 1024, 248", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_ramp_street2048x768_tall.mdl", "#", "#", 2, "", "0,-1024,-248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street256x768.mdl", "#", "#", 1, "", "0,64,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street256x768.mdl", "#", "#", 2, "", "0,-64,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street256x768_tall.mdl", "#", "#", 1, "", "0,64,248", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street256x768_tall.mdl", "#", "#", 2, "", "0,-64,248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street256x768_overpass.mdl", "#", "#", 1, "", "0,64,40", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street256x768_overpass.mdl", "#", "#", 2, "", "0,-64,40", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street512x768.mdl", "#", "#", 1, "", "0,256,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street512x768.mdl", "#", "#", 2, "", "0,-256,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street512x768_tall.mdl", "#", "#", 1, "", "0,256,248", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street512x768_tall.mdl", "#", "#", 2, "", "0,-256,248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street512x768_overpass.mdl", "#", "#", 1, "", "0,256,40", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street512x768_overpass.mdl", "#", "#", 2, "", "0,-256,40", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street768x768.mdl", "#", "#", 1, "", "0,384,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street768x768.mdl", "#", "#", 2, "", "0,-384,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street768x768_tall.mdl", "#", "#", 1, "", "0,384,248", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street768x768_tall.mdl", "#", "#", 2, "", "0,-384,248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street768x768_overpass.mdl", "#", "#", 1, "", "0,384,40", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street768x768_overpass.mdl", "#", "#", 2, "", "0,-384,40", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street1024x768.mdl", "#", "#", 1, "", "0,512,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street1024x768.mdl", "#", "#", 2, "", "0,-512,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street1024x768_tall.mdl", "#", "#", 1, "", "0,512,248", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street1024x768_tall.mdl", "#", "#", 2, "", "0,-512,248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street1024x768_overpass.mdl", "#", "#", 1, "", "0,512,40", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street1024x768_overpass.mdl", "#", "#", 2, "", "0,-512,40", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street2048x768.mdl", "#", "#", 1, "", "0,1024,120", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street2048x768.mdl", "#", "#", 2, "", "0,-1024,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street2048x768_tall.mdl", "#", "#", 1, "", "0,1024,248", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street2048x768_tall.mdl", "#", "#", 2, "", "0,-1024,248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street2048x768_overpass.mdl", "#", "#", 1, "", "0,1024,40", "0,90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street2048x768_overpass.mdl", "#", "#", 2, "", "0,-1024,40", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector.mdl", "#", "#", 1, "", " 384,-384,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector.mdl", "#", "#", 2, "", "-384, 384,120", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector.mdl", "#", "#", 3, "", "-384,-384,120", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_tall.mdl", "#", "#", 1, "", " 384,-384,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_tall.mdl", "#", "#", 2, "", "-384, 384,248", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_tall.mdl", "#", "#", 3, "", "-384,-384,248", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored.mdl", "#", "#", 1, "", " 384,-384,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored.mdl", "#", "#", 2, "", " 384, 384,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored.mdl", "#", "#", 3, "", "-384,-384,120", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored_tall.mdl", "#", "#", 1, "", " 384,-384,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored_tall.mdl", "#", "#", 2, "", " 384, 384,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored_tall.mdl", "#", "#", 3, "", "-384,-384,248", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_double.mdl", "#", "#", 1, "", " 384,-384,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_double.mdl", "#", "#", 2, "", " 384, 384,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_double.mdl", "#", "#", 3, "", "-384, 384,120", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_double.mdl", "#", "#", 4, "", "-384,-384,120", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_double_tall.mdl", "#", "#", 1, "", " 384,-384,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_double_tall.mdl", "#", "#", 2, "", " 384, 384,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_double_tall.mdl", "#", "#", 3, "", "-384, 384,248", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768rampconnector_double_tall.mdl", "#", "#", 4, "", "-384,-384,248", "0,-180,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_256turn.mdl", "#", "#", 1, "", "256,128,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_256turn.mdl", "#", "#", 2, "", "-128,-256,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_256turn_tall.mdl", "#", "#", 1, "", "256,128,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_256turn_tall.mdl", "#", "#", 2, "", "-128,-256,248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_512turn.mdl", "#", "#", 1, "", "512,256,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_512turn.mdl", "#", "#", 2, "", "-256,-512,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_512turn_tall.mdl", "#", "#", 1, "", "512,256,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_512turn_tall.mdl", "#", "#", 2, "", "-256,-512,248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768turn.mdl", "#", "#", 1, "", "768,384,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768turn.mdl", "#", "#", 2, "", "-384,-768,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768turn_tall.mdl", "#", "#", 1, "", "768,384,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_768turn_tall.mdl", "#", "#", 2, "", "-384,-768,248", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn.mdl", "#", "#", 1, "", "1024,512,120"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn.mdl", "#", "#", 2, "", "-512,-1024,120", "0,-90,0"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn_tall.mdl", "#", "#", 1, "", "1024,512,248"}) + PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn_tall.mdl", "#", "#", 2, "", "-512,-1024,248", "0,-90,0"}) if(gsMoDB == "SQL") then sqlCommit() end end diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index a8ec1c7d..de8ac87b 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1592,7 +1592,7 @@ function NewPOA(vA, vB, vC) end -- Decode the transformation when is not null or empty string else -- When the value is empty use zero otherwise process the value self:Import(sB, sM, ...) -- Try to process the value when present - LogInstance("Missing "..GetReport(sB, sM)) -- No Attachment call + LogInstance("Regular "..GetReport(sB, sM)) -- No Attachment call end -- Try to decode the entry when present end; return self end; if(vA or vB or vC) then self:Set(vA, vB, vC) end @@ -2332,7 +2332,7 @@ function ModelToNameRule(sRule, gCut, gSub, gApp) else LogInstance("Wrong mode: "..sRule); return false end end -function Categorize(oTyp, fCat) +function Categorize(oTyp, fCat, ...) local tCat = GetOpVar("TABLE_CATEGORIES") if(not IsHere(oTyp)) then local sTyp = tostring(GetOpVar("DEFAULT_TYPE") or "") @@ -2343,14 +2343,56 @@ function Categorize(oTyp, fCat) local sTyp = tostring(GetOpVar("DEFAULT_TYPE") or "") local fsLog = GetOpVar("FORM_LOGSOURCE") -- The actual format value local ssLog = "*"..fsLog:format("TYPE","Categorize",tostring(oTyp)) - if(isstring(fCat)) then tCat[sTyp] = {} - tCat[sTyp].Txt = fCat; tTyp = (tCat and tCat[sTyp] or nil) - tCat[sTyp].Cmp = CompileString("return ("..fCat..")", sTyp) - local bS, vO = pcall(tCat[sTyp].Cmp); if(not bS) then - LogInstance("Failed "..GetReport(fCat)..": "..vO, ssLog); return nil end - tCat[sTyp].Cmp = vO; tTyp = tCat[sTyp] - return sTyp, (tTyp and tTyp.Txt), (tTyp and tTyp.Cmp) - else LogInstance("Skip "..GetReport(fCat), ssLog) end + if(isstring(fCat)) then + tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp; tTyp.Txt = fCat + elseif(istable(fCat)) then local tArg = {...} + local sTr = GetOpVar("OPSYM_REVISION") -- Trigger + local sSe = GetOpVar("OPSYM_DIRECTORY") -- Separator + tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp + tTyp.Txt = [[function(m) + local o = {} + function setBranch(v, p, b, q) + if(v:find(p)) then + local e = v:gsub("%W*"..p.."%W*", "_") + if(b and o.M) then return e end + if(b and not o.M) then o.M = true end + table.insert(o, (q or p)); return e + end; return v + end]] + tTyp.Txt = tTyp.Txt.."\nlocal r = m:gsub(\""..tostring(tArg[1] or "").."\",\"\"):gsub(\"%.mdl$\",\"\");" + for iD = 1, #fCat do + local tV = sSe:Explode(fCat[iD]) + local sR = tostring(tV[2] and ("\""..tostring(tV[2]).."\"") or nil) + if(tV[1]:sub(1,1) == sTr) then tV[1] = tV[1]:sub(2,-1) + tTyp.Txt = tTyp.Txt.."\nr = setBranch(r, \""..tostring(tV[1]).."\", true, "..sR..")" + else + tTyp.Txt = tTyp.Txt.."\nr = setBranch(r, \""..tostring(tV[1]).."\", false, "..sR..")" + end + end + tTyp.Txt = tTyp.Txt.."\no.M = nil; return o, r:gsub(\"^_+\", \"\"):gsub(\"_+$\", \"\"):gsub(\"_+\", \"_\") end" + elseif(isnumber(fCat)) then local tArg = {...} + tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp + tTyp.Txt = "function(m)" + tTyp.Txt = tTyp.Txt.."\nlocal n = math.floor(tonumber("..fCat..") or 0)" + tTyp.Txt = tTyp.Txt.."\nlocal m = m:gsub(\""..tostring(tArg[1] or "").."\", \"\")\n" + for i = 2, #tArg do local aP, aN = tArg[i], tArg[i+1] + if(aP and aN) then tTyp.Txt = tTyp.Txt.."\nlocal m = m:gsub(\""..aP.."\", \""..aN.."\")\n" end end + tTyp.Txt = tTyp.Txt..[[local t, x = {n = 0}, m:find("/", 1, true) + while(x and x > 0) do + t.n = t.n + 1; t[t.n] = m:sub(1, x-1) + m = m:sub(x+1, -1); x = m:find("/", 1, true) + end; m = m:gsub("%.mdl$","") + if(n == 0) then return t, m end; local a = math.abs(n) + if(a > t.n) then return t, m end; local s = #t-a + if(n < 0) then for i = 1, a do t[i] = t[i+s] end end + while(s > 0) do table.remove(t); s = s - 1 end + return t, m + end]] + else LogInstance("Skip "..GetReport(fCat), ssLog); return nil end + tTyp.Cmp = CompileString("return ("..tTyp.Txt..")", sTyp) + local bS, vO = pcall(tTyp.Cmp); if(not bS) then + LogInstance("Failed "..GetReport(fCat)..": "..vO, ssLog); return nil end + tTyp.Cmp = vO; return sTyp, tTyp.Txt, tTyp.Cmp end end @@ -4562,24 +4604,19 @@ function AttachAdditions(ePiece) local sCass = GetEmpty(arRec[coEN], nil, dCass) local eBonus = entsCreate(sCass); LogInstance("ents.Create("..sCass..")") if(eBonus and eBonus:IsValid()) then - local sMoa = tostring(arRec[coMA]) - if(not IsModel(sMoa, true)) then + local sMoa = tostring(arRec[coMA]); if(not IsModel(sMoa, true)) then LogInstance("Invalid attachment "..GetReport(iCnt, sMoc, sMoa)); return false end eBonus:SetModel(sMoa) LogInstance("ENT:SetModel("..sMoa..")") local sPos = arRec[coPO]; if(not isstring(sPos)) then LogInstance("Position mismatch "..GetReport(iCnt, sMoc, sPos)); return false end - if(not GetEmpty(sPos)) then - oPOA:Decode(sPos, eBonus, "Pos") - vPos:SetUnpacked(oPOA:Get()) - vPos:Set(ePiece:LocalToWorld(vPos)) + if(not GetEmpty(sPos)) then oPOA:Decode(sPos, eBonus, "Pos") + local vPos = oPOA:Vector(); vPos:Set(ePiece:LocalToWorld(vPos)) eBonus:SetPos(vPos); LogInstance("ENT:SetPos(DB)") else eBonus:SetPos(ePos); LogInstance("ENT:SetPos(PIECE:POS)") end local sAng = arRec[coAN]; if(not isstring(sAng)) then LogInstance("Angle mismatch "..GetReport(iCnt, sMoc, sAng)); return false end - if(not GetEmpty(sAng)) then - oPOA:Decode(sAng, eBonus, "Ang") - aAng:SetUnpacked(oPOA:Get()) - aAng:Set(ePiece:LocalToWorldAngles(aAng)) + if(not GetEmpty(sAng)) then oPOA:Decode(sAng, eBonus, "Ang") + local aAng = oPOA:Angle(); aAng:Set(ePiece:LocalToWorldAngles(aAng)) eBonus:SetAngles(aAng); LogInstance("ENT:SetAngles(DB)") else eBonus:SetAngles(eAng); LogInstance("ENT:SetAngles(PIECE:ANG)") end local nMo = (tonumber(arRec[coMO]) or -1) @@ -4607,8 +4644,7 @@ function AttachAdditions(ePiece) if(nSo >= 0) then eBonus:SetSolid(nSo) LogInstance("ENT:SetSolid("..tostring(nSo)..")") end else - local mA = stData[iCnt][coMA] - local mC = stData[iCnt][coEN] + local mA, mC = arRec[coMA], arRec[coEN] LogInstance("Entity invalid "..GetReport(iCnt, sMoc, mA, mC)); return false end end; LogInstance("Success"); return true @@ -4673,7 +4709,7 @@ function AttachBodyGroups(ePiece,sBgID) while(tBG[iCnt] and IDs[iCnt]) do local vBG = tBG[iCnt] local maxID = (ePiece:GetBodygroupCount(vBG.id) - 1) local curID = mathClamp(mathFloor(tonumber(IDs[iCnt]) or 0), 0, maxID) - LogInstance("SetBodygroup "..GetReport(iCnt, maxID, vBG.id, curID)) + LogInstance("SetBodygroup "..GetReport(iCnt, vBG.id, maxID, curID)) ePiece:SetBodygroup(vBG.id, curID); iCnt = iCnt + 1 end; LogInstance("Success "..GetReport(sBgID)); return true end diff --git a/readme.md b/readme.md index e3bf08d9..2eba778f 100644 --- a/readme.md +++ b/readme.md @@ -395,6 +395,7 @@ anymore to maintain cetain track packs leading in **NO SUPPORT**, which is also * Portal 2 High Walkway **(MOUNT)** * [RockMan's Fortification](https://steamcommunity.com/sharedfiles/filedetails/?id=3071058065) * [SligWolf's Suspension train](https://steamcommunity.com/sharedfiles/filedetails/?id=3297918081) [**(AUTHOR)**][ref-maintained] + * [Modular City Street](https://steamcommunity.com/sharedfiles/filedetails/?id=3314861708) #### Where are the trains/vehicles[,][ref-easter] are there any of these? Dude seriously, make them yourself, what's the point of playing Gmod then ... xD From 13c09bff786eb4e1eb4e4cfbb19a61cc7da8370d Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 12 Sep 2024 15:23:18 +0300 Subject: [PATCH 024/114] Improved: Reduce memory for indices (1) is the same as (1,2) unique Improved: Make sure to catch bad table column configuration on create --- lua/autorun/trackassembly_init.lua | 8 ++++---- lua/trackassembly/trackasmlib.lua | 6 +++++- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index b21bba17..b09d94d5 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.785") +asmlib.SetOpVar("TOOL_VERSION","8.786") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1654,7 +1654,7 @@ propertiesAdd(gsOptionsCM, gtOptionsCM) asmlib.NewTable("PIECES",{ Timer = gaTimerSet[1], - Index = {{1},{4},{1,4,Un=true}}, + Index = {{1,4,Un=true}, {4}}, Trigs = { Record = function(arLine, vSrc) local noMD = asmlib.GetOpVar("MISS_NOMD") @@ -1737,7 +1737,7 @@ asmlib.NewTable("PIECES",{ asmlib.NewTable("ADDITIONS",{ Timer = gaTimerSet[2], - Index = {{1},{4},{1,4,Un=true}}, + Index = {{1,4,Un=true}, {4}}, Query = { Record = {"%s","%s","%s","%d","%s","%s","%d","%d","%d","%d","%d","%d"}, ExportDSV = {1,4} @@ -1790,7 +1790,7 @@ asmlib.NewTable("ADDITIONS",{ asmlib.NewTable("PHYSPROPERTIES",{ Timer = gaTimerSet[3], - Index = {{1},{2},{1,2,Un=true}}, + Index = {{1,2,Un=true}, {2}}, Trigs = { Record = function(arLine, vSrc) local noTY = asmlib.GetOpVar("MISS_NOTP") diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index de8ac87b..adc5f619 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3061,7 +3061,11 @@ function NewTable(sTable,defTab,bDelete,bReload) end else nA = qtDef.Size -- When called with no arguments is the same as picking all columns for iCnt = 1, nA do - sStmt = sStmt..qtDef[iCnt][1]..(iCnt ~= nA and ", " or " )") + local tC = qtDef[iCnt]; if(not tC) then + LogInstance("Column missing "..GetReport(nA,iCnt), tabDef.Nick); return self:Deny() end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column mismatch "..GetReport(nA,iCnt),tabDef.Nick); return self:Deny() end + sStmt = sStmt..sC..(iCnt ~= nA and ", " or " )") end end; qtCmd[qtCmd.STMT] = sStmt; return self end From 73c0c9fb07fbf948aa4bd83699019e0d5c84d7be Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 13 Sep 2024 11:23:12 +0300 Subject: [PATCH 025/114] Fixed: Direct value injection in `tA = {}` Updated: Code rearrangement and var localization --- lua/trackassembly/trackasmlib.lua | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index adc5f619..3276ceb3 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3005,8 +3005,7 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end if(not isstring(sStmt)) then LogInstance("Previous mismatch "..GetReport(nA,qtCmd.STMT,sStmt),tabDef.Nick); return self:Deny() end - local qtDef = self:GetDefinition() - local tA = {...}; sStmt = sStmt:Trim("%s"):Trim(";") + local tA, qtDef = {...}, self:GetDefinition(); sStmt = sStmt:Trim("%s"):Trim(";") for iCnt = 1, nA do local vA, sW = tA[iCnt], ((iCnt == 1) and " WHERE " or " AND "); if(not istable(vA)) then LogInstance("Argument not table "..GetReport(nA,iCnt), tabDef.Nick); return self:Deny() end @@ -3031,12 +3030,11 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end if(not isstring(sStmt)) then LogInstance("Previous mismatch "..GetReport(nA,qtCmd.STMT,sStmt),tabDef.Nick); return self:Deny() end - local qtDef, sDir, tA = self:GetDefinition(), "", {...} - sStmt = sStmt:Trim("%s"):Trim(";").." ORDER BY " + local qtDef, tA = self:GetDefinition(), {...}; sStmt = sStmt:Trim("%s"):Trim(";").." ORDER BY " for iCnt = 1, nA do local vA = mathFloor(tonumber(tA[iCnt]) or 0); if(vA == 0) then LogInstance("Column undefined "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end - sDir = ((vA > 0) and " ASC" or " DESC"); vA = mathAbs(vA) + local sDir = ((vA > 0) and " ASC" or " DESC"); vA = mathAbs(vA) local tC = qtDef[vA]; if(not tC) then LogInstance("Column missing "..GetReport(nA,iCnt,vA), tabDef.Nick); return self:Deny() end local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then @@ -3049,7 +3047,7 @@ function NewTable(sTable,defTab,bDelete,bReload) local qtCmd, nA = self:GetCommand(), select("#", ...) local qtDef = self:GetDefinition(); qtCmd.STMT = "INSERT" local sStmt = qtCmd.STMT.." INTO "..qtDef.Name.." ( " - if(nA > 0) then tA = {...} + if(nA > 0) then local tA = {...} for iCnt = 1, nA do -- Assume the user wants to build custom insert local vA = mathFloor(tonumber(tA[iCnt]) or 0); if(vA == 0) then LogInstance("Column undefined "..GetReport(nA,iCnt,vA),tabDef.Nick); return self:Deny() end @@ -3071,10 +3069,8 @@ function NewTable(sTable,defTab,bDelete,bReload) end -- Add values clause to the current statement function self:Values(...) - local qtCmd = self:GetCommand() - local qtDef = self:GetDefinition() - local sStmt = qtCmd[qtCmd.STMT] - local tA, nA = {...}, select("#", ...) + local qtCmd, qtDef = self:GetCommand(), self:GetDefinition() + local tA, nA, sStmt = {...}, select("#", ...), qtCmd[qtCmd.STMT] if(not sStmt and isbool(sStmt)) then LogInstance("Statement deny "..GetReport(nA,qtCmd.STMT), tabDef.Nick); return self:Deny() end if(not isstring(sStmt)) then From 9f1d43d4c21a4a5bc76689174c08b3040c3342be Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 13 Sep 2024 17:28:11 +0300 Subject: [PATCH 026/114] Optimized: `asmlib.GetWrap` being 50% faster. Removed loop --- lua/trackassembly/trackasmlib.lua | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 3276ceb3..b5423ce2 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -511,15 +511,19 @@ end --[[ * When requested wraps the first value according to * the interval described by the other two values - * Inp: -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 - * Out: 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 - * This is an example call for the input between 1 and 3 + * Inp (V): -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 + * Out (R): 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 + * This is an example call for the input between L=1 and H=3 + * nV - Current value being wrapped + * nL - Wrapper low value + * nH - Wrapper high value + * Returns the wrapped value mapped to the interval provided ]] -function GetWrap(nVal,nMin,nMax) local nVal = nVal - while(nVal < nMin or nVal > nMax) do - nVal = ((nVal < nMin) and (nMax - (nMin - nVal) + 1) or nVal) - nVal = ((nVal > nMax) and (nMin + (nVal - nMax) - 1) or nVal) - end; return nVal -- Returns the N-stepped value +function GetWrap(nV, nL, nH) + if(nV == 0) then return nH end + if(nV >= nL and nV <= nH) then return nV end + local nC = nV % nH + return (nC == 0) and nH or nC end --[[ @@ -2061,10 +2065,11 @@ end function SwitchID(vID,vDir,oRec) local stPOA, ID = LocatePOA(oRec,vID); if(not IsHere(stPOA)) then LogInstance("ID missing "..GetReport(vID)); return 1 end - local nDir = (tonumber(vDir) or 0); nDir = (((nDir > 0) and 1) or ((nDir < 0) and -1) or 0) - if(nDir == 0) then LogInstance("Direction mismatch"); return ID end - ID = GetWrap(ID + nDir,1,oRec.Size) -- Move around the snap location selected - stPOA = LocatePOA(oRec,ID); if(not IsHere(stPOA)) then + local nDir = mathFloor(tonumber(vDir) or 0) + local iDir = (((nDir > 0) and 1) or ((nDir < 0) and -1) or 0) + if(iDir == 0) then LogInstance("Direction mismatch"); return ID end + local ID = GetWrap(ID + iDir, 1, oRec.Size) -- Move around the snap + local stPOA = LocatePOA(oRec,ID); if(not IsHere(stPOA)) then LogInstance("Offset missing "..GetReport(ID)); return 1 end return ID end From f01972dbc3e12a469812a6fc4a36ef90f6cc49e5 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 18 Sep 2024 09:00:38 +0300 Subject: [PATCH 027/114] Changed: Reduce wrap arguments count --- lua/trackassembly/trackasmlib.lua | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index b5423ce2..4986dd3d 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -515,15 +515,14 @@ end * Out (R): 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 * This is an example call for the input between L=1 and H=3 * nV - Current value being wrapped - * nL - Wrapper low value - * nH - Wrapper high value + * nS - Wrapper size/count value * Returns the wrapped value mapped to the interval provided ]] -function GetWrap(nV, nL, nH) - if(nV == 0) then return nH end - if(nV >= nL and nV <= nH) then return nV end - local nC = nV % nH - return (nC == 0) and nH or nC +function GetWrap(nV, nS) + if(nV == 0) then return nS end + if(nV >= 1 and nV <= nS) then return nV end + local nC = nV % nS -- Get the reminder + return (nC == 0) and nS or nC end --[[ @@ -2068,7 +2067,7 @@ function SwitchID(vID,vDir,oRec) local nDir = mathFloor(tonumber(vDir) or 0) local iDir = (((nDir > 0) and 1) or ((nDir < 0) and -1) or 0) if(iDir == 0) then LogInstance("Direction mismatch"); return ID end - local ID = GetWrap(ID + iDir, 1, oRec.Size) -- Move around the snap + local ID = GetWrap(ID + iDir, oRec.Size) -- Move around the snap local stPOA = LocatePOA(oRec,ID); if(not IsHere(stPOA)) then LogInstance("Offset missing "..GetReport(ID)); return 1 end return ID From deaa333dcc8b43c84d544f26ec6bdbe517efcd55 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 18 Sep 2024 09:51:29 +0300 Subject: [PATCH 028/114] Updated: Better sorting algorithm Fixed: Exporting DSV in Lua mode create unnecessary table --- lua/autorun/trackassembly_init.lua | 8 ++--- lua/trackassembly/trackasmlib.lua | 48 ++++++++++++++++-------------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 699763e9..f769514e 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.765") +asmlib.SetOpVar("TOOL_VERSION","8.766") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1691,10 +1691,8 @@ asmlib.NewTable("PIECES",{ stData.Size = stData.Size + 1; return true end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) - local tData, defTab = {}, makTab:GetDefinition() - for mod, rec in pairs(tCache) do - tData[mod] = {KEY = (rec.Type..rec.Name..mod)} end - local tSort = asmlib.Sort(tData, "KEY") + local defTab = makTab:GetDefinition() + local tSort = asmlib.PrioritySort(tCache) if(not tSort) then oFile:Flush(); oFile:Close() asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end local noSQL = asmlib.GetOpVar("MISS_NOSQL") diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4986dd3d..3c7b7371 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -728,7 +728,14 @@ function InitBase(sName, sPurp) SetOpVar("FORM_NTFGAME", "notification.AddLegacy(\"%s\", NOTIFY_%s, 6)") SetOpVar("FORM_NTFPLAY", "surface.PlaySound(\"ambient/water/drip%d.wav\")") SetOpVar("MODELNAM_FILE","%.mdl") - SetOpVar("VCOMPARE_SORT", function(u, v) return (u.Val < v.Val) end) + SetOpVar("VCOMPARE_SDAT", function(u, v, c) + for iD = 1, c.Size do local iR = c[iD] + local uR, vR = u.Rec, v.Rec + if(uR[iR] < vR[iR]) then return true end + if(uR[iR] > vR[iR]) then return false end + end; return false; end + SetOpVar("VCOMPARE_SKEY", function(u, v) return (u.Key < v.Key) end) + SetOpVar("VCOMPARE_SREC", function(u, v) return (u.Rec < v.Rec) end) SetOpVar("MODELNAM_FUNC", function(x) return " "..x:sub(2,2):upper() end) SetOpVar("EMPTYSTR_BLNU", function(x) return (IsBlank(x) or IsNull(x)) end) SetOpVar("EMPTYSTR_BLDS", function(x) return (IsBlank(x) or IsDisable(x)) end) @@ -2274,22 +2281,19 @@ function RegisterPOA(stData, ivID, sP, sO, sA) return tOffs -- On success return the populated POA offset end -function Sort(tTable, ...) - local tS, iS = {Size = 0}, 0 - local fS = GetOpVar("VCOMPARE_SORT") - local tC = {...}; tC.Size = select("#", ...) - for key, rec in pairs(tTable) do -- Scan the entire table - iS = (iS + 1); tS[iS] = {} -- Allocate key/record and store - local rS = tS[iS]; rS.Key, rS.Rec = key, rec -- Local reference - if(istable(rec)) then rS.Val = "" -- Allocate sorting value - if(tC.Size > 0) then -- When there are sorting column names provided - for iC = 1, tC.Size do local sC = tC[iC]; if(not IsHere(rec[sC])) then - LogInstance("Key missing "..GetReport(sC)); return nil end - rS.Val = rS.Val..tostring(rec[sC]) -- Concatenate sort value - end -- When no sort columns are provided sort by the keys instead - else rS.Val = key end -- When column list not specified use the key - else rS.Val = rec end -- When the element is not a table use the value - end; tS.Size = iS; tableSort(tS, fS); return tS +function PrioritySort(tSrc, vPrn, ...) + local tC = (istable(vPrn) and vPrn or {vPrn, ...}) + local tS = {Size = 0}; tC.Size = #tC + for key, rec in pairs(tSrc) do -- Scan the entire table + tS.Size = tS.Size + 1 -- Allocate key/record and store + tableInsert(tS, {Key = key, Rec = rec}) -- New table + end -- The table keys are converted to integers + if(istable(tS[1].Rec)) then -- Data is table + if(tC.Size > 0) then -- Sorting column names provided + local fC = GetOpVar("VCOMPARE_SDAT") + tableSort(tS, function(u, v) return fC(u, v, tC) end) + else tableSort(tS, GetOpVar("VCOMPARE_SKEY")) end + else tableSort(tS, GetOpVar("VCOMPARE_SREC")) end; return tS end ------------- VARIABLE INTERFACES -------------- @@ -3374,7 +3378,7 @@ function CacheQueryPanel(bExp) return ExportPanelDB(stPanel, bExp, makTab, sFunc) elseif(sMoDB == "LUA") then local tCache = libCache[defTab.Name] -- Sort directly by the model - local tSort = Sort(tCache, "Type", "Slot"); if(not tSort) then + local tSort = PrioritySort(tCache, "Type", "Slot"); if(not tSort) then LogInstance("Cannot sort cache data"); return nil end local coMo = makTab:GetColumnName(1) local coTy = makTab:GetColumnName(2) @@ -3730,13 +3734,13 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) fData[vK] = tRec; fData[vK].Size = #tRec end end end - local tSort = Sort(tableGetKeys(fData)); if(not tSort) then + local tSort = PrioritySort(fData); if(not tSort) then LogInstance("("..fPref.."@"..sTable..") Sorting failed"); return false end local O = fileOpen(fName, "wb" ,"DATA"); if(not O) then LogInstance("("..fPref.."@"..sTable..")("..fName..") Open fail"); return false end O:Write("# "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") O:Write("# "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") - for iKey = 1, tSort.Size do local key = tSort[iKey].Val + for iKey = 1, tSort.Size do local key = tSort[iKey].Rec local vK = makTab:Match(key,1,true,"\"",true); if(not IsHere(vK)) then O:Flush(); O:Close(); LogInstance("("..fPref.."@"..sTable.."@"..tostring(key)..") Write matching PK failed"); return false end local fRec, sCash, sData = fData[key], defTab.Name..sDelim..vK, "" @@ -3949,7 +3953,7 @@ function SetAdditionsAR(sModel, makTab, qList) end end end - local tSort = Sort(qData, coMo, coLn); if(not tSort) then + local tSort = PrioritySort(qData, coMo, coLn); if(not tSort) then LogInstance("Sort cache mismatch"); return end; tableEmpty(qData) for iD = 1, tSort.Size do qData[iD] = tSort[iD].Rec end else @@ -4092,7 +4096,7 @@ function ExportTypeAR(sType) end end end - local tSort = Sort(qPieces, coMo, coLn) + local tSort = PrioritySort(qPieces, coMo, coLn) if(not tSort) then LogInstance("Sort cache mismatch") fE:Flush(); fE:Close(); fS:Close(); return From 061e9f04eee8e608109580ef09bebc2513b23c80 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 18 Sep 2024 15:28:17 +0300 Subject: [PATCH 029/114] Added: Sorting when exporting data in Lua mode --- lua/autorun/trackassembly_init.lua | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index f769514e..5442dade 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -1692,7 +1692,7 @@ asmlib.NewTable("PIECES",{ end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() - local tSort = asmlib.PrioritySort(tCache) + local tSort = asmlib.PrioritySort(tCache, "Type", "Slot") if(not tSort) then oFile:Flush(); oFile:Close() asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end local noSQL = asmlib.GetOpVar("MISS_NOSQL") @@ -1752,17 +1752,25 @@ asmlib.NewTable("ADDITIONS",{ if(iID ~= (stData.Size + 1)) then asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iID,snPK),vSrc); return false end stData[iID] = {} -- LineID has to be set properly - for iCnt = 2, defTab.Size do local sC = makTab:GetColumnName(iCnt) -- Check data conversion output + for iCnt = 2, defTab.Size do local sC = makTab:GetColumnName(iCnt); if(not sC) then + asmlib.LogInstance("Cannot index "..asmlib.GetReport(iCnt,snPK),vSrc); return false end stData[iID][sC] = makTab:Match(arLine[iCnt],iCnt); if(not asmlib.IsHere(stData[iID][sC])) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(iCnt,arLine[iCnt],snPK),vSrc); return false end end; stData.Size = stData.Size + 1; return true end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() - for mod, rec in pairs(tCache) do - local sData = defTab.Name..sDelim..mod - for iIdx = 1, #rec do local tData = rec[iIdx]; oFile:Write(sData) - for iID = 2, defTab.Size do local vData = tData[makTab:GetColumnName(iID)] + local tData = asmlib.PrioritySort(tCache) + for iRow = 1, tData.Size do + local tRow = tData[iRow] + local sKey, tRec = tRow.Key, tRow.Rec + local sData = defTab.Name..sDelim..sKey + for iRec = 1, #tRec do local tData = tRec[iRec]; oFile:Write(sData) + for iID = 2, defTab.Size do + local sC = makTab:GetColumnName(iID); if(not sC) then + asmlib.LogInstance("Cannot index "..asmlib.GetReport(iID,sKey),vSrc); return false end + local vData = tData[sC]; if(not sC) then + asmlib.LogInstance("Cannot extract "..asmlib.GetReport(iID,sKey),vSrc); return false end local vM = makTab:Match(vData,iID,true,"\""); if(not asmlib.IsHere(vM)) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(iID,vData)); return false end; oFile:Write(sDelim..tostring(vM or "")) From 851af2a432cc32102db437d14781e63a23206dd9 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 20 Sep 2024 18:20:37 +0300 Subject: [PATCH 030/114] Removed: Function `GetWrap` not needed anymore --- lua/trackassembly/trackasmlib.lua | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 3c7b7371..4f29377f 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -508,22 +508,6 @@ function LogTable(tT, sS, vSrc, bCon, iDbg, tDbg) end ------------- VALUE --------------- ---[[ - * When requested wraps the first value according to - * the interval described by the other two values - * Inp (V): -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 - * Out (R): 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 - * This is an example call for the input between L=1 and H=3 - * nV - Current value being wrapped - * nS - Wrapper size/count value - * Returns the wrapped value mapped to the interval provided -]] -function GetWrap(nV, nS) - if(nV == 0) then return nS end - if(nV >= 1 and nV <= nS) then return nV end - local nC = nV % nS -- Get the reminder - return (nC == 0) and nS or nC -end --[[ * Applies border if exists to the input value @@ -2074,7 +2058,8 @@ function SwitchID(vID,vDir,oRec) local nDir = mathFloor(tonumber(vDir) or 0) local iDir = (((nDir > 0) and 1) or ((nDir < 0) and -1) or 0) if(iDir == 0) then LogInstance("Direction mismatch"); return ID end - local ID = GetWrap(ID + iDir, oRec.Size) -- Move around the snap + local nC = (ID + iDir) % oRec.Size -- Reminder of ID increment + local ID = (nC == 0) and oRec.Size or nC -- Zero default to size local stPOA = LocatePOA(oRec,ID); if(not IsHere(stPOA)) then LogInstance("Offset missing "..GetReport(ID)); return 1 end return ID From f0563e99293158032909c14c6821c7897b135a6c Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 27 Sep 2024 11:26:41 +0300 Subject: [PATCH 031/114] Fixed: Panel runtime errors --- lua/weapons/gmod_tool/stools/trackassembly.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 1d20dc0e..2b4579be 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2318,10 +2318,10 @@ function TOOL.BuildCPanel(CPanel) CPanel:AddItem(pTree) -- Register it to the panel local defTable = makTab:GetDefinition() local catTypes = asmlib.GetOpVar("TABLE_CATEGORIES") - local iC, pTypes, pCateg, pNode = 1, 1, {}, {} - local coMo = makP:GetColumnName(1) - local coTy = makP:GetColumnName(2) - local coNm = makP:GetColumnName(3) + local pTypes, pCateg, pNode = {}, {} + local coMo = makTab:GetColumnName(1) + local coTy = makTab:GetColumnName(2) + local coNm = makTab:GetColumnName(3) for iC = 1, qPanel.Size do local vRec, bNow = qPanel[iC], true local sMod, sTyp, sNam = vRec[coMo], vRec[coTy], vRec[coNm] @@ -2426,8 +2426,8 @@ function TOOL.BuildCPanel(CPanel) local cqProperty = asmlib.CacheQueryProperty(); if(not cqProperty) then asmlib.LogInstance("Property population empty",sLog); return end - for iTyp = 1, cqProperty.Size do - local sT, sI = cqProperty[iTyp], asmlib.ToIcon("property_type") + for iP = 1, cqProperty.Size do + local sT, sI = cqProperty[iP], asmlib.ToIcon("property_type") pComboPhysType:AddChoice(sT, sT, false, sI) end From 0e04c0ca5504957c89c9209d6101508b1194dfe5 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 10 Oct 2024 17:29:00 +0300 Subject: [PATCH 032/114] Added: General structure for tool panel with category Removed: Library pointer usage inside itself --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 76 ++++++++++++++++++++++++------ 2 files changed, 62 insertions(+), 16 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 5442dade..eef39fbf 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.766") +asmlib.SetOpVar("TOOL_VERSION","8.767") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4f29377f..92628a4d 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -712,12 +712,25 @@ function InitBase(sName, sPurp) SetOpVar("FORM_NTFGAME", "notification.AddLegacy(\"%s\", NOTIFY_%s, 6)") SetOpVar("FORM_NTFPLAY", "surface.PlaySound(\"ambient/water/drip%d.wav\")") SetOpVar("MODELNAM_FILE","%.mdl") + SetOpVar("VCOMPARE_SPAN", function(u, v) + if(u.T ~= v.T) then return u.T < v.T end + local uC = (u.C or {}) + local vC = (v.C or {}) + local uM, vM = #uC, #vC + for i = 1, math.max(uM, vM) do + local uS = tostring(uC[i] or "") + local vS = tostring(vC[i] or "") + if(uS ~= vS) then return uS < vS end + end + if(u.N ~= v.N) then return u.N < v.N end + if(u.M ~= v.M) then return u.M < v.M end + return false end) SetOpVar("VCOMPARE_SDAT", function(u, v, c) for iD = 1, c.Size do local iR = c[iD] local uR, vR = u.Rec, v.Rec if(uR[iR] < vR[iR]) then return true end if(uR[iR] > vR[iR]) then return false end - end; return false; end + end; return false; end) SetOpVar("VCOMPARE_SKEY", function(u, v) return (u.Key < v.Key) end) SetOpVar("VCOMPARE_SREC", function(u, v) return (u.Rec < v.Rec) end) SetOpVar("MODELNAM_FUNC", function(x) return " "..x:sub(2,2):upper() end) @@ -3237,7 +3250,7 @@ function CacheQueryPiece(sModel) local coO , coA = makTab:GetColumnName(6), makTab:GetColumnName(7) for iCnt = 1, stData.Size do local qRec = qData[iCnt]; if(iCnt ~= qRec[coID]) then - asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end + LogInstance("Sequential mismatch "..GetReport(iCnt,sModel)); return nil end if(not IsHere(RegisterPOA(stData,iCnt, qRec[coP], qRec[coO], qRec[coA]))) then LogInstance("Cannot process offset "..GetReport(iCnt, sModel)); return nil end @@ -3281,7 +3294,7 @@ function CacheQueryAdditions(sModel) local coMo, coID = makTab:GetColumnName(1), makTab:GetColumnName(4) for iCnt = 1, stData.Size do local qRec = qData[iCnt]; qRec[coMo] = nil; if(iCnt ~= qRec[coID]) then - asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sModel)); return nil end + LogInstance("Sequential mismatch "..GetReport(iCnt,sModel)); return nil end stData[iCnt] = {}; for col, val in pairs(qRec) do stData[iCnt][col] = val end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil @@ -3327,6 +3340,37 @@ function ExportPanelDB(stPanel, bExp, makTab, sFunc) end; return stPanel end +--[[ + * Updates panel category to dedicated hash + * stPanel > The actual panel information to export +]] +function UpdatePanelCategory(stPanel) + local tCat = GetOpVar("TABLE_CATEGORIES") + for iCnt = 1, stPanel.Size do local vRec = stPanel[iCnt] + -- Register the category if definition functional is given + if(tCat[vRec.T]) then -- There is a category definition + local bS, vC, vN = pcall(tCat[vRec.T].Cmp, sMod) + if(bS) then -- When the call is successful in protected mode + if(vN and not IsBlank(vN)) then + vRec.N = GetBeautifyName(vN) + end -- Custom name override when the addon requests + if(IsBlank(vC)) then vC = nil end + if(IsHere(vC)) then + if(not istable(vC)) then vC = {tostring(vC or "")} end + vRec.C = vC -- Make output category to point to local one + for iD = 1, #vC do -- Create category tree path + local vC[iD] = tostring(vC[iD] or ""):lower():Trim() + if(IsBlank(vC[iD])) then vC[iD] = "other" end + vC[iD] = GetBeautifyName(vC[iD]) -- Beautify the category + end -- When the category has at least one element + end -- Is there is any category apply it. When available process it now + else -- When there is an error in the category execution report it + LogInstance("Category "..GetReport(vRec.T, vRec.M).." execution error: "..vC,sLog) + end -- Category factory has been executed and sub-folders are created + end -- Category definition has been processed and nothing more to be done + end; tableSort(stPanel, GetOpVar("VCOMPARE_SPAN")); return stPanel +end + --[[ * Caches the data needed to populate the CPanel tree * bExp > Export panel data into a DB file @@ -3343,10 +3387,13 @@ function CacheQueryPanel(bExp) if(IsHere(stPanel) and IsHere(stPanel.Size)) then LogInstance("Retrieve") if(stPanel.Size <= 0) then stPanel = nil else stPanel = makTab:TimerRestart(sFunc, keyPan) end - return ExportPanelDB(stPanel, bExp, makTab, sFunc) + return stPanel else - libCache[keyPan] = {}; stPanel = libCache[keyPan] + local coMo = makTab:GetColumnName(1) + local coTy = makTab:GetColumnName(2) + local coNm = makTab:GetColumnName(3) local sMoDB = GetOpVar("MODE_DATABASE") + libCache[keyPan] = {}; stPanel = libCache[keyPan] if(sMoDB == "SQL") then local qIndx = qsKey:format(sFunc,"") local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then @@ -3358,23 +3405,22 @@ function CacheQueryPanel(bExp) if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end stPanel.Size = #qData -- Store the amount of SQL rows - for iCnt = 1, stPanel.Size do stPanel[iCnt] = qData[iCnt] end + for iCnt = 1, stPanel.Size do local qRow = qData[iCnt] + stPanel[iCnt] = {M = qRow[coMo], T = qRow[coTy], N = qRow[coNm]} + end stPanel = makTab:TimerAttach(sFunc, keyPan) - return ExportPanelDB(stPanel, bExp, makTab, sFunc) + return UpdatePanelCategory(ExportPanelDB(stPanel, bExp, makTab, sFunc)) elseif(sMoDB == "LUA") then local tCache = libCache[defTab.Name] -- Sort directly by the model local tSort = PrioritySort(tCache, "Type", "Slot"); if(not tSort) then LogInstance("Cannot sort cache data"); return nil end - local coMo = makTab:GetColumnName(1) - local coTy = makTab:GetColumnName(2) - local coNm = makTab:GetColumnName(3) for iCnt = 1, tSort.Size do stPanel[iCnt] = {} local vSort, vPanel = tSort[iCnt], stPanel[iCnt] - vPanel[coMo] = vSort.Key - vPanel[coTy] = vSort.Rec.Type - vPanel[coNm] = vSort.Rec.Name + vPanel.M = vSort.Key + vPanel.T = vSort.Rec.Type + vPanel.N = vSort.Rec.Name end; stPanel.Size = tSort.Size -- Store the amount sort rows - return ExportPanelDB(stPanel, bExp, makTab, sFunc) + return UpdatePanelCategory(ExportPanelDB(stPanel, bExp, makTab, sFunc)) else LogInstance("Unsupported mode "..GetReport(sMoDB)); return nil end end end @@ -3421,7 +3467,7 @@ function CacheQueryProperty(sType) stName.Slot, stName.Size = sType, #qData for iCnt = 1, stName.Size do local qRec = qData[iCnt]; if(iCnt ~= qRec[coID]) then - asmlib.LogInstance("Sequential mismatch "..asmlib.GetReport(iCnt,sType)); return nil end + LogInstance("Sequential mismatch "..GetReport(iCnt,sType)); return nil end stName[iCnt] = qRec[coNm] -- Properties are stored as arrays of strings end LogInstance("Save >> "..GetReport(sType, keyName)) From 3b9c81fccc3a3221caf8a82e0f39b07a39e41684 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 16 Oct 2024 12:04:21 +0300 Subject: [PATCH 033/114] Fixed: Some runtime errors Updated: Category sorting and population Optimized: `ChecheQueryPanel` and its data structure Added: Category sort/export into separate functions --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 104 +++++++++--------- .../gmod_tool/stools/trackassembly.lua | 52 +++------ 3 files changed, 67 insertions(+), 91 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index eef39fbf..6028372f 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.767") +asmlib.SetOpVar("TOOL_VERSION","8.768") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 92628a4d..a30c74c9 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -717,7 +717,7 @@ function InitBase(sName, sPurp) local uC = (u.C or {}) local vC = (v.C or {}) local uM, vM = #uC, #vC - for i = 1, math.max(uM, vM) do + for i = 1, mathMax(uM, vM) do local uS = tostring(uC[i] or "") local vS = tostring(vC[i] or "") if(uS ~= vS) then return uS < vS end @@ -3305,67 +3305,63 @@ end ----------------------- PANEL QUERY ------------------------------- --[[ - * Exports panel information to dedicated DB file - * stPanel > The actual panel information to export - * bExp > Export panel data into a DB file - * makTab > Table maker object + * Export tool panel contents as a sync file + * stPanel > The actual tool panel information handled * sFunc > Export requestor ( CacheQueryPanel ) + * bExp > Control flag. Export when enabled ]] -function ExportPanelDB(stPanel, bExp, makTab, sFunc) - if(bExp) then - local sMiss = GetOpVar("MISS_NOAV") - local sBase = GetOpVar("DIRPATH_BAS") - local sExpo = GetOpVar("DIRPATH_EXP") - local sMoDB = GetOpVar("MODE_DATABASE") - local symSep, cT = GetOpVar("OPSYM_SEPARATOR") - if(not fileExists(sBase, "DATA")) then fileCreateDir(sBase) end - local fName = (sBase..sExpo..GetOpVar("NAME_LIBRARY").."_db.txt") - local F = fileOpen(fName, "wb" ,"DATA"), sMiss; if(not F) then - LogInstance("Open fail "..GetReport(fName)); return stPanel end - F:Write("# "..sFunc..":("..tostring(bExp)..") "..GetDateTime().." [ "..sMoDB.." ]\n") - local coMo = makTab:GetColumnName(1) - local coTy = makTab:GetColumnName(2) - local coNm = makTab:GetColumnName(3) - for iCnt = 1, stPanel.Size do - local vPanel = stPanel[iCnt] - local sM, sT, sN = vPanel[coMo], vPanel[coTy], vPanel[coNm] - if(not cT or cT ~= sT) then -- Category has been changed - F:Write("# Categorize [ "..sMoDB.." ]("..sT.."): "..tostring(WorkshopID(sT) or sMiss)) - F:Write("\n"); cT = sT -- Cache category name - end -- Otherwise just write down the piece active point - F:Write("\""..sM.."\""..symSep) - F:Write("\""..sT.."\""..symSep) - F:Write("\""..sN.."\""); F:Write("\n") - end; F:Flush(); F:Close() - end; return stPanel +local function DumpCategory(stPanel, sFunc, bExp) + if(SERVER) then return stPanel end + if(not bExp) then return stPanel end + local sFunc = tostring(sFunc or "") + local sMiss = GetOpVar("MISS_NOAV") + local sBase = GetOpVar("DIRPATH_BAS") + local sExpo = GetOpVar("DIRPATH_EXP") + local sMoDB = GetOpVar("MODE_DATABASE") + local symSep, cT = GetOpVar("OPSYM_SEPARATOR") + if(not fileExists(sBase, "DATA")) then fileCreateDir(sBase) end + local fName = (sBase..sExpo..GetOpVar("NAME_LIBRARY").."_db.txt") + local F = fileOpen(fName, "wb" ,"DATA"), sMiss; if(not F) then + LogInstance("Open fail "..GetReport(fName)); return stPanel end + F:Write("# "..sFunc..":("..stPanel.Size..") "..GetDateTime().." [ "..sMoDB.." ]\n") + for iCnt = 1, stPanel.Size do + local vRec = stPanel[iCnt] + local sM, sT, sN = vRec.M, vRec.T, vRec.N + if(not cT or cT ~= sT) then -- Category has been changed + F:Write("# Categorize [ "..sMoDB.." ]("..sT.."): "..tostring(WorkshopID(sT) or sMiss)) + F:Write("\n"); cT = sT -- Cache category name + end -- Otherwise just write down the piece active point + F:Write("\""..sM.."\""..symSep) + F:Write("\""..sT.."\""..symSep) + F:Write("\""..sN.."\""); F:Write("\n") + end; F:Flush(); F:Close(); return stPanel end --[[ * Updates panel category to dedicated hash - * stPanel > The actual panel information to export + * stPanel > The actual panel information to populate ]] -function UpdatePanelCategory(stPanel) +local function SortCategory(stPanel) local tCat = GetOpVar("TABLE_CATEGORIES") for iCnt = 1, stPanel.Size do local vRec = stPanel[iCnt] -- Register the category if definition functional is given if(tCat[vRec.T]) then -- There is a category definition - local bS, vC, vN = pcall(tCat[vRec.T].Cmp, sMod) + local bS, vC, vN = pcall(tCat[vRec.T].Cmp, vRec.M) if(bS) then -- When the call is successful in protected mode - if(vN and not IsBlank(vN)) then - vRec.N = GetBeautifyName(vN) - end -- Custom name override when the addon requests + if(vN and not IsBlank(vN)) then vRec.N = GetBeautifyName(vN) end + -- Custom name override when the addon requests if(IsBlank(vC)) then vC = nil end if(IsHere(vC)) then if(not istable(vC)) then vC = {tostring(vC or "")} end - vRec.C = vC -- Make output category to point to local one - for iD = 1, #vC do -- Create category tree path - local vC[iD] = tostring(vC[iD] or ""):lower():Trim() + vRec.C = vC; vC.Size = #vC -- Make output category to point to local one + for iD = 1, vC.Size do -- Create category tree path + vC[iD] = tostring(vC[iD] or ""):lower():Trim() if(IsBlank(vC[iD])) then vC[iD] = "other" end vC[iD] = GetBeautifyName(vC[iD]) -- Beautify the category end -- When the category has at least one element end -- Is there is any category apply it. When available process it now else -- When there is an error in the category execution report it - LogInstance("Category "..GetReport(vRec.T, vRec.M).." execution error: "..vC,sLog) + LogInstance("Process "..GetReport(vRec.T, vRec.M).." [[["..tCat[vRec.T].Txt.."]]] execution error: "..vC,sLog) end -- Category factory has been executed and sub-folders are created end -- Category definition has been processed and nothing more to be done end; tableSort(stPanel, GetOpVar("VCOMPARE_SPAN")); return stPanel @@ -3408,19 +3404,19 @@ function CacheQueryPanel(bExp) for iCnt = 1, stPanel.Size do local qRow = qData[iCnt] stPanel[iCnt] = {M = qRow[coMo], T = qRow[coTy], N = qRow[coNm]} end - stPanel = makTab:TimerAttach(sFunc, keyPan) - return UpdatePanelCategory(ExportPanelDB(stPanel, bExp, makTab, sFunc)) + SortCategory(stPanel) + DumpCategory(stPanel, sFunc, bExp) + return makTab:TimerAttach(sFunc, keyPan) elseif(sMoDB == "LUA") then - local tCache = libCache[defTab.Name] -- Sort directly by the model - local tSort = PrioritySort(tCache, "Type", "Slot"); if(not tSort) then - LogInstance("Cannot sort cache data"); return nil end - for iCnt = 1, tSort.Size do stPanel[iCnt] = {} - local vSort, vPanel = tSort[iCnt], stPanel[iCnt] - vPanel.M = vSort.Key - vPanel.T = vSort.Rec.Type - vPanel.N = vSort.Rec.Name - end; stPanel.Size = tSort.Size -- Store the amount sort rows - return UpdatePanelCategory(ExportPanelDB(stPanel, bExp, makTab, sFunc)) + local tCache, stPanel = libCache[defTab.Name], {Size = 0} + for mod, rec in pairs(tCache) do + local iCnt = stPanel.Size; iCnt = iCnt + 1 + stPanel[iCnt] = {M = rec.Slot, T = rec.Type, N = rec.Name} + stPanel.Size = iCnt -- Store the amount of rows + end + SortCategory(stPanel) + DumpCategory(stPanel, sFunc, bExp) + return stPanel else LogInstance("Unsupported mode "..GetReport(sMoDB)); return nil end end end diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 2b4579be..ddaa0c8f 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2317,14 +2317,10 @@ function TOOL.BuildCPanel(CPanel) pTree:UpdateColours(drmSkin) -- Apply current skin CPanel:AddItem(pTree) -- Register it to the panel local defTable = makTab:GetDefinition() - local catTypes = asmlib.GetOpVar("TABLE_CATEGORIES") - local pTypes, pCateg, pNode = {}, {} - local coMo = makTab:GetColumnName(1) - local coTy = makTab:GetColumnName(2) - local coNm = makTab:GetColumnName(3) + local pTypes, pCateg, pNode = {}, {}, {} for iC = 1, qPanel.Size do local vRec, bNow = qPanel[iC], true - local sMod, sTyp, sNam = vRec[coMo], vRec[coTy], vRec[coNm] + local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N if(asmlib.IsModel(sMod)) then if(not (asmlib.IsBlank(sTyp) or pTypes[sTyp])) then local pRoot = pTree:AddNode(sTyp) -- No type folder made already @@ -2342,37 +2338,21 @@ function TOOL.BuildCPanel(CPanel) pTypes[sTyp] = pRoot end -- Reset the primary tree node pointer if(pTypes[sTyp]) then pItem = pTypes[sTyp] else pItem = pTree end - -- Register the category if definition functional is given - if(catTypes[sTyp]) then -- There is a category definition - local bSuc, vCat, vNam = pcall(catTypes[sTyp].Cmp, sMod) - if(bSuc) then -- When the call is successful in protected mode - if(vNam and not asmlib.IsBlank(vNam)) then - sNam = asmlib.GetBeautifyName(vNam) - end -- Custom name override when the addon requests - local pCur = pCateg[sTyp] - if(not asmlib.IsHere(pCur)) then - pCateg[sTyp] = {}; pCur = pCateg[sTyp] end - if(asmlib.IsBlank(vCat)) then vCat = nil end - if(asmlib.IsHere(vCat)) then - if(not istable(vCat)) then vCat = {vCat} end - for iD = 1, #vCat do -- Create category tree path - local sCat = tostring(vCat[iD] or ""):lower():Trim() - if(asmlib.IsBlank(sCat)) then sCat = "other" end - sCat = asmlib.GetBeautifyName(sCat) -- Beautify the category - if(pCur[sCat]) then -- Jump next if already created - pCur, pItem = asmlib.GetDirectory(pCur, sCat) - else -- Create a new sub-category for the incoming content - pCur, pItem = asmlib.SetDirectory(pItem, pCur, sCat) - end -- Create the last needed node regarding pItem - end -- When the category has at least one element - else -- Store the creation information of the ones without category for later - tableInsert(pCateg[sTyp], {sNam, sMod}); bNow = false - end -- Is there is any category apply it. When available process it now - else -- When there is an error in the category execution report it - asmlib.LogInstance("Category "..asmlib.GetReport(sTyp, sMod).." execution error: "..vCat,sLog) - end -- Category factory has been executed and sub-folders are created - end -- Category definition has been processed and nothing more to be done -- Register the node associated with the track piece when is intended for later + local pCur = pCateg[sTyp]; if(not asmlib.IsHere(pCur)) then + pCateg[sTyp] = {}; pCur = pCateg[sTyp] end -- Create category tree path + if(vRec.C) then -- When category for the track type is available + for iD = 1, vRec.C.Size do -- Generate the path to the track piece + local sCat = vRec.C[iD] -- Read the category name + if(pCur[sCat]) then -- Jump next if already created + pCur, pItem = asmlib.GetDirectory(pCur, sCat) + else -- Create a new sub-category for the incoming content + pCur, pItem = asmlib.SetDirectory(pItem, pCur, sCat) + end -- Create the last needed node regarding pItem + end -- When the category has at least one element + else + tableInsert(pCateg[sTyp], {sNam, sMod}); bNow = false + end if(bNow) then asmlib.SetDirectoryNode(pItem, sNam, sMod) end -- SnapReview is ignored because a query must be executed for points count else asmlib.LogInstance("Ignoring item "..asmlib.GetReport(sTyp, sNam, sMod),sLog) end From 82e6d980964f575c8a9f3862f047582926462743 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 16 Oct 2024 13:08:45 +0300 Subject: [PATCH 034/114] Fixed: Use different placeholders for tool panel item rooting. Utilize `pNode` Improved: Store only query panel row index instead of duplicating model/name --- lua/autorun/trackassembly_init.lua | 2 +- .../gmod_tool/stools/trackassembly.lua | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 6028372f..ab6d30c9 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.768") +asmlib.SetOpVar("TOOL_VERSION","8.770") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index ddaa0c8f..06bfae21 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2317,7 +2317,7 @@ function TOOL.BuildCPanel(CPanel) pTree:UpdateColours(drmSkin) -- Apply current skin CPanel:AddItem(pTree) -- Register it to the panel local defTable = makTab:GetDefinition() - local pTypes, pCateg, pNode = {}, {}, {} + local pTypes, pCateg, pNode = {}, {}, {Size = 0} for iC = 1, qPanel.Size do local vRec, bNow = qPanel[iC], true local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N @@ -2351,20 +2351,21 @@ function TOOL.BuildCPanel(CPanel) end -- Create the last needed node regarding pItem end -- When the category has at least one element else - tableInsert(pCateg[sTyp], {sNam, sMod}); bNow = false + pNode.Size = pNode.Size + 1 + tableInsert(pNode, iC); bNow = false end if(bNow) then asmlib.SetDirectoryNode(pItem, sNam, sMod) end -- SnapReview is ignored because a query must be executed for points count else asmlib.LogInstance("Ignoring item "..asmlib.GetReport(sTyp, sNam, sMod),sLog) end end -- Attach the hanging items to the type root - for typ, val in pairs(pCateg) do - for iD = 1, #val do - local pan = pTypes[typ] - local nam, mod = unpack(val[iD]) - asmlib.SetDirectoryNode(pan, nam, mod) - asmlib.LogInstance("Rooting item "..asmlib.GetReport(typ, nam, mod),sLog) - end + for iR = 1, pNode.Size do + local iRox = pNode[iR] + local vRec = qPanel[iRox] + local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N + local pRoot = pTypes[sTyp] + asmlib.SetDirectoryNode(pRoot, sNam, sMod) + asmlib.LogInstance("Rooting item "..asmlib.GetReport(sTyp, sNam, sMod), sLog) end -- Process all the items without category defined asmlib.LogInstance("Found items #"..qPanel.Size, sLog) From d55e96b0aba2b39b8d232071f89e52ad92ddbf2f Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 16 Oct 2024 15:48:50 +0300 Subject: [PATCH 035/114] Optimized: `SettingsLog` bail early when conditions are not met Removed: Localized reference for root pointer. Use hash instead --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 16 +++++++++------- lua/weapons/gmod_tool/stools/trackassembly.lua | 3 +-- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index ab6d30c9..59e0fa6b 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.770") +asmlib.SetOpVar("TOOL_VERSION","8.771") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index a30c74c9..58b23c9c 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -630,16 +630,18 @@ function SettingsLogs(sHash) local sKey = tostring(sHash or ""):upper():Trim() if(not (sKey == "SKIP" or sKey == "ONLY")) then LogInstance("Invalid "..GetReport(sKey)); return false end - local sBas, sSet = GetOpVar("DIRPATH_BAS"), GetOpVar("DIRPATH_SET") local tLogs, lbNam = GetOpVar("LOG_"..sKey), GetOpVar("NAME_LIBRARY") - if(not tLogs) then LogInstance("Skip "..GetReport(sKey)); return false end + if(not tLogs) then LogInstance("Missing "..GetReport(sKey)); return false end + local sBas, sSet = GetOpVar("DIRPATH_BAS"), GetOpVar("DIRPATH_SET") local fName = (sBas..sSet..lbNam.."_sl"..sKey:lower()..".txt") + if(not fileExists(fName)) then + LogInstance("Discard "..GetReport(sKey, fName)); return false end local S = fileOpen(fName, "rb", "DATA"); tableEmpty(tLogs) - if(S) then local sLine, isEOF = "", false - while(not isEOF) do sLine, isEOF = GetStringFile(S) - if(not IsBlank(sLine)) then tableInsert(tLogs, sLine) end - end; S:Close(); LogInstance("Success "..GetReport(sKey, fName)); return false - else LogInstance("Missing "..GetReport(sKey, fName)); return false end + if(not S) then LogInstance("Failure "..GetReport(sKey, fName)); return false end + local sLine, isEOF = "", false + while(not isEOF) do sLine, isEOF = GetStringFile(S) + if(not IsBlank(sLine)) then tableInsert(tLogs, sLine) end + end; S:Close(); LogInstance("Success "..GetReport(sKey, fName)); return false end function InitBase(sName, sPurp) diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 06bfae21..064ef1df 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2363,8 +2363,7 @@ function TOOL.BuildCPanel(CPanel) local iRox = pNode[iR] local vRec = qPanel[iRox] local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N - local pRoot = pTypes[sTyp] - asmlib.SetDirectoryNode(pRoot, sNam, sMod) + asmlib.SetDirectoryNode(pTypes[sTyp], sNam, sMod) asmlib.LogInstance("Rooting item "..asmlib.GetReport(sTyp, sNam, sMod), sLog) end -- Process all the items without category defined asmlib.LogInstance("Found items #"..qPanel.Size, sLog) From 5d97ab0e45da403694ae167fe1fd554bb39c53c5 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 17 Oct 2024 10:01:12 +0300 Subject: [PATCH 036/114] Fixed: Log settings return proper value Renamed: Some local variables --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 3 +- .../gmod_tool/stools/trackassembly.lua | 42 +++++++++---------- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 59e0fa6b..6c9e0a07 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.771") +asmlib.SetOpVar("TOOL_VERSION","8.772") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 58b23c9c..6f31a055 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -641,7 +641,7 @@ function SettingsLogs(sHash) local sLine, isEOF = "", false while(not isEOF) do sLine, isEOF = GetStringFile(S) if(not IsBlank(sLine)) then tableInsert(tLogs, sLine) end - end; S:Close(); LogInstance("Success "..GetReport(sKey, fName)); return false + end; S:Close(); LogInstance("Success "..GetReport(sKey, fName)); return true end function InitBase(sName, sPurp) @@ -2303,6 +2303,7 @@ end * If these conditions are not met the function returns missing token * sBas > The string to check whenever it is disabled or missing * fEmp > Defines that the value is to be replaced by something else + * ... > When missing acts like empty check otherwise picks a value ]] function GetEmpty(sBas, fEmp, ...) local sS, fE = tostring(sBas or ""), fEmp -- Default to string diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 064ef1df..43b1b47a 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2317,12 +2317,12 @@ function TOOL.BuildCPanel(CPanel) pTree:UpdateColours(drmSkin) -- Apply current skin CPanel:AddItem(pTree) -- Register it to the panel local defTable = makTab:GetDefinition() - local pTypes, pCateg, pNode = {}, {}, {Size = 0} + local tType, tCats, tRoot = {}, {}, {Size = 0} for iC = 1, qPanel.Size do local vRec, bNow = qPanel[iC], true local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N if(asmlib.IsModel(sMod)) then - if(not (asmlib.IsBlank(sTyp) or pTypes[sTyp])) then + if(not (asmlib.IsBlank(sTyp) or tType[sTyp])) then local pRoot = pTree:AddNode(sTyp) -- No type folder made already pRoot:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".type")) pRoot.Icon:SetImage(asmlib.ToIcon(defTable.Name)) @@ -2335,12 +2335,12 @@ function TOOL.BuildCPanel(CPanel) else SetClipboardText(pRoot:GetText()) end end pRoot:UpdateColours(drmSkin) - pTypes[sTyp] = pRoot + tType[sTyp] = pRoot end -- Reset the primary tree node pointer - if(pTypes[sTyp]) then pItem = pTypes[sTyp] else pItem = pTree end + if(tType[sTyp]) then pItem = tType[sTyp] else pItem = pTree end -- Register the node associated with the track piece when is intended for later - local pCur = pCateg[sTyp]; if(not asmlib.IsHere(pCur)) then - pCateg[sTyp] = {}; pCur = pCateg[sTyp] end -- Create category tree path + local pCur = tCats[sTyp]; if(not asmlib.IsHere(pCur)) then + tCats[sTyp] = {}; pCur = tCats[sTyp] end -- Create category tree path if(vRec.C) then -- When category for the track type is available for iD = 1, vRec.C.Size do -- Generate the path to the track piece local sCat = vRec.C[iD] -- Read the category name @@ -2350,20 +2350,20 @@ function TOOL.BuildCPanel(CPanel) pCur, pItem = asmlib.SetDirectory(pItem, pCur, sCat) end -- Create the last needed node regarding pItem end -- When the category has at least one element - else - pNode.Size = pNode.Size + 1 - tableInsert(pNode, iC); bNow = false - end + else -- Panel cannot categorize the entry add it to the list + tRoot.Size = tRoot.Size + 1 -- Increment count to avoid calling # + tableInsert(tRoot, iC); bNow = false -- Attach row ID to rooted items + end -- When needs to be processed now just attach it to the tree if(bNow) then asmlib.SetDirectoryNode(pItem, sNam, sMod) end -- SnapReview is ignored because a query must be executed for points count else asmlib.LogInstance("Ignoring item "..asmlib.GetReport(sTyp, sNam, sMod),sLog) end end -- Attach the hanging items to the type root - for iR = 1, pNode.Size do - local iRox = pNode[iR] + for iR = 1, tRoot.Size do + local iRox = tRoot[iR] local vRec = qPanel[iRox] local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N - asmlib.SetDirectoryNode(pTypes[sTyp], sNam, sMod) + asmlib.SetDirectoryNode(tType[sTyp], sNam, sMod) asmlib.LogInstance("Rooting item "..asmlib.GetReport(sTyp, sNam, sMod), sLog) end -- Process all the items without category defined asmlib.LogInstance("Found items #"..qPanel.Size, sLog) @@ -2403,20 +2403,20 @@ function TOOL.BuildCPanel(CPanel) pComboPhysName:SetTall(22) pComboPhysName:UpdateColours(drmSkin) - local cqProperty = asmlib.CacheQueryProperty(); if(not cqProperty) then + local qProperty = asmlib.CacheQueryProperty(); if(not qProperty) then asmlib.LogInstance("Property population empty",sLog); return end - for iP = 1, cqProperty.Size do - local sT, sI = cqProperty[iP], asmlib.ToIcon("property_type") + for iP = 1, qProperty.Size do + local sT, sI = qProperty[iP], asmlib.ToIcon("property_type") pComboPhysType:AddChoice(sT, sT, false, sI) end pComboPhysType.OnSelect = function(pnSelf, nInd, sVal, anyData) - local cqNames = asmlib.CacheQueryProperty(sVal) - if(cqNames) then pComboPhysName:Clear() + local qNames = asmlib.CacheQueryProperty(sVal) + if(qNames) then pComboPhysName:Clear() pComboPhysName:SetValue(languageGetPhrase("tool."..gsToolNameL..".phyname_def")) - for iNam = 1, cqNames.Size do - local sN, sI = cqNames[iNam], asmlib.ToIcon("property_name") + for iNam = 1, qNames.Size do + local sN, sI = qNames[iNam], asmlib.ToIcon("property_name") pComboPhysName:AddChoice(sN, sN, false, sI) end else asmlib.LogInstance("Property type <"..sVal.."> names mismatch",sLog) end @@ -2425,7 +2425,7 @@ function TOOL.BuildCPanel(CPanel) cvarsRemoveChangeCallback(sName, sName..sCall) cvarsAddChangeCallback(sName, function(sV, vO, vN) pComboPhysName:SetValue(vN) end, sName..sCall); - asmlib.LogTable(cqProperty, "Property", sLog) + asmlib.LogTable(qProperty, "Property", sLog) -- http://wiki.garrysmod.com/page/Category:DTextEntry local sName = asmlib.GetAsmConvar("bgskids", "NAM") From a52fe714b7e55486053714afa2db01028f3ed6d4 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Mon, 21 Oct 2024 15:46:22 +0300 Subject: [PATCH 037/114] Removed: Category hash table and current category reference Removed: Reverse-hash indexing for tree nodes Removed: `GetDirectory` using revers indexing. Utilize reference hash-jumps instead Updated: `SetDirectory` to match the new tree creation routine --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 20 ++-------------- .../gmod_tool/stools/trackassembly.lua | 24 +++++++++++-------- 3 files changed, 17 insertions(+), 29 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 6c9e0a07..114062e2 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.772") +asmlib.SetOpVar("TOOL_VERSION","8.773") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 6f31a055..a3cd3ca4 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -802,7 +802,6 @@ function InitBase(sName, sPurp) SetOpVar("ARRAY_GHOST",{Size=0, Slot=GetOpVar("MISS_NOMD")}) SetOpVar("TABLE_CATEGORIES",{}) SetOpVar("CLIPBOARD_TEXT","") - SetOpVar("TREE_KEYPANEL","#$@KEY&*PAN*&OBJ@$#") end; LogInstance("Success"); return true end @@ -1709,17 +1708,6 @@ function UpdateListView(pnListView,frUsed,nCount,sCol,sPat) LogInstance("Updated "..GetReport(frUsed.Size)); return true end -function GetDirectory(pCurr, vName) - if(not pCurr) then - LogInstance("Location invalid"); return nil end - local keyOb = GetOpVar("TREE_KEYPANEL") - local sName = tostring(vName or "") - sName = IsBlank(sName) and "Other" or sName - local pItem = pCurr[sName]; if(not IsHere(pItem)) then - LogInstance("Name missing "..GetReport(sName)); return nil end - return pItem, pItem[keyOb] -end - function SetExpandNode(pnBase) local bEx = pnBase:GetExpanded() if(inputIsKeyDown(KEY_LSHIFT)) then @@ -1729,18 +1717,14 @@ function SetExpandNode(pnBase) end end -function SetDirectory(pnBase, pCurr, vName) +function SetDirectory(pnBase, vName) if(not IsValid(pnBase)) then LogInstance("Base panel invalid"); return nil end - if(not pCurr) then - LogInstance("Location invalid"); return nil end local tSkin = pnBase:GetSkin() local sTool = GetOpVar("TOOLNAME_NL") - local keyOb = GetOpVar("TREE_KEYPANEL") local sName = tostring(vName or "") sName = (IsBlank(sName) and "Other" or sName) local pNode = pnBase:AddNode(sName) - pCurr[sName] = {}; pCurr[sName][keyOb] = pNode pNode:SetTooltip(languageGetPhrase("tool."..sTool..".subfolder")) pNode.Icon:SetImage(ToIcon("subfolder_item")) pNode.DoClick = function() SetExpandNode(pNode) end @@ -1749,7 +1733,7 @@ function SetDirectory(pnBase, pCurr, vName) SetClipboardText(pNode:GetText()) end pNode:UpdateColours(tSkin) - return pCurr[sName], pNode + return pNode end function SetDirectoryNode(pnBase, sName, sModel) diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 43b1b47a..031009a6 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2317,7 +2317,7 @@ function TOOL.BuildCPanel(CPanel) pTree:UpdateColours(drmSkin) -- Apply current skin CPanel:AddItem(pTree) -- Register it to the panel local defTable = makTab:GetDefinition() - local tType, tCats, tRoot = {}, {}, {Size = 0} + local tType, tRoot = {}, {Size = 0} for iC = 1, qPanel.Size do local vRec, bNow = qPanel[iC], true local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N @@ -2335,19 +2335,23 @@ function TOOL.BuildCPanel(CPanel) else SetClipboardText(pRoot:GetText()) end end pRoot:UpdateColours(drmSkin) - tType[sTyp] = pRoot + tType[sTyp] = {Base = pRoot, Node = {}} end -- Reset the primary tree node pointer - if(tType[sTyp]) then pItem = tType[sTyp] else pItem = pTree end + if(tType[sTyp]) then pItem = tType[sTyp].Base else pItem = pTree end -- Register the node associated with the track piece when is intended for later - local pCur = tCats[sTyp]; if(not asmlib.IsHere(pCur)) then - tCats[sTyp] = {}; pCur = tCats[sTyp] end -- Create category tree path - if(vRec.C) then -- When category for the track type is available + if(vRec.C and vRec.C.Size > 0) then -- When category for the track type is available + local tNode = tType[sTyp].Node -- Index the contend for the track type for iD = 1, vRec.C.Size do -- Generate the path to the track piece local sCat = vRec.C[iD] -- Read the category name - if(pCur[sCat]) then -- Jump next if already created - pCur, pItem = asmlib.GetDirectory(pCur, sCat) + local tCat = tNode[sCat] -- Index the internal sub-category + if(tCat) then -- Jump next if already created + pItem = tCat.Base -- Assume that the category is allocated + tNode = tCat.Node -- Jump to the next set of base nodes else -- Create a new sub-category for the incoming content - pCur, pItem = asmlib.SetDirectory(pItem, pCur, sCat) + tNode[sCat] = {}; tCat = tNode[sCat] -- Create node info + pItem = asmlib.SetDirectory(pItem, sCat) -- Create category + tCat.Base = pItem; tCat.Node = {} -- Allocate node info + tNode = tCat.Node -- Jump to the allocated set of base nodes end -- Create the last needed node regarding pItem end -- When the category has at least one element else -- Panel cannot categorize the entry add it to the list @@ -2363,7 +2367,7 @@ function TOOL.BuildCPanel(CPanel) local iRox = tRoot[iR] local vRec = qPanel[iRox] local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N - asmlib.SetDirectoryNode(tType[sTyp], sNam, sMod) + asmlib.SetDirectoryNode(tType[sTyp].Base, sNam, sMod) asmlib.LogInstance("Rooting item "..asmlib.GetReport(sTyp, sNam, sMod), sLog) end -- Process all the items without category defined asmlib.LogInstance("Found items #"..qPanel.Size, sLog) From d722951f2b4595c052eab24f4d90342b9907e2a7 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Mon, 21 Oct 2024 21:32:02 +0300 Subject: [PATCH 038/114] Fixed: Runtime error file exists missing the second argument Fixed: Tool tree panel sorts non-categorized items with priority --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 114062e2..23d6f0d4 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.773") +asmlib.SetOpVar("TOOL_VERSION","8.774") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index a3cd3ca4..8983bd9b 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -634,7 +634,7 @@ function SettingsLogs(sHash) if(not tLogs) then LogInstance("Missing "..GetReport(sKey)); return false end local sBas, sSet = GetOpVar("DIRPATH_BAS"), GetOpVar("DIRPATH_SET") local fName = (sBas..sSet..lbNam.."_sl"..sKey:lower()..".txt") - if(not fileExists(fName)) then + if(not fileExists(fName, "DATA")) then LogInstance("Discard "..GetReport(sKey, fName)); return false end local S = fileOpen(fName, "rb", "DATA"); tableEmpty(tLogs) if(not S) then LogInstance("Failure "..GetReport(sKey, fName)); return false end @@ -722,7 +722,11 @@ function InitBase(sName, sPurp) for i = 1, mathMax(uM, vM) do local uS = tostring(uC[i] or "") local vS = tostring(vC[i] or "") - if(uS ~= vS) then return uS < vS end + if(uS ~= vS) then + if(uS == "") then return false end + if(vS == "") then return true end + return uS < vS + end end if(u.N ~= v.N) then return u.N < v.N end if(u.M ~= v.M) then return u.M < v.M end @@ -3151,7 +3155,7 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Table create index fail "..GetReport(sqlLastError(), iQ, qInx), tabDef.Nick) return self:Remove(false) -- Clear table when index is not created end -- Check when the index query has passed - LogInstance("Table create index: "..v,tabDef.Nick) + LogInstance("Table create index: "..qInx,tabDef.Nick) end else LogInstance("Table create check fail "..GetReport(sqlLastError(), tQ.CREATE), tabDef.Nick) @@ -3649,7 +3653,7 @@ function ImportDSV(sTable, bComm, sPref, sDelim) LogInstance("("..fPref..")("..fName..") Open fail",sTable); return false end local sDelim = tostring(sDelim or "\t"):sub(1,1) local sLine, isEOF, nLen = "", false, defTab.Name:len() - if(sMoDB == "SQL") then sqlQuery(cmdTab.Begin) + if(sMoDB == "SQL") then sqlQuery(cmdTab.BEGIN) LogInstance("("..fPref..") Begin",sTable) end while(not isEOF) do sLine, isEOF = GetStringFile(F) if((not IsBlank(sLine)) and (not IsDisable(sLine))) then @@ -3660,7 +3664,7 @@ function ImportDSV(sTable, bComm, sPref, sDelim) end end end; F:Close() - if(sMoDB == "SQL") then sqlQuery(cmdTab.Commit) + if(sMoDB == "SQL") then sqlQuery(cmdTab.COMMIT) LogInstance("("..fPref..") Commit",sTable) end; LogInstance("("..fPref..") Success",sTable); return true end From 01e8ae69d9bb22b9f66462c0ba1bceaea2a6f7da Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Tue, 22 Oct 2024 13:45:55 +0300 Subject: [PATCH 039/114] Fixed: Data selection sequential errors due to comparing different data type Added: Context menu with selection options for the track selection tree Added: All tree panels now open the context tree menu when eligible to do so Added: Translations for Bulgarian and Russian Updated: Link to the silk icons to the proper Gmod link page Renamed: `SetSomethingNode` to `SetNodeSomething` --- lua/autorun/trackassembly_init.lua | 34 ++++++++- lua/trackassembly/trackasmlib.lua | 72 ++++++++++++++----- .../gmod_tool/stools/trackassembly.lua | 17 ++--- .../localization/bg/trackassembly.properties | 6 ++ .../localization/en/trackassembly.properties | 6 ++ .../localization/ru/trackassembly.properties | 6 ++ 6 files changed, 112 insertions(+), 29 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 23d6f0d4..44dff99f 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.774") +asmlib.SetOpVar("TOOL_VERSION","8.776") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -233,6 +233,30 @@ local conWorkMode = asmlib.GetContainer("WORK_MODE") conWorkMode:Push("OVER" ) -- Trace normal ray location piece flip-snap conWorkMode:Push("TURN" ) -- Produces smoother turns with Bezier curve +local conTreeRghClick = asmlib.GetContainer("TREE_VGUI") -- True for folders, false for content, nil for both + conTreeRghClick:Push({"tree_itmenu_cpmod", false, function(pnBase) SetClipboardText(pnBase.Content) end}) + conTreeRghClick:Push({"tree_itmenu_cpnam", nil , function(pnBase) SetClipboardText(pnBase:GetText()) end}) + conTreeRghClick:Push({"tree_itmenu_cppth", nil , + function(pnBase) + local pT, sP = asmlib.GetNodeTypeRoot(pnBase) + SetClipboardText(sP) + end + }) + conTreeRghClick:Push({"tree_itmenu_cpwid", nil, + function(pnBase) + local pT, sP = asmlib.GetNodeTypeRoot(pnBase) + SetClipboardText(asmlib.WorkshopID(pT:GetText())) + end + }) + conTreeRghClick:Push({"tree_itmenu_expnd", true, asmlib.SetNodeExpand}) + conTreeRghClick:Push({"tree_itmenu_opwid", nil , + function(pnBase) + local pT, sP = asmlib.GetNodeTypeRoot(pnBase) + local sID = asmlib.WorkshopID(pT:GetText()) + guiOpenURL(asmlib.GetOpVar("FORM_URLADDON"):format(sID)) + end + }) + ------------ CALLBACKS ------------ local conCallBack = asmlib.GetContainer("CALLBAC_FUNC") @@ -455,11 +479,17 @@ if(CLIENT) then else asmlib.LogInstance("Admin: "..asmlib.GetReport(pAdmn.Name), sLog) end end, gsToolPrefL.."lang") - -- http://www.famfamfam.com/lab/icons/silk/preview.php + -- https://wiki.facepunch.com/gmod/Silkicons asmlib.ToIcon(gsToolPrefU.."PIECES" , "database_connect") asmlib.ToIcon(gsToolPrefU.."ADDITIONS" , "bricks" ) asmlib.ToIcon(gsToolPrefU.."PHYSPROPERTIES", "wand" ) asmlib.ToIcon(gsToolPrefL.."context_menu" , "database_gear" ) + asmlib.ToIcon("tree_itmenu_expnd", "arrow_inout" ) + asmlib.ToIcon("tree_itmenu_cpnam", "script_go" ) + asmlib.ToIcon("tree_itmenu_cppth", "map_go" ) + asmlib.ToIcon("tree_itmenu_cpmod", "brick_go" ) + asmlib.ToIcon("tree_itmenu_cpwid", "key_go" ) + asmlib.ToIcon("tree_itmenu_opwid", "door_open" ) asmlib.ToIcon("subfolder_item" , "folder" ) asmlib.ToIcon("pn_externdb_bt1" , "database" ) asmlib.ToIcon("pn_externdb_bt2" , "folder_database" ) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 8983bd9b..84464225 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -66,6 +66,7 @@ local EntityID = Entity local tonumber = tonumber local tostring = tostring local GetConVar = GetConVar +local DermaMenu = DermaMenu local LocalPlayer = LocalPlayer local CreateConVar = CreateConVar local RunConsoleCommand = RunConsoleCommand @@ -1712,7 +1713,51 @@ function UpdateListView(pnListView,frUsed,nCount,sCol,sPat) LogInstance("Updated "..GetReport(frUsed.Size)); return true end -function SetExpandNode(pnBase) +function GetNodeTypeRoot(pnBase) + if(not IsValid(pnBase)) then + LogInstance("Base panel invalid"); return nil end + local pC, sP, pT = pnBase, "", nil + while(not pC:IsRootNode()) do + sP = " > "..pC:GetText()..sP + pT = pC; pC = pC:GetParentNode() + end; return pT, sP:sub(4, -1) +end + +function OpenNodeMenu(pnBase) + if(not IsValid(pnBase)) then + LogInstance("Base panel invalid"); return nil end + local pMenu = DermaMenu(false, pnBase) + if(not IsValid(pMenu)) then + LogInstance("Base menu invalid"); return nil end + local cMenu = GetContainer("TREE_VGUI") + local sT = GetOpVar("TOOLNAME_NL") + local pT = GetNodeTypeRoot(pnBase) + local sID = WorkshopID(pT:GetText()) + for iD = 1, cMenu:GetSize() do + local val = cMenu:Select(iD) + local nam, roo, fnc = val[1], val[2], val[3] + if(roo == nil or -- Available for both folder and node + (roo == false and pnBase.Content) or -- Node only + (roo == true and not pnBase.Content)) -- Folder only + then -- True for folders, false for content, nil for both + if(sID ~= nil or (sID == nil and nam:sub(-3, -1) ~= "wid")) then + local key = "tool."..sT.."."..nam + local pO = pMenu:AddOption(languageGetPhrase(key), + function() + local bS, vO = pcall(fnc, pnBase); if(not bS) then + LogInstance("Execute error: "..GetReport(iD, nam, vO)); return nil end + end) + if(not IsValid(pO)) then + LogInstance("Option invalid "..GetReport(iD, nam)); return nil end + pO:SetIcon(ToIcon(nam)) + end + end + end; pMenu:Open() +end + +function SetNodeExpand(pnBase) + if(not IsValid(pnBase)) then + LogInstance("Base panel invalid"); return nil end local bEx = pnBase:GetExpanded() if(inputIsKeyDown(KEY_LSHIFT)) then pnBase:ExpandRecurse(not bEx) @@ -1721,7 +1766,7 @@ function SetExpandNode(pnBase) end end -function SetDirectory(pnBase, vName) +function SetNodeDirectory(pnBase, vName) if(not IsValid(pnBase)) then LogInstance("Base panel invalid"); return nil end local tSkin = pnBase:GetSkin() @@ -1731,16 +1776,14 @@ function SetDirectory(pnBase, vName) local pNode = pnBase:AddNode(sName) pNode:SetTooltip(languageGetPhrase("tool."..sTool..".subfolder")) pNode.Icon:SetImage(ToIcon("subfolder_item")) - pNode.DoClick = function() SetExpandNode(pNode) end - pNode.Expander.DoClick = function() SetExpandNode(pNode) end - pNode.DoRightClick = function() - SetClipboardText(pNode:GetText()) - end + pNode.DoClick = function() SetNodeExpand(pNode) end + pNode.Expander.DoClick = function() SetNodeExpand(pNode) end + pNode.DoRightClick = function() OpenNodeMenu(pNode) end pNode:UpdateColours(tSkin) return pNode end -function SetDirectoryNode(pnBase, sName, sModel) +function SetNodeElement(pnBase, sName, sModel) if(not IsValid(pnBase)) then LogInstance("Base invalid " ..GetReport(sName, sModel)); return nil end local pNode = pnBase:AddNode(sName) @@ -1749,11 +1792,8 @@ function SetDirectoryNode(pnBase, sName, sModel) local tSkin = pnBase:GetSkin() local sTool = GetOpVar("TOOLNAME_NL") local sModC = languageGetPhrase("tool."..sTool..".model_con") - pNode.DoRightClick = function() - if(inputIsKeyDown(KEY_LSHIFT)) then - SetClipboardText(sModel) - else SetClipboardText(sName) end - end + pNode.DoRightClick = function() OpenNodeMenu(pNode) end + pNode.Content = sModel pNode:SetTooltip(sModC.." "..sModel) pNode.Icon:SetImage(ToIcon("model")) pNode.DoClick = function(pnSelf) @@ -3240,7 +3280,7 @@ function CacheQueryPiece(sModel) local coID, coP = makTab:GetColumnName(4), makTab:GetColumnName(5) local coO , coA = makTab:GetColumnName(6), makTab:GetColumnName(7) for iCnt = 1, stData.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[coID]) then + local qRec = qData[iCnt]; if(iCnt ~= tonumber(qRec[coID])) then LogInstance("Sequential mismatch "..GetReport(iCnt,sModel)); return nil end if(not IsHere(RegisterPOA(stData,iCnt, qRec[coP], qRec[coO], qRec[coA]))) then LogInstance("Cannot process offset "..GetReport(iCnt, sModel)); return nil @@ -3284,7 +3324,7 @@ function CacheQueryAdditions(sModel) stData.Slot, stData.Size = sModel, #qData local coMo, coID = makTab:GetColumnName(1), makTab:GetColumnName(4) for iCnt = 1, stData.Size do - local qRec = qData[iCnt]; qRec[coMo] = nil; if(iCnt ~= qRec[coID]) then + local qRec = qData[iCnt]; qRec[coMo] = nil; if(iCnt ~= tonumber(qRec[coID])) then LogInstance("Sequential mismatch "..GetReport(iCnt,sModel)); return nil end stData[iCnt] = {}; for col, val in pairs(qRec) do stData[iCnt][col] = val end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData @@ -3453,7 +3493,7 @@ function CacheQueryProperty(sType) local coID, coNm = makTab:GetColumnName(2), makTab:GetColumnName(3) stName.Slot, stName.Size = sType, #qData for iCnt = 1, stName.Size do - local qRec = qData[iCnt]; if(iCnt ~= qRec[coID]) then + local qRec = qData[iCnt]; if(iCnt ~= tonumber(qRec[coID])) then LogInstance("Sequential mismatch "..GetReport(iCnt,sType)); return nil end stName[iCnt] = qRec[coNm] -- Properties are stored as arrays of strings end diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 031009a6..ec17968f 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2326,14 +2326,9 @@ function TOOL.BuildCPanel(CPanel) local pRoot = pTree:AddNode(sTyp) -- No type folder made already pRoot:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".type")) pRoot.Icon:SetImage(asmlib.ToIcon(defTable.Name)) - pRoot.DoClick = function() asmlib.SetExpandNode(pRoot) end - pRoot.Expander.DoClick = function() asmlib.SetExpandNode(pRoot) end - pRoot.DoRightClick = function() - local sID = asmlib.WorkshopID(sTyp) - if(sID and sID:len() > 0 and inputIsKeyDown(KEY_LSHIFT)) then - guiOpenURL(asmlib.GetOpVar("FORM_URLADDON"):format(sID)) - else SetClipboardText(pRoot:GetText()) end - end + pRoot.DoClick = function() asmlib.SetNodeExpand(pRoot) end + pRoot.Expander.DoClick = function() asmlib.SetNodeExpand(pRoot) end + pRoot.DoRightClick = function() asmlib.OpenNodeMenu(pRoot) end pRoot:UpdateColours(drmSkin) tType[sTyp] = {Base = pRoot, Node = {}} end -- Reset the primary tree node pointer @@ -2349,7 +2344,7 @@ function TOOL.BuildCPanel(CPanel) tNode = tCat.Node -- Jump to the next set of base nodes else -- Create a new sub-category for the incoming content tNode[sCat] = {}; tCat = tNode[sCat] -- Create node info - pItem = asmlib.SetDirectory(pItem, sCat) -- Create category + pItem = asmlib.SetNodeDirectory(pItem, sCat) -- Create category tCat.Base = pItem; tCat.Node = {} -- Allocate node info tNode = tCat.Node -- Jump to the allocated set of base nodes end -- Create the last needed node regarding pItem @@ -2358,7 +2353,7 @@ function TOOL.BuildCPanel(CPanel) tRoot.Size = tRoot.Size + 1 -- Increment count to avoid calling # tableInsert(tRoot, iC); bNow = false -- Attach row ID to rooted items end -- When needs to be processed now just attach it to the tree - if(bNow) then asmlib.SetDirectoryNode(pItem, sNam, sMod) end + if(bNow) then asmlib.SetNodeElement(pItem, sNam, sMod) end -- SnapReview is ignored because a query must be executed for points count else asmlib.LogInstance("Ignoring item "..asmlib.GetReport(sTyp, sNam, sMod),sLog) end end @@ -2367,7 +2362,7 @@ function TOOL.BuildCPanel(CPanel) local iRox = tRoot[iR] local vRec = qPanel[iRox] local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N - asmlib.SetDirectoryNode(tType[sTyp].Base, sNam, sMod) + asmlib.SetNodeElement(tType[sTyp].Base, sNam, sMod) asmlib.LogInstance("Rooting item "..asmlib.GetReport(sTyp, sNam, sMod), sLog) end -- Process all the items without category defined asmlib.LogInstance("Found items #"..qPanel.Size, sLog) diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index 47399aed..432c9a5f 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -161,6 +161,12 @@ tool.trackassembly.pn_routine_lb3=Тип tool.trackassembly.pn_routine_lb4=Име tool.trackassembly.pn_display_lb=Дисплей за парчето tool.trackassembly.pn_pattern_lb=Напишете шаблон +tool.trackassembly.tree_itmenu_cpnam=Копирай името +tool.trackassembly.tree_itmenu_cppth=Копирай пътя +tool.trackassembly.tree_itmenu_cpmod=Копирай модела +tool.trackassembly.tree_itmenu_cpwid=Копирай WID +tool.trackassembly.tree_itmenu_expnd=Разгъни възела +tool.trackassembly.tree_itmenu_opwid=Страница на работилницата tool.trackassembly.sizeucs=Мащаб за показваните координатни системи tool.trackassembly.sizeucs_con=Мащаб UCS\: tool.trackassembly.maxstatts=Дефинира след колко опита за натрупване на парче ще се изведе грешка diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 18d0d879..62225c0b 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -161,6 +161,12 @@ tool.trackassembly.pn_routine_lb3=Type tool.trackassembly.pn_routine_lb4=Name tool.trackassembly.pn_display_lb=Piece display tool.trackassembly.pn_pattern_lb=Write pattern +tool.trackassembly.tree_itmenu_cpnam=Copy name +tool.trackassembly.tree_itmenu_cppth=Copy path +tool.trackassembly.tree_itmenu_cpmod=Copy model +tool.trackassembly.tree_itmenu_cpwid=Copy WID +tool.trackassembly.tree_itmenu_expnd=Expand node +tool.trackassembly.tree_itmenu_opwid=Workshop page tool.trackassembly.sizeucs=Scale set for the coordinate systems displayed tool.trackassembly.sizeucs_con=Scale UCS\: tool.trackassembly.maxstatts=Defines how many stack attempts the script will try before failing diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index 55e13c0d..8ccdce2c 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -115,6 +115,12 @@ tool.trackassembly.pn_routine_lb3=Тип tool.trackassembly.pn_routine_lb4=Имя tool.trackassembly.pn_display_lb=Показать кусок tool.trackassembly.pn_pattern_lb=Напишите шаблон +tool.trackassembly.tree_itmenu_cpnam=Копировать имя +tool.trackassembly.tree_itmenu_cppth=Копировать путь +tool.trackassembly.tree_itmenu_cpmod=Копировать модель +tool.trackassembly.tree_itmenu_cpwid=Копировать WID +tool.trackassembly.tree_itmenu_expnd=Развернуть узел +tool.trackassembly.tree_itmenu_opwid=Страница мастерской tool.trackassembly.buttonas<>=Уменьшить/Увеличить tool.trackassembly.buttonas+/-=Начение по умолчаниюз tool.trackassembly.buttonas@M=Запомнить стоимость From dbb27f6c37ba5ff51816dd1cda5518874791c070 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Tue, 22 Oct 2024 14:18:09 +0300 Subject: [PATCH 040/114] Renamed: `Element` to `Content` --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 2 +- lua/weapons/gmod_tool/stools/trackassembly.lua | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 44dff99f..33a2fded 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.776") +asmlib.SetOpVar("TOOL_VERSION","8.777") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 84464225..595ea315 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1783,7 +1783,7 @@ function SetNodeDirectory(pnBase, vName) return pNode end -function SetNodeElement(pnBase, sName, sModel) +function SetNodeContent(pnBase, sName, sModel) if(not IsValid(pnBase)) then LogInstance("Base invalid " ..GetReport(sName, sModel)); return nil end local pNode = pnBase:AddNode(sName) diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index ec17968f..5c4df3d7 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2353,7 +2353,7 @@ function TOOL.BuildCPanel(CPanel) tRoot.Size = tRoot.Size + 1 -- Increment count to avoid calling # tableInsert(tRoot, iC); bNow = false -- Attach row ID to rooted items end -- When needs to be processed now just attach it to the tree - if(bNow) then asmlib.SetNodeElement(pItem, sNam, sMod) end + if(bNow) then asmlib.SetNodeContent(pItem, sNam, sMod) end -- SnapReview is ignored because a query must be executed for points count else asmlib.LogInstance("Ignoring item "..asmlib.GetReport(sTyp, sNam, sMod),sLog) end end @@ -2362,7 +2362,7 @@ function TOOL.BuildCPanel(CPanel) local iRox = tRoot[iR] local vRec = qPanel[iRox] local sMod, sTyp, sNam = vRec.M, vRec.T, vRec.N - asmlib.SetNodeElement(tType[sTyp].Base, sNam, sMod) + asmlib.SetNodeContent(tType[sTyp].Base, sNam, sMod) asmlib.LogInstance("Rooting item "..asmlib.GetReport(sTyp, sNam, sMod), sLog) end -- Process all the items without category defined asmlib.LogInstance("Found items #"..qPanel.Size, sLog) From d7555699485ab8c71ceb0cc9b77553e6de3687d1 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Tue, 22 Oct 2024 22:19:46 +0300 Subject: [PATCH 041/114] Fixed: Incorrect indexing for DSV synchronization raises errors in track pack scripts Updated: Trace root information being handled better Updated: DSV databases can show the internal error when present ( coding style ) Added: Tooltips for category/model nodes label/icon/expander/validation Added: Return empty sort set when providing empty table. Skip processing Added: Move validation to the hook info tracker --- lua/autorun/trackassembly_init.lua | 4 +- lua/autorun/z_autorun_[shinji85_s_rails].lua | 72 ++++++++++++-------- lua/trackassembly/trackasmlib.lua | 44 +++++++----- 3 files changed, 72 insertions(+), 48 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 33a2fded..3e6e359a 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.777") +asmlib.SetOpVar("TOOL_VERSION","8.778") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -238,7 +238,7 @@ local conTreeRghClick = asmlib.GetContainer("TREE_VGUI") -- True for folders, fa conTreeRghClick:Push({"tree_itmenu_cpnam", nil , function(pnBase) SetClipboardText(pnBase:GetText()) end}) conTreeRghClick:Push({"tree_itmenu_cppth", nil , function(pnBase) - local pT, sP = asmlib.GetNodeTypeRoot(pnBase) + local pT, sP = asmlib.GetNodeTypeRoot(pnBase, 1) SetClipboardText(sP) end }) diff --git a/lua/autorun/z_autorun_[shinji85_s_rails].lua b/lua/autorun/z_autorun_[shinji85_s_rails].lua index f9cff082..38cc13fa 100644 --- a/lua/autorun/z_autorun_[shinji85_s_rails].lua +++ b/lua/autorun/z_autorun_[shinji85_s_rails].lua @@ -19,6 +19,9 @@ local asmlib = trackasmlib ]] local myAddon = "Shinji85's Rails" -- Your addon name goes here +-- Log messages identifier. Leave DSV here or change it if you like +local mySource = "DSV" + --[[ * Change this if you want to use different in-game type * You can also use multiple types myType1, myType2, @@ -36,7 +39,7 @@ local myType = myAddon -- The type your addon resides in the tool with * https://wiki.facepunch.com/gmod/Global.ErrorNoHalt * https://wiki.facepunch.com/gmod/Global.ErrorNoHaltWithStack ]] -local myError = ErrorNoHalt +local Error = ErrorNoHaltWithStack -- This is used for addon relation prefix. Fingers away from it local myPrefix = myAddon:gsub("[^%w]","_") -- Addon prefix @@ -45,7 +48,8 @@ local myPrefix = myAddon:gsub("[^%w]","_") -- Addon prefix -- Do not touch this also, it is used for debugging local myScript = tostring(debug.getinfo(1).source or "N/A") myScript = "@"..myScript:gsub("^%W+", ""):gsub("\\","/") - + mySource = tostring(mySource or ""):gsub("^%W+", "") + mySource = (asmlib.IsBlank(mySource) and "DSV" or mySource) --[[ * This function defines what happens when there is an error present * Usually you can tell Gmod that you want it to generate an error @@ -53,13 +57,13 @@ local myScript = tostring(debug.getinfo(1).source or "N/A") * have to change the function name in lots of places * when you need it to do something else. --]] -local function myThrowError(vMesg) +local function ThrowError(vMesg) local sMesg = (myScript.." > ("..myAddon.."): "..tostring(vMesg)) -- Make sure the message is string - if(asmlib) then asmlib.LogInstance(sMesg) end; myError(sMesg) -- Output the message into the logs + if(asmlib) then asmlib.LogInstance(sMesg, mySource) end; Error(sMesg.."\n") -- Output the message into the logs end -- There is something to error about stop the execution and report it -if(not asmlib) then myThrowError("Failed loading the required module!"); return end +if(not asmlib) then ThrowError("Failed loading the required module!"); return end --[[ * This logic statement is needed for reporting the error @@ -80,18 +84,19 @@ if(not asmlib) then myThrowError("Failed loading the required module!"); return * sPref > An export file custom prefix. For synchronizing it must be related to your addon * sDelim > The delimiter used by the server/client ( default is a tab symbol ) ]]-- -local function mySyncTable(sName, tData, bRepl) +local function SyncTable(sName, tData, bRepl) + local sRep = asmlib.GetReport(myPrefix, sName) -- Generate report if error is present if(not asmlib.IsEmpty(tData)) then -- Something to be processed. Do stuff when the table is not empty - asmlib.LogInstance("SynchronizeDSV START <"..myPrefix..">") -- Signal start synchronization + asmlib.LogInstance("Synchronization START "..sRep, mySource) -- Signal start synchronization if(not asmlib.SynchronizeDSV(sName, tData, bRepl, myPrefix)) then -- Attempt to synchronize - myThrowError("Failed to synchronize: "..sName) -- Raise error when fails to sync tracks data + ThrowError("Failed to synchronize content") -- Raise error when fails to sync tracks data else -- Successful. You are saving me from all the work for manually generating these - asmlib.LogInstance("TranslateDSV START <"..myPrefix..">") -- Signal start translation + asmlib.LogInstance("Translation START "..sRep, mySource) -- Signal start translation if(not asmlib.TranslateDSV(sName, myPrefix)) then -- Attempt to translate the DSV to Lua source - myThrowError("Failed to translate DSV: "..sName) end -- Raise error when fails - asmlib.LogInstance("TranslateDSV OK <"..myPrefix..">") -- Translation is successful + ThrowError("Failed to translate content") end -- Raise error when fails + asmlib.LogInstance("Translation OK "..sRep, mySource) -- Translation is successful end -- Now we have Lua inserts and DSV. Otherwise sent empty table and print status in logs - else asmlib.LogInstance("SynchronizeDSV EMPTY <"..myPrefix..">") end -- Nothing to be done + else asmlib.LogInstance("Synchronization EMPTY "..sRep, mySource) end -- Nothing to be done end --[[ @@ -106,15 +111,16 @@ end * sDelim > The delimiter to be used for processing ( default tab ) * bSkip > Skip addition for the DSV prefix if exists ( default `false` ) ]]-- -local function myRegisterDSV(bSkip) - asmlib.LogInstance("RegisterDSV START <"..myPrefix..">") +local function RegisterDSV(bSkip) + local sRep = asmlib.GetReport(myPrefix, bSkip) -- Generate report if error is present + asmlib.LogInstance("Registration START "..sRep, mySource) if(bSkip) then -- Your DSV must be registered only once when loading for the first time - asmlib.LogInstance("RegisterDSV SKIP <"..myPrefix..">") + asmlib.LogInstance("Registration SKIP "..sRep, mySource) else -- If the locking file is not located that means this is the first run of your script if(not asmlib.RegisterDSV(myScript, myPrefix)) then -- Register the DSV prefix and check for error - myThrowError("Failed to register DSV") -- Throw the error if fails + ThrowError("Failed to register content") -- Throw the error if fails end -- Third argument is the delimiter. The default tab is used - asmlib.LogInstance("RegisterDSV OK <"..myPrefix..">") + asmlib.LogInstance("Registration OK "..sRep, mySource) end end @@ -128,15 +134,16 @@ end * sPref > An export file custom prefix. For synchronizing * it must be related to your addon ( default is instance prefix ) ]]-- -local function myExportCategory(tCatg) - asmlib.LogInstance("ExportCategory START <"..myPrefix..">") +local function ExportCategory(tCatg) + local sRep = asmlib.GetReport(myPrefix, bSkip) -- Generate report if error is present + asmlib.LogInstance("Category export START "..sRep, mySource) if(CLIENT) then -- Category handling is client side only if(not asmlib.IsEmpty(tCatg)) then if(not asmlib.ExportCategory(3, tCatg, myPrefix)) then - myThrowError("Failed to synchronize category") - end; asmlib.LogInstance("ExportCategory OK <"..myPrefix..">") - else asmlib.LogInstance("ExportCategory SKIP <"..myPrefix..">") end - else asmlib.LogInstance("ExportCategory SERVER <"..myPrefix..">") end + ThrowError("Failed to synchronize category") + end; asmlib.LogInstance("Category export OK "..sRep, mySource) + else asmlib.LogInstance("Category export SKIP "..sRep, mySource) end + else asmlib.LogInstance("Category export SERVER "..sRep, mySource) end end -- Store a reference to disable symbol @@ -162,13 +169,14 @@ local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. local myFlag = file.Exists(myDsv, "DATA") -- Tell TA what custom script we just called don't touch it -asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}") +asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}", mySource) -- Register the addon to the workshop ID list asmlib.WorkshopID(myAddon, "326640186") -- Register the addon to the plugable DSV list -myRegisterDSV(myFlag) +local bS, vO = pcall(RegisterDSV, myFlag) +if(not bS) then ThrowError("Retistration error: "..vO) end --[[ * This is used if you want to make internal categories for your addon @@ -195,7 +203,8 @@ local myCategory = { } -- Register the addon category to the plugable DSV list -myExportCategory(myCategory) +local bS, vO = pcall(ExportCategory, myCategory) +if(not bS) then ThrowError("Category error: "..vO) end --[[ * Create a table and populate it as shown below @@ -344,7 +353,8 @@ local myPieces = { } -- Register the addon PIECES to the plugable DSV list -mySyncTable("PIECES", myPieces, true) +local bS, vO = pcall(SyncTable, "PIECES", myPieces, true) +if(not bS) then ThrowError("PIECES error: "..vO) end --[[ * Create a table and populate it as shown below @@ -392,7 +402,8 @@ local myAdditions = { } -- Register the addon ADDITIONS to the plugable DSV list -mySyncTable("ADDITIONS", myAdditions, true) +local bS, vO = pcall(SyncTable, "ADDITIONS", myAdditions, true) +if(not bS) then ThrowError("ADDITIONS error: "..vO) end --[[ * Create a table and populate it as shown below @@ -413,6 +424,7 @@ mySyncTable("ADDITIONS", myAdditions, true) local myPhysproperties = {} -- Register the addon PHYSPROPERTIES to the plugable DSV list -mySyncTable("PHYSPROPERTIES", myPhysproperties, true) +local bS, vO = pcall(SyncTable, "PHYSPROPERTIES", myPhysproperties, true) +if(not bS) then ThrowError("PHYSPROPERTIES error: "..vO) end -asmlib.LogInstance("<<< "..myScript) +asmlib.LogInstance("<<< "..myScript, mySource) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 595ea315..12e4745e 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -807,6 +807,7 @@ function InitBase(sName, sPurp) SetOpVar("ARRAY_GHOST",{Size=0, Slot=GetOpVar("MISS_NOMD")}) SetOpVar("TABLE_CATEGORIES",{}) SetOpVar("CLIPBOARD_TEXT","") + SetOpVar("FMNODE_PATH","%s>%s") end; LogInstance("Success"); return true end @@ -1713,14 +1714,18 @@ function UpdateListView(pnListView,frUsed,nCount,sCol,sPat) LogInstance("Updated "..GetReport(frUsed.Size)); return true end -function GetNodeTypeRoot(pnBase) +function GetNodeTypeRoot(pnBase, iRep, sSym) if(not IsValid(pnBase)) then LogInstance("Base panel invalid"); return nil end local pC, sP, pT = pnBase, "", nil + local sFmp = GetOpVar("FMNODE_PATH") + local sSym = tostring(sSym or " "):sub(1,1) + local sRep = sSym:rep(tonumber(iRep) or 0) + local sD = sFmp:format(sRep, sRep) while(not pC:IsRootNode()) do - sP = " > "..pC:GetText()..sP + sP = sD..pC:GetText()..sP pT = pC; pC = pC:GetParentNode() - end; return pT, sP:sub(4, -1) + end; return pT, sP:sub(sD:len()+1, -1) end function OpenNodeMenu(pnBase) @@ -1767,17 +1772,22 @@ function SetNodeExpand(pnBase) end function SetNodeDirectory(pnBase, vName) - if(not IsValid(pnBase)) then - LogInstance("Base panel invalid"); return nil end - local tSkin = pnBase:GetSkin() - local sTool = GetOpVar("TOOLNAME_NL") + if(not IsValid(pnBase)) then LogInstance("Base invalid " + ..GetReport(pnBase, sName)); return nil end local sName = tostring(vName or "") sName = (IsBlank(sName) and "Other" or sName) local pNode = pnBase:AddNode(sName) - pNode:SetTooltip(languageGetPhrase("tool."..sTool..".subfolder")) + if(not IsValid(pNode)) then LogInstance("Node invalid " + ..GetReport(pnBase:GetText(), sName)); return nil end + local tSkin = pnBase:GetSkin() + local sTool = GetOpVar("TOOLNAME_NL") + local pRoot, sPath = GetNodeTypeRoot(pNode, 1) + local sCatC = languageGetPhrase("tool."..sTool..".subfolder_con") + pNode:SetTooltip(sCatC.." "..sPath) pNode.Icon:SetImage(ToIcon("subfolder_item")) pNode.DoClick = function() SetNodeExpand(pNode) end pNode.Expander.DoClick = function() SetNodeExpand(pNode) end + pNode.Expander:SetTooltip(languageGetPhrase("tool."..sTool..".subfolder")) pNode.DoRightClick = function() OpenNodeMenu(pNode) end pNode:UpdateColours(tSkin) return pNode @@ -1785,10 +1795,10 @@ end function SetNodeContent(pnBase, sName, sModel) if(not IsValid(pnBase)) then LogInstance("Base invalid " - ..GetReport(sName, sModel)); return nil end + ..GetReport(pnBase, sName, sModel)); return nil end local pNode = pnBase:AddNode(sName) if(not IsValid(pNode)) then LogInstance("Node invalid " - ..GetReport(sName, sModel)); return nil end + ..GetReport(pnBase:GetText(), sName, sModel)); return nil end local tSkin = pnBase:GetSkin() local sTool = GetOpVar("TOOLNAME_NL") local sModC = languageGetPhrase("tool."..sTool..".model_con") @@ -2312,6 +2322,7 @@ end function PrioritySort(tSrc, vPrn, ...) local tC = (istable(vPrn) and vPrn or {vPrn, ...}) local tS = {Size = 0}; tC.Size = #tC + if(IsEmpty(tSrc)) then return tS end for key, rec in pairs(tSrc) do -- Scan the entire table tS.Size = tS.Size + 1 -- Allocate key/record and store tableInsert(tS, {Key = key, Rec = rec}) -- New table @@ -3798,7 +3809,7 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) LogInstance("("..fPref.."@"..sTable..")("..fName..") Open fail"); return false end O:Write("# "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") O:Write("# "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") - for iKey = 1, tSort.Size do local key = tSort[iKey].Rec + for iKey = 1, tSort.Size do local key = tSort[iKey].Key local vK = makTab:Match(key,1,true,"\"",true); if(not IsHere(vK)) then O:Flush(); O:Close(); LogInstance("("..fPref.."@"..sTable.."@"..tostring(key)..") Write matching PK failed"); return false end local fRec, sCash, sData = fData[key], defTab.Name..sDelim..vK, "" @@ -5301,20 +5312,21 @@ end ]] function GetHookInfo(sW) if(SERVER) then return nil end + local sTo = GetOpVar("TOOLNAME_NL") local sDe = GetOpVar("TOOL_DEFMODE") local sWe = tostring(sW or sDe) local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then LogInstance("Player invalid"); return nil end local acSw = oPly:GetActiveWeapon(); if(not IsValid(acSw)) then LogInstance("Swep invalid"); return nil end - if(acSw:GetClass() ~= sWe) then - LogInstance("Swep other "..GetReport(sWe)); return nil end + local uWe = acSw:GetClass(); if(uWe ~= sWe) then + LogInstance("Swep other "..GetReport(sWe, uWe)); return nil end if(sWe ~= sDe) then return oPly, acSw end - if(acSw:GetMode() ~= GetOpVar("TOOLNAME_NL")) then - LogInstance("Tool different"); return nil end + local uTo = acSw:GetMode(); if(uTo ~= sTo) then + LogInstance("Mode different "..GetReport(sTo, uTo)); return nil end -- Here player is holding the track assembly tool local acTo = acSw:GetToolObject(); if(not acTo) then - LogInstance("Tool invalid"); return nil end + LogInstance("Tool invalid "..GetReport(uWe, uTo)); return nil end return oPly, acSw, acTo end From 89338d88b065385261f3cba771a054dc03ead1b5 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 23 Oct 2024 18:20:46 +0300 Subject: [PATCH 042/114] Updated: General usage of one error function preserving the stack Updated: Quit executing the script if module load fails --- lua/autorun/trackassembly_init.lua | 2 +- lua/autorun/z_autorun_[shinji85_s_rails].lua | 19 +++++-------------- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 3e6e359a..9037371f 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.778") +asmlib.SetOpVar("TOOL_VERSION","8.779") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/autorun/z_autorun_[shinji85_s_rails].lua b/lua/autorun/z_autorun_[shinji85_s_rails].lua index 38cc13fa..369946cc 100644 --- a/lua/autorun/z_autorun_[shinji85_s_rails].lua +++ b/lua/autorun/z_autorun_[shinji85_s_rails].lua @@ -9,7 +9,8 @@ ]]-- -- Local reference to the module. -local asmlib = trackasmlib +local asmlib = trackasmlib; if(not asmlib) then -- Module present + ErrorNoHaltWithStack("TOOL: Track assembly tool module fail!\n"); return end --[[ * This is your addon name. It is mandatory and it must be string. @@ -30,17 +31,6 @@ local mySource = "DSV" ]]-- local myType = myAddon -- The type your addon resides in the tool with ---[[ - * For actually produce an error you can replace the /print/ - * statement with one of following API calls: - * https://wiki.facepunch.com/gmod/Global.print - * https://wiki.facepunch.com/gmod/Global.error - * https://wiki.facepunch.com/gmod/Global.Error - * https://wiki.facepunch.com/gmod/Global.ErrorNoHalt - * https://wiki.facepunch.com/gmod/Global.ErrorNoHaltWithStack -]] -local Error = ErrorNoHaltWithStack - -- This is used for addon relation prefix. Fingers away from it local myPrefix = myAddon:gsub("[^%w]","_") -- Addon prefix @@ -58,8 +48,9 @@ local myScript = tostring(debug.getinfo(1).source or "N/A") * when you need it to do something else. --]] local function ThrowError(vMesg) - local sMesg = (myScript.." > ("..myAddon.."): "..tostring(vMesg)) -- Make sure the message is string - if(asmlib) then asmlib.LogInstance(sMesg, mySource) end; Error(sMesg.."\n") -- Output the message into the logs + local sMesg = (myScript.." > ("..myAddon.."): "..tostring(vMesg)) -- Convert to string + if(asmlib) then asmlib.LogInstance(sMesg, mySource) end -- Update the tool logs + ErrorNoHaltWithStack(sMesg.."\n") -- Produce an error without breaking the stack end -- There is something to error about stop the execution and report it From 1578ca956411c74ac26718e427d5e6cec72d66ec Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Wed, 23 Oct 2024 22:04:01 +0300 Subject: [PATCH 043/114] Fixed: Frequent pieces panel not working Fixed: Phys properties generating sequential errors Moved: Tree dedicated context menu to its function Added: Mode tree context menu translation and icons Updated: Sorting function `VCOMPARE_SDAT` TODO: Move Local machine data manipulation to DSV tab of OPEN_EXTERNDB ( utilize list view scroll-bar ) --- lua/autorun/trackassembly_init.lua | 41 ++----- lua/trackassembly/trackasmlib.lua | 111 +++++++++--------- .../localization/bg/trackassembly.properties | 15 ++- .../localization/en/trackassembly.properties | 15 ++- .../localization/ru/trackassembly.properties | 15 ++- 5 files changed, 94 insertions(+), 103 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 9037371f..3ca955b1 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.779") +asmlib.SetOpVar("TOOL_VERSION","8.780") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -233,30 +233,6 @@ local conWorkMode = asmlib.GetContainer("WORK_MODE") conWorkMode:Push("OVER" ) -- Trace normal ray location piece flip-snap conWorkMode:Push("TURN" ) -- Produces smoother turns with Bezier curve -local conTreeRghClick = asmlib.GetContainer("TREE_VGUI") -- True for folders, false for content, nil for both - conTreeRghClick:Push({"tree_itmenu_cpmod", false, function(pnBase) SetClipboardText(pnBase.Content) end}) - conTreeRghClick:Push({"tree_itmenu_cpnam", nil , function(pnBase) SetClipboardText(pnBase:GetText()) end}) - conTreeRghClick:Push({"tree_itmenu_cppth", nil , - function(pnBase) - local pT, sP = asmlib.GetNodeTypeRoot(pnBase, 1) - SetClipboardText(sP) - end - }) - conTreeRghClick:Push({"tree_itmenu_cpwid", nil, - function(pnBase) - local pT, sP = asmlib.GetNodeTypeRoot(pnBase) - SetClipboardText(asmlib.WorkshopID(pT:GetText())) - end - }) - conTreeRghClick:Push({"tree_itmenu_expnd", true, asmlib.SetNodeExpand}) - conTreeRghClick:Push({"tree_itmenu_opwid", nil , - function(pnBase) - local pT, sP = asmlib.GetNodeTypeRoot(pnBase) - local sID = asmlib.WorkshopID(pT:GetText()) - guiOpenURL(asmlib.GetOpVar("FORM_URLADDON"):format(sID)) - end - }) - ------------ CALLBACKS ------------ local conCallBack = asmlib.GetContainer("CALLBAC_FUNC") @@ -484,12 +460,15 @@ if(CLIENT) then asmlib.ToIcon(gsToolPrefU.."ADDITIONS" , "bricks" ) asmlib.ToIcon(gsToolPrefU.."PHYSPROPERTIES", "wand" ) asmlib.ToIcon(gsToolPrefL.."context_menu" , "database_gear" ) - asmlib.ToIcon("tree_itmenu_expnd", "arrow_inout" ) - asmlib.ToIcon("tree_itmenu_cpnam", "script_go" ) - asmlib.ToIcon("tree_itmenu_cppth", "map_go" ) - asmlib.ToIcon("tree_itmenu_cpmod", "brick_go" ) - asmlib.ToIcon("tree_itmenu_cpwid", "key_go" ) - asmlib.ToIcon("tree_itmenu_opwid", "door_open" ) + asmlib.ToIcon("treemenu_cpy" , "page_copy" ) + asmlib.ToIcon("treemenu_cpy_mod", "brick_go" ) + asmlib.ToIcon("treemenu_cpy_typ", "database_go" ) + asmlib.ToIcon("treemenu_cpy_nam", "script_go" ) + asmlib.ToIcon("treemenu_cpy_pth", "map_go" ) + asmlib.ToIcon("treemenu_ws" , "cart" ) + asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) + asmlib.ToIcon("treemenu_ws_opp" , "world" ) + asmlib.ToIcon("treemenu_expand" , "zoom" ) asmlib.ToIcon("subfolder_item" , "folder" ) asmlib.ToIcon("pn_externdb_bt1" , "database" ) asmlib.ToIcon("pn_externdb_bt2" , "folder_database" ) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 12e4745e..8ff722bc 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -82,6 +82,7 @@ local SafeRemoveEntityDelayed = SafeRemoveEntityDelayed local osClock = os and os.clock local osDate = os and os.date local bitBand = bit and bit.band +local guiOpenURL = gui and gui.OpenURL local sqlQuery = sql and sql.Query local sqlLastError = sql and sql.LastError local sqlTableExists = sql and sql.TableExists @@ -123,6 +124,7 @@ local undoAddEntity = undo and undo.AddEntity local undoSetPlayer = undo and undo.SetPlayer local undoSetCustomUndoText = undo and undo.SetCustomUndoText local inputIsKeyDown = input and input.IsKeyDown +local inputGetCursorPos = input and input.GetCursorPos local timerStop = timer and timer.Stop local timerStart = timer and timer.Start local timerSimple = timer and timer.Simple @@ -733,10 +735,11 @@ function InitBase(sName, sPurp) if(u.M ~= v.M) then return u.M < v.M end return false end) SetOpVar("VCOMPARE_SDAT", function(u, v, c) - for iD = 1, c.Size do local iR = c[iD] + for iD = 1, c.Size do + local iR = c[iD] local uR, vR = u.Rec, v.Rec - if(uR[iR] < vR[iR]) then return true end - if(uR[iR] > vR[iR]) then return false end + local uV, vV = uR[iR], vR[iR] + if(uV ~= vV) then return uV < vV end end; return false; end) SetOpVar("VCOMPARE_SKEY", function(u, v) return (u.Key < v.Key) end) SetOpVar("VCOMPARE_SREC", function(u, v) return (u.Rec < v.Rec) end) @@ -1661,15 +1664,15 @@ function AddLineListView(pnListView,frUsed,ivNdex) LogInstance("Missing data"); return false end local iNdex = tonumber(ivNdex); if(not IsHere(iNdex)) then LogInstance("Index mismatch "..GetReport(ivNdex)); return false end - local tValue = frUsed[iNdex]; if(not IsHere(tValue)) then + local tInfo = frUsed[iNdex]; if(not IsHere(tInfo)) then LogInstance("Missing data on index "..GetReport(iNdex)); return false end local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then LogInstance("Missing table builder"); return nil end - local sModel = tValue.Table[makTab:GetColumnName(1)] - local sType = tValue.Table[makTab:GetColumnName(2)] - local sName = tValue.Table[makTab:GetColumnName(3)] - local nAct = tValue.Table[makTab:GetColumnName(4)] - local nUsed = mathRound(tValue.Value,3) + local sModel = tInfo.Data[makTab:GetColumnName(1)] + local sType = tInfo.Data[makTab:GetColumnName(2)] + local sName = tInfo.Data[makTab:GetColumnName(3)] + local nAct = tInfo.Data[makTab:GetColumnName(4)] + local nUsed = mathRound(tInfo.Time,3) local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel) pnLine:SetTooltip(sModel) return true @@ -1704,7 +1707,7 @@ function UpdateListView(pnListView,frUsed,nCount,sCol,sPat) if(not AddLineListView(pnListView,frUsed,iCnt)) then LogInstance("Failed to add line on "..GetReport(iCnt)); return false end else - local sDat = tostring(frUsed[iCnt].Table[sCol] or "") + local sDat = tostring(frUsed[iCnt].Data[sCol] or "") if(sDat:find(sPat)) then if(not AddLineListView(pnListView,frUsed,iCnt)) then LogInstance("Failed to add line "..GetReport(iCnt, sDat, sPat, sCol)); return false end @@ -1734,30 +1737,38 @@ function OpenNodeMenu(pnBase) local pMenu = DermaMenu(false, pnBase) if(not IsValid(pMenu)) then LogInstance("Base menu invalid"); return nil end - local cMenu = GetContainer("TREE_VGUI") - local sT = GetOpVar("TOOLNAME_NL") - local pT = GetNodeTypeRoot(pnBase) + local pT, sP = GetNodeTypeRoot(pnBase, 1) + if(not IsValid(pT)) then + LogInstance("Base root invalid"); return nil end + local sM, sI = GetOpVar("TOOLNAME_NL"), "treemenu_" + local sT = "tool."..sM.."."..sI local sID = WorkshopID(pT:GetText()) - for iD = 1, cMenu:GetSize() do - local val = cMenu:Select(iD) - local nam, roo, fnc = val[1], val[2], val[3] - if(roo == nil or -- Available for both folder and node - (roo == false and pnBase.Content) or -- Node only - (roo == true and not pnBase.Content)) -- Folder only - then -- True for folders, false for content, nil for both - if(sID ~= nil or (sID == nil and nam:sub(-3, -1) ~= "wid")) then - local key = "tool."..sT.."."..nam - local pO = pMenu:AddOption(languageGetPhrase(key), - function() - local bS, vO = pcall(fnc, pnBase); if(not bS) then - LogInstance("Execute error: "..GetReport(iD, nam, vO)); return nil end - end) - if(not IsValid(pO)) then - LogInstance("Option invalid "..GetReport(iD, nam)); return nil end - pO:SetIcon(ToIcon(nam)) - end - end - end; pMenu:Open() + -- Copy node information + local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."cpy")) + if(not IsValid(pIn)) then + LogInstance("Base copy invalid"); return nil end + pOp:SetIcon(ToIcon(sI.."cpy")) + if(pnBase.Content) then + pIn:AddOption(languageGetPhrase(sT.."cpy_mod"), function() SetClipboardText(pnBase.Content) end):SetIcon(ToIcon(sI.."cpy_mod")) + end + pIn:AddOption(languageGetPhrase(sT.."cpy_typ"), function() SetClipboardText(pT:GetText()) end):SetIcon(ToIcon(sI.."cpy_typ")) + pIn:AddOption(languageGetPhrase(sT.."cpy_nam"), function() SetClipboardText(pnBase:GetText()) end):SetIcon(ToIcon(sI.."cpy_nam")) + pIn:AddOption(languageGetPhrase(sT.."cpy_pth"), function() SetClipboardText(sP) end):SetIcon(ToIcon(sI.."cpy_pth")) + -- Handle workshop + if(sID) then + local sUR = GetOpVar("FORM_URLADDON") + local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."ws")) + if(not IsValid(pIn)) then + LogInstance("Base WS invalid"); return nil end + pOp:SetIcon(ToIcon(sI.."ws")) + pIn:AddOption(languageGetPhrase(sT.."ws_cid"), function() SetClipboardText(sID) end):SetIcon(ToIcon(sI.."ws_cid")) + pIn:AddOption(languageGetPhrase(sT.."ws_opp"), function() guiOpenURL(sUR:format(sID)) end):SetIcon(ToIcon(sI.."ws_opp")) + end + -- Panel handling + if(not pnBase.Content) then + pMenu:AddOption(languageGetPhrase(sT.."expand"), function() SetNodeExpand(pnBase) end):SetIcon(ToIcon(sI.."expand")) + end + pMenu:Open() end function SetNodeExpand(pnBase) @@ -1832,26 +1843,18 @@ function GetFrequentModels(iCnt) local iInd, tmNow = 1, Time(); tableEmpty(frUsed); frUsed.Size = 0 local coMo, coTy = makTab:GetColumnName(1), makTab:GetColumnName(2) local coNm, coSz = makTab:GetColumnName(3), makTab:GetColumnName(4) - for mod, rec in pairs(tCache) do - if(IsHere(rec.Used) and IsHere(rec.Size) and rec.Size > 0) then - local rmComp = (tmNow - rec.Used) - local stData = {[coMo] = mod , [coTy] = rec.Type, - [coNm] = rec.Name, [coSz] = rec.Size} - if(frUsed.Size == 0) then frUsed.Size = 1 - tableInsert(frUsed, {Value = rmComp, Table = stData}) - else local bTop = true -- Registered records are more than one - if(frUsed.Size >= iCnt) then break end -- Reached count - for iD = 1, frUsed.Size do -- Still something to add - if(frUsed[iD].Value >= rmComp) then -- Check placement - frUsed.Size, bTop = (frUsed.Size + 1), false -- Increment - tableInsert(frUsed, iD, {Value = rmComp, Table = stData}) - break -- Exist the inner check loop and add the record - end -- Snapshot is inserted and registered - end -- We have to add the item at the end of the array - if(bTop) then tableInsert(frUsed, {Value = rmComp, Table = stData}) end - end -- By default top addition is enabled. When found this is skipped - end -- Make a report for every record that is valid in the cache - end -- If there is at least one record added return the array reference + local tSort = PrioritySort(tCache, "Used") + for iD = 1, iCnt do + local iR = tSort.Size-iD+1 + local oRec = tSort[iR] + if(oRec) then oRec = oRec.Rec + local rmComp = (tmNow - oRec.Used) + local stData = {[coMo] = oRec.Slot, [coTy] = oRec.Type, + [coNm] = oRec.Name, [coSz] = oRec.Size} + frUsed.Size = (frUsed.Size + 1) -- Increment size + tableInsert(frUsed, {Time = rmComp, Data = stData}) + end + end if(IsHere(frUsed) and IsHere(frUsed[1])) then return frUsed, iCnt end LogInstance("Array is empty or not available"); return nil end @@ -3494,7 +3497,7 @@ function CacheQueryProperty(sType) local qType = makTab:Match(sType,1,true) local qIndx = qsKey:format(sFunc,keyName) local Q = makTab:Get(qIndx, qType); if(not IsHere(Q)) then - Q = makTab:Select(3):Where({1,"%s"}):Order(2):Store(qIndx):Get(qIndx, qType) end + Q = makTab:Select(2, 3):Where({1,"%s"}):Order(2):Store(qIndx):Get(qIndx, qType) end if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,qType)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index 432c9a5f..8afe1276 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -161,12 +161,15 @@ tool.trackassembly.pn_routine_lb3=Тип tool.trackassembly.pn_routine_lb4=Име tool.trackassembly.pn_display_lb=Дисплей за парчето tool.trackassembly.pn_pattern_lb=Напишете шаблон -tool.trackassembly.tree_itmenu_cpnam=Копирай името -tool.trackassembly.tree_itmenu_cppth=Копирай пътя -tool.trackassembly.tree_itmenu_cpmod=Копирай модела -tool.trackassembly.tree_itmenu_cpwid=Копирай WID -tool.trackassembly.tree_itmenu_expnd=Разгъни възела -tool.trackassembly.tree_itmenu_opwid=Страница на работилницата +tool.trackassembly.treemenu_cpy=Копирай +tool.trackassembly.treemenu_cpy_mod=Модел +tool.trackassembly.treemenu_cpy_typ=Тип +tool.trackassembly.treemenu_cpy_nam=Име +tool.trackassembly.treemenu_cpy_pth=Път +tool.trackassembly.treemenu_ws=Работилница +tool.trackassembly.treemenu_ws_cid=Копирай WID +tool.trackassembly.treemenu_ws_opp=Отвори страница +tool.trackassembly.treemenu_expand=Разгърни възел tool.trackassembly.sizeucs=Мащаб за показваните координатни системи tool.trackassembly.sizeucs_con=Мащаб UCS\: tool.trackassembly.maxstatts=Дефинира след колко опита за натрупване на парче ще се изведе грешка diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 62225c0b..10398045 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -161,12 +161,15 @@ tool.trackassembly.pn_routine_lb3=Type tool.trackassembly.pn_routine_lb4=Name tool.trackassembly.pn_display_lb=Piece display tool.trackassembly.pn_pattern_lb=Write pattern -tool.trackassembly.tree_itmenu_cpnam=Copy name -tool.trackassembly.tree_itmenu_cppth=Copy path -tool.trackassembly.tree_itmenu_cpmod=Copy model -tool.trackassembly.tree_itmenu_cpwid=Copy WID -tool.trackassembly.tree_itmenu_expnd=Expand node -tool.trackassembly.tree_itmenu_opwid=Workshop page +tool.trackassembly.treemenu_cpy=Copy +tool.trackassembly.treemenu_cpy_mod=Model +tool.trackassembly.treemenu_cpy_typ=Type +tool.trackassembly.treemenu_cpy_nam=Name +tool.trackassembly.treemenu_cpy_pth=Path +tool.trackassembly.treemenu_ws=Workshop +tool.trackassembly.treemenu_ws_cid=Copy WID +tool.trackassembly.treemenu_ws_opp=Open page +tool.trackassembly.treemenu_expand=Expand node tool.trackassembly.sizeucs=Scale set for the coordinate systems displayed tool.trackassembly.sizeucs_con=Scale UCS\: tool.trackassembly.maxstatts=Defines how many stack attempts the script will try before failing diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index 8ccdce2c..163a5af2 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -115,12 +115,15 @@ tool.trackassembly.pn_routine_lb3=Тип tool.trackassembly.pn_routine_lb4=Имя tool.trackassembly.pn_display_lb=Показать кусок tool.trackassembly.pn_pattern_lb=Напишите шаблон -tool.trackassembly.tree_itmenu_cpnam=Копировать имя -tool.trackassembly.tree_itmenu_cppth=Копировать путь -tool.trackassembly.tree_itmenu_cpmod=Копировать модель -tool.trackassembly.tree_itmenu_cpwid=Копировать WID -tool.trackassembly.tree_itmenu_expnd=Развернуть узел -tool.trackassembly.tree_itmenu_opwid=Страница мастерской +tool.trackassembly.treemenu_cpy=Копировать +tool.trackassembly.treemenu_cpy_mod=Модель +tool.trackassembly.treemenu_cpy_typ=Тип +tool.trackassembly.treemenu_cpy_nam=Имя +tool.trackassembly.treemenu_cpy_pth=Путь +tool.trackassembly.treemenu_ws=Мастерская +tool.trackassembly.treemenu_ws_cid=Копировать WID +tool.trackassembly.treemenu_ws_opp=Открыть страницу +tool.trackassembly.treemenu_expand=Развернуть узел tool.trackassembly.buttonas<>=Уменьшить/Увеличить tool.trackassembly.buttonas+/-=Начение по умолчаниюз tool.trackassembly.buttonas@M=Запомнить стоимость From 8e7fe4f6136a75ac55b2bd8187fa9ea49650e622 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Wed, 23 Oct 2024 22:23:17 +0300 Subject: [PATCH 044/114] Optimized: Frequent pieces. Do not loop if no need to --- lua/trackassembly/trackasmlib.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 8ff722bc..191feff1 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1843,7 +1843,8 @@ function GetFrequentModels(iCnt) local iInd, tmNow = 1, Time(); tableEmpty(frUsed); frUsed.Size = 0 local coMo, coTy = makTab:GetColumnName(1), makTab:GetColumnName(2) local coNm, coSz = makTab:GetColumnName(3), makTab:GetColumnName(4) - local tSort = PrioritySort(tCache, "Used") + local tSort = PrioritySort(tCache, "Used"); if(not tSort) then + LogInstance("Sorting table cache failed"); return nil end for iD = 1, iCnt do local iR = tSort.Size-iD+1 local oRec = tSort[iR] @@ -1853,7 +1854,7 @@ function GetFrequentModels(iCnt) [coNm] = oRec.Name, [coSz] = oRec.Size} frUsed.Size = (frUsed.Size + 1) -- Increment size tableInsert(frUsed, {Time = rmComp, Data = stData}) - end + else break end -- Nothing else left to process end if(IsHere(frUsed) and IsHere(frUsed[1])) then return frUsed, iCnt end LogInstance("Array is empty or not available"); return nil From 81cec5d43913a674b548620be2a144c3e56467de Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 24 Oct 2024 15:32:10 +0300 Subject: [PATCH 045/114] Fixed: Lua mode exports being more accurate Updated: `RegisterPOA` storing the input data in row mode. Decoded when locating Removed: Usage of `OPSYM_ENTPOSANG` register/locate is unneeded Fixed: Frequent pieces updated with records without post-work Fixed: Frequent pieces return the table when at least one is present Renamed: PrioritySort > Arrange --- lua/autorun/trackassembly_init.lua | 6 +-- lua/trackassembly/trackasmlib.lua | 70 ++++++++++++++---------------- 2 files changed, 36 insertions(+), 40 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 3ca955b1..24ada0b8 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.780") +asmlib.SetOpVar("TOOL_VERSION","8.781") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1701,7 +1701,7 @@ asmlib.NewTable("PIECES",{ end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() - local tSort = asmlib.PrioritySort(tCache, "Type", "Slot") + local tSort = asmlib.Arrange(tCache, "Type", "Slot") if(not tSort) then oFile:Flush(); oFile:Close() asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end local noSQL = asmlib.GetOpVar("MISS_NOSQL") @@ -1769,7 +1769,7 @@ asmlib.NewTable("ADDITIONS",{ end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() - local tData = asmlib.PrioritySort(tCache) + local tData = asmlib.Arrange(tCache) for iRow = 1, tData.Size do local tRow = tData[iRow] local sKey, tRec = tRow.Key, tRow.Rec diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 191feff1..9b9c977b 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1843,20 +1843,22 @@ function GetFrequentModels(iCnt) local iInd, tmNow = 1, Time(); tableEmpty(frUsed); frUsed.Size = 0 local coMo, coTy = makTab:GetColumnName(1), makTab:GetColumnName(2) local coNm, coSz = makTab:GetColumnName(3), makTab:GetColumnName(4) - local tSort = PrioritySort(tCache, "Used"); if(not tSort) then + local tSort = Arrange(tCache, "Used"); if(not tSort) then LogInstance("Sorting table cache failed"); return nil end - for iD = 1, iCnt do - local iR = tSort.Size-iD+1 - local oRec = tSort[iR] - if(oRec) then oRec = oRec.Rec - local rmComp = (tmNow - oRec.Used) - local stData = {[coMo] = oRec.Slot, [coTy] = oRec.Type, - [coNm] = oRec.Name, [coSz] = oRec.Size} - frUsed.Size = (frUsed.Size + 1) -- Increment size - tableInsert(frUsed, {Time = rmComp, Data = stData}) + for iD = 1, iCnt do -- For every record that has been picked + local iR = tSort.Size-iD+1 -- Greater the time more recent + local oRec = tSort[iR] -- Index arranged record ID + if(oRec) then oRec = oRec.Rec -- Jump over to the record + if(not oRec.Post) then -- Initialized. Not yet picked + local nT = (tmNow - oRec.Used) -- Time to display + local tD = {[coMo] = oRec.Slot, [coTy] = oRec.Type, + [coNm] = oRec.Name, [coSz] = oRec.Size} + frUsed.Size = (frUsed.Size + 1) -- Increment size + tableInsert(frUsed, {Time = nT, Data = tD}) + end -- Time and panel data has been stored and passed else break end -- Nothing else left to process - end - if(IsHere(frUsed) and IsHere(frUsed[1])) then return frUsed, iCnt end + end -- Return only when at least one record is found + if(frUsed.Size > 0) then return frUsed, iCnt end LogInstance("Array is empty or not available"); return nil end @@ -2261,8 +2263,7 @@ function LocatePOA(oRec, ivPoID) else LogInstance("ID mismatch "..GetReport(ivPoID)); return nil end local stPOA = tOffs[iPoID]; if(not IsHere(stPOA)) then LogInstance("Missing ID "..GetReport(iPoID, oRec.Slot)); return nil end - if(oRec.Tran) then oRec.Tran = nil -- Transforming has started - local sE = GetOpVar("OPSYM_ENTPOSANG") -- Extract transform from model + if(oRec.Post) then oRec.Post = nil -- Transforming has started for ID = 1, oRec.Size do local tPOA = tOffs[ID] -- Index current offset local sP, sO, sA = tPOA.P:Raw(), tPOA.O:Raw(), tPOA.A:Raw() if(sO) then tPOA.O:Decode(sO, oRec.Slot, "Pos") @@ -2290,40 +2291,35 @@ function RegisterPOA(stData, ivID, sP, sO, sA) LogInstance("Origin mismatch "..GetReport(sO)); return nil end local sA = (sA or sNull); if(not isstring(sA)) then LogInstance("Angle mismatch "..GetReport(sA)); return nil end - if(not stData.Offs) then if(iID > 1) then + if(not stData.Offs) then if(iID ~= 1) then LogInstance("Mismatch ID "..GetReport(iID, stData.Slot)); return nil end - stData.Offs = {} + stData.Offs = {}; stData.Post = true end local tOffs = stData.Offs; if(tOffs[iID]) then - LogInstance("Exists ID "..GetReport(iID)); return nil + LogInstance("Exists ID "..GetReport(iID)); return tOffs else if((iID > 1) and (not tOffs[iID - 1])) then LogInstance("Scatter ID "..GetReport(iID)); return nil end tOffs[iID] = {}; tOffs = tOffs[iID] -- Allocate a local offset index tOffs.P = NewPOA(); tOffs.O = NewPOA(); tOffs.A = NewPOA() - end; local sE = GetOpVar("OPSYM_ENTPOSANG") - if(sO:sub(1,1) == sE) then -- To be decoded on spawn via locating - stData.Tran = true; tOffs.O:Set(); tOffs.O:Raw(sO) -- Store transform - LogInstance("Origin init "..GetReport(iID, sO, stData.Slot)) - else -- When the origin is empty use the zero otherwise decode the value - tOffs.O:Import(sO, stData.Slot) -- Try to decode the origin when present + end + LogInstance("Default "..GetReport(sNull, stData.Slot) + if(not tOffs.O:Raw()) then -- To be decoded on spawn via locating + tOffs.O:Set(); tOffs.O:Raw(sO) -- Store transform + LogInstance("Origin init "..GetReport(iID, sO)) end -- Try decoding the transform point when not applicable - if(sA:sub(1,1) == sE) then -- To be decoded on spawn via locating - stData.Tran = true; tOffs.A:Set(); tOffs.A:Raw(sA) -- Store transform - LogInstance("Angle init "..GetReport(iID, sA, stData.Slot)) - else -- When the angle is empty use the zero otherwise decode the value - tOffs.A:Import(sA, stData.Slot) -- Try to decode the angle when present + if(not tOffs.A:Raw()) then -- To be decoded on spawn via locating + tOffs.A:Set(); tOffs.A:Raw(sA) -- Store transform + LogInstance("Angle init "..GetReport(iID, sA)) end -- Try decoding the transform point when not applicable - if(tOffs.O:Raw() or sP:sub(1,1) == sE) then -- Origin transform trigger - stData.Tran = true; tOffs.P:Set(); tOffs.P:Raw(sP) -- Store transform - LogInstance("Point init "..GetReport(iID, sP, stData.Slot)) - else -- When the point is empty use the origin otherwise decode the value - tOffs.P:Import(sP, stData.Slot, tOffs.O:Get()) -- Try to decode the point when present + if(not tOffs.P:Raw()) then -- Origin transform trigger + tOffs.P:Set(); tOffs.P:Raw(sP) -- Store transform + LogInstance("Point init "..GetReport(iID, sP)) end -- Try decoding the transform point when not applicable return tOffs -- On success return the populated POA offset end -function PrioritySort(tSrc, vPrn, ...) +function Arrange(tSrc, vPrn, ...) local tC = (istable(vPrn) and vPrn or {vPrn, ...}) local tS = {Size = 0}; tC.Size = #tC if(IsEmpty(tSrc)) then return tS end @@ -3807,7 +3803,7 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) fData[vK] = tRec; fData[vK].Size = #tRec end end end - local tSort = PrioritySort(fData); if(not tSort) then + local tSort = Arrange(fData); if(not tSort) then LogInstance("("..fPref.."@"..sTable..") Sorting failed"); return false end local O = fileOpen(fName, "wb" ,"DATA"); if(not O) then LogInstance("("..fPref.."@"..sTable..")("..fName..") Open fail"); return false end @@ -4026,7 +4022,7 @@ function SetAdditionsAR(sModel, makTab, qList) end end end - local tSort = PrioritySort(qData, coMo, coLn); if(not tSort) then + local tSort = Arrange(qData, coMo, coLn); if(not tSort) then LogInstance("Sort cache mismatch"); return end; tableEmpty(qData) for iD = 1, tSort.Size do qData[iD] = tSort[iD].Rec end else @@ -4169,7 +4165,7 @@ function ExportTypeAR(sType) end end end - local tSort = PrioritySort(qPieces, coMo, coLn) + local tSort = Arrange(qPieces, coMo, coLn) if(not tSort) then LogInstance("Sort cache mismatch") fE:Flush(); fE:Close(); fS:Close(); return From 9880f7b9963864648706318d0d3358bb2e2433d5 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Thu, 24 Oct 2024 22:36:21 +0300 Subject: [PATCH 046/114] Removed: Needless table/columns indexing in `AddLineListView` Removed: Frequent pieces count parameter is not needed anymore --- lua/autorun/trackassembly_init.lua | 8 ++-- lua/trackassembly/trackasmlib.lua | 77 ++++++++++++------------------ 2 files changed, 34 insertions(+), 51 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 24ada0b8..37ffeb8d 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.781") +asmlib.SetOpVar("TOOL_VERSION","8.782") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -992,7 +992,7 @@ if(CLIENT) then asmlib.SetAction("OPEN_FRAME", function(oPly,oCom,oArgs) local sLog = "*OPEN_FRAME" - local frUsed, nCount = asmlib.GetFrequentModels(oArgs[1]); if(not asmlib.IsHere(frUsed)) then + local frUsed = asmlib.GetFrequentPieces(oArgs[1]); if(not asmlib.IsHere(frUsed)) then asmlib.LogInstance("Retrieving most frequent models failed ["..tostring(oArgs[1]).."]",sLog); return nil end local makTab = asmlib.GetBuilderNick("PIECES"); if(not asmlib.IsHere(makTab)) then asmlib.LogInstance("Missing builder for table PIECES",sLog); return nil end @@ -1168,7 +1168,7 @@ if(CLIENT) then pnListView.OnRowRightClick = function(pnSelf, nIndex, pnLine) asmlib.SetListViewClipboard(pnSelf) end - if(not asmlib.UpdateListView(pnListView,frUsed,nCount)) then + if(not asmlib.UpdateListView(pnListView,frUsed)) then asmlib.LogInstance("Populate the list view failed",sLog); return nil end -- The button database export by type uses the current active type in the ListView line pnButton.DoClick = function(pnSelf) @@ -1202,7 +1202,7 @@ if(CLIENT) then local sPat = tostring(pnSelf:GetValue() or "") local sAbr, sCol = pnComboBox:GetSelected() -- Returns two values sAbr, sCol = tostring(sAbr or ""), tostring(sCol or "") - if(not asmlib.UpdateListView(pnListView,frUsed,nCount,sCol,sPat)) then + if(not asmlib.UpdateListView(pnListView,frUsed,sCol,sPat)) then asmlib.LogInstance("Update ListView fail"..asmlib.GetReport(sAbr,sCol,sPat,sLog..".TextEntry")); return nil end end diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 9b9c977b..dd46e2ea 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1655,29 +1655,6 @@ function DoAction(sKey, ...) return pcall(tAct.Act, tAct.Dat, ...) end -function AddLineListView(pnListView,frUsed,ivNdex) - if(not IsHere(pnListView)) then - LogInstance("Missing panel"); return false end - if(not IsValid(pnListView)) then - LogInstance("Invalid panel"); return false end - if(not IsHere(frUsed)) then - LogInstance("Missing data"); return false end - local iNdex = tonumber(ivNdex); if(not IsHere(iNdex)) then - LogInstance("Index mismatch "..GetReport(ivNdex)); return false end - local tInfo = frUsed[iNdex]; if(not IsHere(tInfo)) then - LogInstance("Missing data on index "..GetReport(iNdex)); return false end - local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then - LogInstance("Missing table builder"); return nil end - local sModel = tInfo.Data[makTab:GetColumnName(1)] - local sType = tInfo.Data[makTab:GetColumnName(2)] - local sName = tInfo.Data[makTab:GetColumnName(3)] - local nAct = tInfo.Data[makTab:GetColumnName(4)] - local nUsed = mathRound(tInfo.Time,3) - local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel) - pnLine:SetTooltip(sModel) - return true -end - --[[ * Updates a VGUI pnListView with a search preformed in the already generated * frequently used pieces "frUsed" for the pattern "sPat" given by the user @@ -1686,35 +1663,42 @@ end * On fail a parameter is not valid or missing and returns non-success * pnListView > The panel which must be updated * frUsed > The list of the frequently used tracks - * nCount > The amount of pieces to check * sCol > The name of the column it preforms search by * sPat > Search pattern to preform the search with ]] -function UpdateListView(pnListView,frUsed,nCount,sCol,sPat) +function UpdateListView(pnListView,frUsed,sCol,sPat) if(not (IsHere(frUsed) and IsHere(frUsed[1]))) then LogInstance("Missing data"); return false end - local nCount = (tonumber(nCount) or 0); if(nCount <= 0) then - LogInstance("Count not applicable"); return false end - if(IsHere(pnListView)) then - if(not IsValid(pnListView)) then - LogInstance("Invalid ListView"); return false end - pnListView:SetVisible(false); pnListView:Clear() - else LogInstance("Missing ListView"); return false end - local sCol = tostring(sCol or "") - local sPat = tostring(sPat or "") + if(not IsHere(pnListView)) then + LogInstance("Missing ListView"); return false end + if(not IsValid(pnListView)) then + LogInstance("Invalid ListView"); return false end + local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then + LogInstance("Missing table builder"); return nil end + pnListView:SetVisible(false); pnListView:Clear() + local sMo, sTy = makTab:GetColumnName(1), makTab:GetColumnName(2) + local sNm, sAc = makTab:GetColumnName(3), makTab:GetColumnName(4) + local sCo, sPa = tostring(sCol or ""), tostring(sPat or "") for iCnt = 1, frUsed.Size do - if(IsBlank(sPat)) then - if(not AddLineListView(pnListView,frUsed,iCnt)) then - LogInstance("Failed to add line on "..GetReport(iCnt)); return false end + local tInfo = frUsed[iCnt]; if(not IsHere(tInfo)) then + LogInstance("Missing data on index "..GetReport(iCnt)); return false end + local nUsed = mathRound(tInfo.Time,3) + local sModel, sType = tInfo.Data[sMo], tInfo.Data[sTy] + local sName , nAct = tInfo.Data[sNm], tInfo.Data[sAc] + if(IsBlank(sPa)) then + local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel) + if(not IsValid(pnLine)) then LogInstance("Line invalid "..GetReport(iCnt)); return false end + pnLine:SetTooltip(sModel) else - local sDat = tostring(frUsed[iCnt].Data[sCol] or "") - if(sDat:find(sPat)) then - if(not AddLineListView(pnListView,frUsed,iCnt)) then - LogInstance("Failed to add line "..GetReport(iCnt, sDat, sPat, sCol)); return false end + local sDa = tostring(frUsed[iCnt].Data[sCo] or "") + if(sDa:find(sPa)) then + local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel) + if(not IsValid(pnLine)) then LogInstance("Line invalid "..GetReport(iCnt, sDa, sPa, sCo); return false end + pnLine:SetTooltip(sModel) end end end; pnListView:SetVisible(true) - LogInstance("Updated "..GetReport(frUsed.Size)); return true + LogInstance("Processed "..GetReport(frUsed.Size)); return true end function GetNodeTypeRoot(pnBase, iRep, sSym) @@ -1830,7 +1814,7 @@ function SetNodeContent(pnBase, sName, sModel) return pNode end -function GetFrequentModels(iCnt) +function GetFrequentPieces(iCnt) local iCnt = (tonumber(iCnt) or 0); if(iCnt < 1) then LogInstance("Count not applicable"); return nil end local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then @@ -1845,9 +1829,8 @@ function GetFrequentModels(iCnt) local coNm, coSz = makTab:GetColumnName(3), makTab:GetColumnName(4) local tSort = Arrange(tCache, "Used"); if(not tSort) then LogInstance("Sorting table cache failed"); return nil end - for iD = 1, iCnt do -- For every record that has been picked - local iR = tSort.Size-iD+1 -- Greater the time more recent - local oRec = tSort[iR] -- Index arranged record ID + for iD = tSort.Size, 1, -1 do -- For every record that is picked + local oRec = tSort[iD] -- Index arranged record ID if(oRec) then oRec = oRec.Rec -- Jump over to the record if(not oRec.Post) then -- Initialized. Not yet picked local nT = (tmNow - oRec.Used) -- Time to display @@ -1858,7 +1841,7 @@ function GetFrequentModels(iCnt) end -- Time and panel data has been stored and passed else break end -- Nothing else left to process end -- Return only when at least one record is found - if(frUsed.Size > 0) then return frUsed, iCnt end + if(frUsed.Size > 0) then return frUsed end LogInstance("Array is empty or not available"); return nil end From 581eced64e9dd270b16eccbd5201e96b1ad1ce87 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 25 Oct 2024 15:21:49 +0300 Subject: [PATCH 047/114] Fixed: DSV manager buttons get squished when many DSV are present Removed: Nasty button FS handler from DSV configuration Transferred: DSV button mangers to prefix context menu Updated: English translations for the prefix context menu --- lua/autorun/trackassembly_init.lua | 317 +++++++++--------- lua/trackassembly/trackasmlib.lua | 6 +- .../localization/en/trackassembly.properties | 33 +- 3 files changed, 172 insertions(+), 184 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 37ffeb8d..d3beac58 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.782") +asmlib.SetOpVar("TOOL_VERSION","8.783") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -460,50 +460,53 @@ if(CLIENT) then asmlib.ToIcon(gsToolPrefU.."ADDITIONS" , "bricks" ) asmlib.ToIcon(gsToolPrefU.."PHYSPROPERTIES", "wand" ) asmlib.ToIcon(gsToolPrefL.."context_menu" , "database_gear" ) - asmlib.ToIcon("treemenu_cpy" , "page_copy" ) - asmlib.ToIcon("treemenu_cpy_mod", "brick_go" ) - asmlib.ToIcon("treemenu_cpy_typ", "database_go" ) - asmlib.ToIcon("treemenu_cpy_nam", "script_go" ) - asmlib.ToIcon("treemenu_cpy_pth", "map_go" ) - asmlib.ToIcon("treemenu_ws" , "cart" ) - asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) - asmlib.ToIcon("treemenu_ws_opp" , "world" ) - asmlib.ToIcon("treemenu_expand" , "zoom" ) - asmlib.ToIcon("subfolder_item" , "folder" ) - asmlib.ToIcon("pn_externdb_bt1" , "database" ) - asmlib.ToIcon("pn_externdb_bt2" , "folder_database" ) - asmlib.ToIcon("pn_externdb_bt3" , "database_table" ) - asmlib.ToIcon("pn_externdb_bt4" , "database_link" ) - asmlib.ToIcon("pn_externdb_bt5" , "time_go" ) - asmlib.ToIcon("pn_externdb_bt6" , "compress" ) - asmlib.ToIcon("pn_externdb_bt7" , "database_edit" ) - asmlib.ToIcon("pn_externdb_bt8" , "database_delete" ) - asmlib.ToIcon("pn_externdb_cm1" , "database_key" ) - asmlib.ToIcon("pn_externdb_cm2" , "database_go" ) - asmlib.ToIcon("pn_externdb_cm3" , "database_connect") - asmlib.ToIcon("pn_externdb_cm4" , "database_edit" ) - asmlib.ToIcon("pn_externdb_cm5" , "database_add" ) - asmlib.ToIcon("pn_externdb_cm6" , "database_delete" ) - asmlib.ToIcon("pn_srchcol_lb1" , "brick" ) - asmlib.ToIcon("pn_srchcol_lb2" , "package" ) - asmlib.ToIcon("pn_srchcol_lb3" , "tag_green" ) - asmlib.ToIcon("pn_srchcol_lb4" , "arrow_refresh" ) - asmlib.ToIcon("model" , "brick" ) - asmlib.ToIcon("mass" , "basket_put" ) - asmlib.ToIcon("bgskids" , "layers" ) - asmlib.ToIcon("phyname" , "wand" ) - asmlib.ToIcon("ignphysgn" , "lightning_go" ) - asmlib.ToIcon("freeze" , "lock" ) - asmlib.ToIcon("gravity" , "ruby_put" ) - asmlib.ToIcon("weld" , "wrench" ) - asmlib.ToIcon("nocollide" , "shape_group" ) - asmlib.ToIcon("nocollidew" , "world_go" ) - asmlib.ToIcon("dsvlist_extdb" , "database_go" ) - asmlib.ToIcon("workmode_snap" , "plugin" ) -- General spawning and snapping mode - asmlib.ToIcon("workmode_cross" , "chart_line" ) -- Ray cross intersect interpolation - asmlib.ToIcon("workmode_curve" , "vector" ) -- Catmull-Rom curve line segment fitting - asmlib.ToIcon("workmode_over" , "shape_move_back" ) -- Trace normal ray location piece flip-spawn - asmlib.ToIcon("workmode_turn" , "arrow_turn_right") -- Produces smoother turns with Bezier curve + asmlib.ToIcon("treemenu_cpy" , "page_copy" ) + asmlib.ToIcon("treemenu_cpy_mod", "brick_go" ) + asmlib.ToIcon("treemenu_cpy_typ", "database_go" ) + asmlib.ToIcon("treemenu_cpy_nam", "script_go" ) + asmlib.ToIcon("treemenu_cpy_pth", "map_go" ) + asmlib.ToIcon("treemenu_ws" , "cart" ) + asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) + asmlib.ToIcon("treemenu_ws_opp" , "world" ) + asmlib.ToIcon("treemenu_expand" , "zoom" ) + asmlib.ToIcon("subfolder_item" , "folder" ) + asmlib.ToIcon("pn_externdb_cmcp" , "page_copy" ) + asmlib.ToIcon("pn_externdb_cmcp1", "database_go" ) + asmlib.ToIcon("pn_externdb_cmcp2", "database_key" ) + asmlib.ToIcon("pn_externdb_cmcp3", "database_lightning") + asmlib.ToIcon("pn_externdb_cmcp4", "folder_database" ) + asmlib.ToIcon("pn_externdb_cmtg" , "database_connect" ) + asmlib.ToIcon("pn_externdb_cmli" , "database" ) + asmlib.ToIcon("pn_externdb_cmli1", "database_edit" ) + asmlib.ToIcon("pn_externdb_cmli2", "database_add" ) + asmlib.ToIcon("pn_externdb_cmli3", "database_delete" ) + asmlib.ToIcon("pn_externdb_cmst" , "database_gear" ) + asmlib.ToIcon("pn_externdb_cmsi" , "database_table" ) + asmlib.ToIcon("pn_externdb_cmst1", "database_table" ) + asmlib.ToIcon("pn_externdb_cmst2", "database_link" ) + asmlib.ToIcon("pn_externdb_cmst3", "time_go" ) + asmlib.ToIcon("pn_externdb_cmst4", "compress" ) + asmlib.ToIcon("pn_externdb_cmst5", "database_edit" ) + asmlib.ToIcon("pn_externdb_cmst6", "database_delete" ) + asmlib.ToIcon("pn_srchcol_lb1" , "brick" ) + asmlib.ToIcon("pn_srchcol_lb2" , "package" ) + asmlib.ToIcon("pn_srchcol_lb3" , "tag_green" ) + asmlib.ToIcon("pn_srchcol_lb4" , "arrow_refresh" ) + asmlib.ToIcon("model" , "brick" ) + asmlib.ToIcon("mass" , "basket_put" ) + asmlib.ToIcon("bgskids" , "layers" ) + asmlib.ToIcon("phyname" , "wand" ) + asmlib.ToIcon("ignphysgn" , "lightning_go" ) + asmlib.ToIcon("freeze" , "lock" ) + asmlib.ToIcon("gravity" , "ruby_put" ) + asmlib.ToIcon("weld" , "wrench" ) + asmlib.ToIcon("nocollide" , "shape_group" ) + asmlib.ToIcon("nocollidew" , "world_go" ) + asmlib.ToIcon("workmode_snap" , "plugin" ) -- General spawning and snapping mode + asmlib.ToIcon("workmode_cross" , "chart_line" ) -- Ray cross intersect interpolation + asmlib.ToIcon("workmode_curve" , "vector" ) -- Catmull-Rom curve line segment fitting + asmlib.ToIcon("workmode_over" , "shape_move_back" ) -- Trace normal ray location piece flip-spawn + asmlib.ToIcon("workmode_turn" , "arrow_turn_right" ) -- Produces smoother turns with Bezier curve asmlib.ToIcon("property_type" , "package_green" ) asmlib.ToIcon("property_name" , "note" ) asmlib.ToIcon("modedb_lua" , "database_lightning") @@ -731,11 +734,6 @@ if(CLIENT) then if(IsValid(pnSelf)) then pnSelf:Remove() end -- Delete the valid panel if(asmlib.IsHere(iK)) then conElements:Pull(iK) end -- Pull the key out end - local pnSheet = vguiCreate("DPropertySheet") - if(not IsValid(pnSheet)) then pnFrame:Close() - asmlib.LogInstance("Sheet invalid",sLog); return nil end - pnSheet:SetParent(pnFrame) - pnSheet:Dock(FILL) local sMis = asmlib.GetOpVar("MISS_NOAV") local sLib = asmlib.GetOpVar("NAME_LIBRARY") local sBas = asmlib.GetOpVar("DIRPATH_BAS") @@ -745,26 +743,16 @@ if(CLIENT) then local sDsv = sBas..asmlib.GetOpVar("DIRPATH_DSV") local fDSV = sDsv..("%s"..sPrU.."%s.txt") local sNam = (sBas..sSet..sLib.."_dsv.txt") - local pnDSV = vguiCreate("DPanel") - if(not IsValid(pnDSV)) then pnFrame:Close() - asmlib.LogInstance("DSV list invalid",sLog); return nil end - pnDSV:SetParent(pnSheet) - pnDSV:DockMargin(xyDsz.x, xyDsz.y, xyDsz.x, xyDsz.y) - pnDSV:DockPadding(xyDsz.x, xyDsz.y, xyDsz.x, xyDsz.y) - pnDSV:Dock(FILL) - local tInfo = pnSheet:AddSheet("DSV", pnDSV, asmlib.ToIcon("dsvlist_extdb")) - tInfo.Tab:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_externdb").." DSV") local sDel, nB, nW, nH = "\t", 22, pnFrame:GetSize() xyPos.x, xyPos.y = xyDsz.x, xyDsz.y - xySiz.x = (nW - 6 * xyDsz.x) - xySiz.y = ((nH - 6 * xyDsz.y) - 52) + xySiz.x = (nW - 2 * xyDsz.x) + xySiz.y = (nH - 2 * xyDsz.y) - 3*xyDsz.y - 2*nB local wAct = mathFloor(((gnRatio - 1) / 10) * xySiz.x) local wUse, wSrc = mathFloor(xySiz.x - wAct), (xySiz.x * nAut) - local pnListView = vguiCreate("DListView") + local pnListView = pnFrame:Add("DListView") if(not IsValid(pnListView)) then pnFrame:Close() asmlib.LogInstance("List view invalid",sLog); return nil end - xySiz.y = xySiz.y - 3*xyDsz.y - 2*nB - pnListView:SetParent(pnDSV) + pnListView:SetParent(pnFrame) pnListView:SetVisible(true) pnListView:SetSortable(false) pnListView:SetMultiSelect(false) @@ -785,10 +773,9 @@ if(CLIENT) then if(iC == 1 or iC == tpText.Size) then xySiz.x = cW - (xyDsz.x / 2) else xySiz.x = cW - xyDsz.x end; pC:SetWide(cW) - local pnText = vguiCreate("DTextEntry") - if(not IsValid(pnText)) then pnFrame:Close() - asmlib.LogInstance("Text entry active invalid", sLog); return nil end - pnText:SetParent(pnDSV) + local pnText = vguiCreate("DTextEntry"); if(not IsValid(pnText)) then pnFrame:Close() + asmlib.LogInstance("Entry invalid "..GetReport(iC), sLog..".TextEntry"); return nil end + pnText:SetParent(pnFrame) pnText:SetEditable(true) pnText:SetPos(xyPos.x, xyPos.y) pnText:SetSize(xySiz.x, xySiz.y) @@ -797,6 +784,8 @@ if(CLIENT) then xyPos.x = xyPos.x + xySiz.x + xyDsz.x; tpText[iC] = pnText pnText.OnEnter = function(pnSelf) local nID, pnRow = pnListView:GetSelectedLine() + if(not IsValid(pnRow)) then pnFrame:Close() + asmlib.LogInstance("Line invalid", sLog..".TextEntry"); return nil end local tDat, sMis = {}, asmlib.GetOpVar("MISS_NOAV") for iV = 1, tpText.Size do tDat[iV] = tpText[iV]:GetValue() end -- Active line. Contains X/V @@ -810,7 +799,7 @@ if(CLIENT) then tDat[3] = tostring(tDat[3] or ""):Trim() tDat[3] = (asmlib.IsBlank(tDat[3]) and sMis or tDat[3]) if(not asmlib.IsBlank(tDat[1]) and not asmlib.IsBlank(tDat[2])) then - if(nID and nID > 0 and pnRow and not tpText[1].m_NewDSV) then + if(nID and nID > 0 and pnRow and not tpText.New) then for iU = 1, tpText.Size do pnRow:SetColumnText(iU, tDat[iU]) end else pnListView:AddLine(tDat[1], tDat[2], tDat[3]):SetTooltip(tDat[3]) end; end; for iV = 1, tpText.Size do tpText[iV]:SetValue(""); tpText[iV]:SetText("") end @@ -825,7 +814,7 @@ if(CLIENT) then xySiz.x = ((pnListView:GetWide() - xyDsz.x) / 2) pnImport:SetPos(xyPos.x, xyPos.y) pnImport:SetSize(xySiz.x, xySiz.y) - pnImport:SetParent(pnDSV) + pnImport:SetParent(pnFrame) pnImport:SetFont("Trebuchet24") pnImport:SetText(languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bti")) pnImport:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bti_tp")) @@ -833,8 +822,8 @@ if(CLIENT) then pnImport.DoClick = function(pnSelf) if(not fileExists(sNam, "DATA")) then fileWrite(sNam, "") end local oDSV = fileOpen(sNam, "rb", "DATA"); if(not oDSV) then pnFrame:Close() - asmlib.LogInstance("DSV list missing",sLog); return nil end; pnListView:Clear() - local sLine, bEOF, bAct = "", false, true + asmlib.LogInstance("File error", sLog..".Import"); return nil end + local sLine, bEOF, bAct = "", false, true; pnListView:Clear() while(not bEOF) do sLine, bEOF = asmlib.GetStringFile(oDSV) if(not asmlib.IsBlank(sLine)) then local sKey, sPrg @@ -856,15 +845,14 @@ if(CLIENT) then xyPos.x = xyPos.x + xySiz.x + xyDsz.x pnExport:SetPos(xyPos.x, xyPos.y) pnExport:SetSize(xySiz.x, xySiz.y) - pnExport:SetParent(pnDSV) + pnExport:SetParent(pnFrame) pnExport:SetFont("Trebuchet24") pnExport:SetText(languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bte")) pnExport:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bte_tp")) pnExport.DoRightClick = function() end pnExport.DoClick = function(pnSelf) - local oDSV = fileOpen(sNam, "wb", "DATA") - if(not oDSV) then pnFrame:Close() - asmlib.LogInstance("DSV list missing",sLog..".ListView"); return nil end + local oDSV = fileOpen(sNam, "wb", "DATA"); if(not oDSV) then pnFrame:Close() + asmlib.LogInstance("File error",sLog..".Export"); return nil end local tLine = pnListView:GetLines() local sOff = asmlib.GetOpVar("OPSYM_DISABLE") for iK, pnCur in pairs(tLine) do @@ -895,98 +883,97 @@ if(CLIENT) then local pnMenu = vguiCreate("DMenu") if(not IsValid(pnMenu)) then pnFrame:Close() asmlib.LogInstance("Menu invalid",sLog..".ListView"); return nil end + local sI = "pn_externdb_cm" + local sP = pnLine:GetColumnText(2) local mX, mY = inputGetCursorPos() - local tOptions = { - function() asmlib.SetListViewClipboard(pnSelf) end, - function() SetClipboardText(convRow(pnLine)) end, - function() pnLine:SetColumnText(1, ((pnLine:GetColumnText(1) == "V") and "X" or "V")) end, - function() excgRow(pnLine); tpText[1].m_NewDSV = false end, - function() excgRow(pnLine); tpText[1].m_NewDSV = true end, - function() pnSelf:RemoveLine(nIndex) end - }; tOptions.Size = #tOptions - for iO = 1, tOptions.Size do local sO = tostring(iO) - local sDescr = languageGetPhrase("tool."..gsToolNameL..".pn_externdb_cm"..sO) - pnMenu:AddOption(sDescr, tOptions[iO]):SetIcon(asmlib.ToIcon("pn_externdb_cm"..sO)) - end; pnMenu:Open() + local sT = ("tool."..gsToolNameL.."."..sI) + -- Enable and disable DSV + pnMenu:AddOption(languageGetPhrase(sT.."tg"), + function() pnLine:SetColumnText(1, ((pnLine:GetColumnText(1) == "V") and "X" or "V")) + end):SetImage(sT.."tg") + -- Copy to clipboard various values and things + local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."cp")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Copy menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Copy opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(sI.."cp") + pIn:AddOption(languageGetPhrase(sT.."cp1"), + function() asmlib.SetListViewClipboard(pnSelf) end):SetImage(sT.."cp1") + pIn:AddOption(languageGetPhrase(sT.."cp2"), + function() SetClipboardText(pnLine:GetColumnText(2)) end):SetImage(sT.."cp2") + pIn:AddOption(languageGetPhrase(sT.."cp3"), + function() SetClipboardText(convRow(pnLine)) end):SetImage(sT.."cp3") + pIn:AddOption(languageGetPhrase(sT.."cp4"), + function() SetClipboardText(sDsv) end):SetImage(sT.."cp4") + -- Panel data line manipulation for import/export + local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."li")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Internals menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Internals opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(sI.."li") + pIn:AddOption(languageGetPhrase(sT.."li1"), + function() excgRow(pnLine); tpText.New = false end):SetImage(sT.."li1") + pIn:AddOption(languageGetPhrase(sT.."li2"), + function() excgRow(pnLine); tpText.New = true end):SetImage(sT.."li2") + pIn:AddOption(languageGetPhrase(sT.."li3"), + function() pnSelf:RemoveLine(nIndex)):SetImage(sT.."li3") + -- Manipulate content local settings related to the line + local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."st")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Settings menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Settings opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(sI.."st"); pOp:SetTooltip(languageGetPhrase(sI.."stt")) + -- Populate the sub-menu with all table nicknames + local iD, makTab = 1, asmlib.GetBuilderID(1) + while(makTab) do + local defTab = makTab:GetDefinition() + local sFile = fDSV:format(sP, defTab.Nick)) + local pTb, pOb = pIn:AddSubMenu(defTab.Nick) + if(not IsValid(pTb)) then pnFrame:Close() + asmlib.LogInstance("Manage menu invalid"..GetReport(iD, defTab.Nick),sLog..".ListView"); return nil end + if(not IsValid(pOb)) then pnFrame:Close() + asmlib.LogInstance("Manage opts invalid",sLog..".ListView"); return nil end + pOb:SetIcon(sI.."si") + pIn:AddOption(languageGetPhrase(sT.."st1"), + function() SetClipboardText(defTab.Nick) end):SetImage(sT.."st1") + pIn:AddOption(languageGetPhrase(sT.."st2"), + function() SetClipboardText(sFile) end):SetImage(sT.."st2") + pIn:AddOption(languageGetPhrase(sT.."st3"), + function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(sT.."st3") + pIn:AddOption(languageGetPhrase(sT.."st4"), + function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(sT.."st4") + pIn:AddOption(languageGetPhrase(sT.."st5"), + function() -- Edit the database contents using the Luapad addon + if(not luapad) then return end -- Luapad is not installed do nothing + asmlib.LogInstance("Modify "..asmlib.GetReport(sFile), sLog..".ListView") + if(luapad.Frame) then luapad.Frame:SetVisible(true) + else asmlib.SetAsmConvar(oPly, "*luapad", gsToolNameL) end + luapad.AddTab("["..defTab.Nick.."]"..defTab.Nick, fileRead(sFile, "DATA"), sDsv); + if(defTab.Nick == "PIECES") then -- Load the category provider for this DSV + local sCats = fDSV:format(sP, "CATEGORY"); if(fileExists(sCats,"DATA")) then + luapad.AddTab("[CATEGORY]"..defTab.Nick, fileRead(sCats, "DATA"), sDsv); + end -- This is done so we can distinguish between luapad and other panels + end -- Luapad is designed not to be closed so we need to make it invisible + luapad.Frame:SetVisible(true); luapad.Frame:Center() + luapad.Frame:MakePopup(); conElements:Push({luapad.Frame}) + end):SetImage(sT.."st5") + pIn:AddOption(languageGetPhrase(sT.."st6"), + function() fileDelete(sFile) + asmlib.LogInstance("Deleted "..asmlib.GetReport(sFile), sLog..".ListView") + if(defTab.Nick == "PIECES") then local sCats = fDSV:format(sP, "CATEGORY") + if(fileExists(sCats,"DATA")) then fileDelete(sCats) -- Delete category when present + asmlib.LogInstance("Deleted "..asmlib.GetReport(sCats), sLog..".ListView") end + end + end):SetImage(sT.."st6") + iD = (iD + 1); makTab = asmlib.GetBuilderID(iD) + end + pnMenu:Open() end -- Process only the right mouse button end -- Populate the tables for every database - local iD, makTab = 1, asmlib.GetBuilderID(1) - while(makTab) do - local pnTable = vguiCreate("DPanel") - if(not IsValid(pnTable)) then pnFrame:Close() - asmlib.LogInstance("Category invalid",sLog); return nil end - local defTab = makTab:GetDefinition() - pnTable:SetParent(pnSheet) - pnTable:DockMargin(xyDsz.x, xyDsz.y, xyDsz.x, xyDsz.y) - pnTable:DockPadding(xyDsz.x, xyDsz.y, xyDsz.x, xyDsz.y) - pnTable:Dock(FILL) - local tInfo = pnSheet:AddSheet(defTab.Nick, pnTable, asmlib.ToIcon(defTab.Name)) - tInfo.Tab:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_externdb").." "..defTab.Nick) - local tFile = fileFind(fDSV:format("*", defTab.Nick), "DATA") - if(istable(tFile) and tFile[1]) then - local nF, nW, nH = #tFile, pnFrame:GetSize() - xySiz.x, xyPos.x, xyPos.y = (nW - 6 * xyDsz.x), xyDsz.x, xyDsz.y - xySiz.y = (((nH - 6 * xyDsz.y) - ((nF -1) * xyDsz.y) - 52) / nF) - for iP = 1, nF do local sCur = tFile[iP] - local pnManage = vguiCreate("DButton") - if(not IsValid(pnSheet)) then pnFrame:Close() - asmlib.LogInstance("Button invalid ["..tostring(iP).."]",sLog); return nil end - local nS, nE = sCur:upper():find(sPrU..defTab.Nick); - if(nS and nE) then - local sPref = sCur:sub(1, nS - 1) - local sFile = fDSV:format(sPref, defTab.Nick) - pnManage:SetParent(pnTable) - pnManage:SetPos(xyPos.x, xyPos.y) - pnManage:SetSize(xySiz.x, xySiz.y) - pnManage:SetFont("Trebuchet24") - pnManage:SetText(sPref) - pnManage:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_externdb_lb").." "..sFile) - pnManage.DoRightClick = function(pnSelf) - local pnMenu = vguiCreate("DMenu") - if(not IsValid(pnMenu)) then pnFrame:Close() - asmlib.LogInstance("Menu invalid",sLog..".Button"); return nil end - local tOptions = { - function() SetClipboardText(pnSelf:GetText()) end, - function() SetClipboardText(sDsv) end, - function() SetClipboardText(defTab.Nick) end, - function() SetClipboardText(sFile) end, - function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end, - function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end, - function() -- Edit the database contents using the Luapad addon - if(not luapad) then return end -- Luapad is not installed do nothing - asmlib.LogInstance("Edit "..asmlib.GetReport(sFile), sLog..".Button") - if(luapad.Frame) then luapad.Frame:SetVisible(true) - else asmlib.SetAsmConvar(oPly, "*luapad", gsToolNameL) end - luapad.AddTab("["..defTab.Nick.."]"..pnSelf:GetText(), fileRead(sFile, "DATA"), sDsv); - if(defTab.Nick == "PIECES") then -- Load the category provider for this DSV - local sCat = fDSV:format(sPref, "CATEGORY"); if(fileExists(sCat,"DATA")) then - luapad.AddTab("[CATEGORY]"..pnSelf:GetText(), fileRead(sCat, "DATA"), sDsv); - end -- This is done so we can distinguish between luapad and other panels - end -- Luapad is designed not to be closed so we need to make it invisible - luapad.Frame:SetVisible(true); luapad.Frame:Center() - luapad.Frame:MakePopup(); conElements:Push({luapad.Frame}) - end, - function() fileDelete(sFile) - asmlib.LogInstance("Delete "..asmlib.GetReport(sFile), sLog..".Button") - if(defTab.Nick == "PIECES") then local sCat = fDSV:format(sPref, "CATEGORY") - if(fileExists(sCat,"DATA")) then fileDelete(sCat) -- Delete category when present - asmlib.LogInstance("Deleted "..asmlib.GetReport(sCat), sLog..".Button") end - end; pnManage:Remove() - end - }; tOptions.Size = #tOptions - for iO = 1, tOptions.Size do local sO = tostring(iO) - local sDescr = languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bt"..sO) - pnMenu:AddOption(sDescr, tOptions[iO]):SetIcon(asmlib.ToIcon("pn_externdb_bt"..sO)) - end; pnMenu:Open() - end - else asmlib.LogInstance("File missing ["..tostring(iP).."]",sLog..".Button") end - xyPos.y = xyPos.y + xySiz.y + xyDsz.y - end - else - asmlib.LogInstance("Missing <"..defTab.Nick..">",sLog) - end - iD = (iD + 1); makTab = asmlib.GetBuilderID(iD) - end; pnFrame:SetVisible(true); pnFrame:Center(); pnFrame:MakePopup() + pnFrame:SetVisible(true); pnFrame:Center(); pnFrame:MakePopup() conElements:Push(pnFrame); asmlib.LogInstance("Success",sLog); return nil end) -- Read client configuration diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index dd46e2ea..9d804ba6 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1849,10 +1849,8 @@ function SetListViewClipboard(pnListView, nX, nY) local mX, mY = inputGetCursorPos() local nX, nY = (tonumber(nX) or mX), (tonumber(nY) or mY) local cC, cX, cY = 0, pnListView:ScreenToLocal(nX, nY) - while(cX > 0) do - cC = (cC + 1) - cX = (cX - pnListView:ColumnWidth(cC)) - end + while(cX > 0) do cC = (cC + 1) + cX = (cX - pnListView:ColumnWidth(cC)) end local nID, pnRow = pnListView:GetSelectedLine() if(nID and nID > 0 and pnRow) then SetClipboardText(pnRow:GetColumnText(cC)) diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 10398045..58407acb 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -119,7 +119,6 @@ tool.trackassembly.pn_export=Click to export the client database as a file tool.trackassembly.pn_export_lb=Export DB tool.trackassembly.pn_routine=The list of your frequently used track pieces tool.trackassembly.pn_routine_hd=Frequent pieces by\: -tool.trackassembly.pn_externdb=The external databases available for\: tool.trackassembly.pn_externdb_hd=External databases by\: tool.trackassembly.pn_externdb_lb=Right click for options\: tool.trackassembly.pn_externdb_ttt=Current modified configuration value\: @@ -127,20 +126,24 @@ tool.trackassembly.pn_externdb_bti=Import tool.trackassembly.pn_externdb_bti_tp=Imports information from the file list into the panel to edit tool.trackassembly.pn_externdb_bte=Export tool.trackassembly.pn_externdb_bte_tp=Exports information from the panel to the file list and apply -tool.trackassembly.pn_externdb_bt1=Copy unique prefix -tool.trackassembly.pn_externdb_bt2=Copy DSV folder path -tool.trackassembly.pn_externdb_bt3=Copy table nick -tool.trackassembly.pn_externdb_bt4=Copy table path -tool.trackassembly.pn_externdb_bt5=Copy table time -tool.trackassembly.pn_externdb_bt6=Copy table size -tool.trackassembly.pn_externdb_bt7=Edit table content (Luapad) -tool.trackassembly.pn_externdb_bt8=Delete database entry -tool.trackassembly.pn_externdb_cm1=Copy cell value -tool.trackassembly.pn_externdb_cm2=Copy whole line -tool.trackassembly.pn_externdb_cm3=Enable/Disable -tool.trackassembly.pn_externdb_cm4=Change line -tool.trackassembly.pn_externdb_cm5=Create line -tool.trackassembly.pn_externdb_cm6=Remove line +tool.trackassembly.pn_externdb_cmcp=Copy +tool.trackassembly.pn_externdb_cmcp1=Cell value +tool.trackassembly.pn_externdb_cmcp2=Unique prefix +tool.trackassembly.pn_externdb_cmcp3=Whole line +tool.trackassembly.pn_externdb_cmcp4=DSV folder path +tool.trackassembly.pn_externdb_cmli=Line +tool.trackassembly.pn_externdb_cmli1=Change +tool.trackassembly.pn_externdb_cmli2=Create +tool.trackassembly.pn_externdb_cmli3=Remove +tool.trackassembly.pn_externdb_cmst=Tables +tool.trackassembly.pn_externdb_cmstt=External databases for\: +tool.trackassembly.pn_externdb_cmst1=Copy table nick +tool.trackassembly.pn_externdb_cmst2=Copy table path +tool.trackassembly.pn_externdb_cmst3=Copy table time +tool.trackassembly.pn_externdb_cmst4=Copy table size +tool.trackassembly.pn_externdb_cmst5=Edit content (Luapad) +tool.trackassembly.pn_externdb_cmst6=Delete database entry +tool.trackassembly.pn_externdb_cmtg=Enable/Disable tool.trackassembly.pn_ext_dsv_lb=External DSV list tool.trackassembly.pn_ext_dsv_hd=External DSV databases list is displayed here tool.trackassembly.pn_ext_dsv_1=Active From ce5af0412b410ef7d5e96506d71c9a8e2efa8301 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sat, 26 Oct 2024 00:01:16 +0300 Subject: [PATCH 048/114] Fixed: Context menu icons not being displayed correctly --- lua/autorun/trackassembly_init.lua | 99 +++++++++---------- lua/trackassembly/trackasmlib.lua | 4 +- .../localization/en/trackassembly.properties | 23 +++-- 3 files changed, 62 insertions(+), 64 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index d3beac58..17815e7b 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.783") +asmlib.SetOpVar("TOOL_VERSION","8.785") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -460,34 +460,33 @@ if(CLIENT) then asmlib.ToIcon(gsToolPrefU.."ADDITIONS" , "bricks" ) asmlib.ToIcon(gsToolPrefU.."PHYSPROPERTIES", "wand" ) asmlib.ToIcon(gsToolPrefL.."context_menu" , "database_gear" ) - asmlib.ToIcon("treemenu_cpy" , "page_copy" ) - asmlib.ToIcon("treemenu_cpy_mod", "brick_go" ) - asmlib.ToIcon("treemenu_cpy_typ", "database_go" ) - asmlib.ToIcon("treemenu_cpy_nam", "script_go" ) - asmlib.ToIcon("treemenu_cpy_pth", "map_go" ) - asmlib.ToIcon("treemenu_ws" , "cart" ) - asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) - asmlib.ToIcon("treemenu_ws_opp" , "world" ) - asmlib.ToIcon("treemenu_expand" , "zoom" ) + asmlib.ToIcon("treemenu_cpy" , "page_copy" ) + asmlib.ToIcon("treemenu_cpy_mod" , "brick_go" ) + asmlib.ToIcon("treemenu_cpy_typ" , "database_go" ) + asmlib.ToIcon("treemenu_cpy_nam" , "script_go" ) + asmlib.ToIcon("treemenu_cpy_pth" , "map_go" ) + asmlib.ToIcon("treemenu_ws" , "cart" ) + asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) + asmlib.ToIcon("treemenu_ws_opp" , "world" ) + asmlib.ToIcon("treemenu_expand" , "zoom" ) asmlib.ToIcon("subfolder_item" , "folder" ) asmlib.ToIcon("pn_externdb_cmcp" , "page_copy" ) asmlib.ToIcon("pn_externdb_cmcp1", "database_go" ) - asmlib.ToIcon("pn_externdb_cmcp2", "database_key" ) - asmlib.ToIcon("pn_externdb_cmcp3", "database_lightning") - asmlib.ToIcon("pn_externdb_cmcp4", "folder_database" ) + asmlib.ToIcon("pn_externdb_cmcp2", "database_lightning") + asmlib.ToIcon("pn_externdb_cmcp3", "folder_database" ) asmlib.ToIcon("pn_externdb_cmtg" , "database_connect" ) asmlib.ToIcon("pn_externdb_cmli" , "database" ) asmlib.ToIcon("pn_externdb_cmli1", "database_edit" ) asmlib.ToIcon("pn_externdb_cmli2", "database_add" ) asmlib.ToIcon("pn_externdb_cmli3", "database_delete" ) asmlib.ToIcon("pn_externdb_cmst" , "database_gear" ) - asmlib.ToIcon("pn_externdb_cmsi" , "database_table" ) - asmlib.ToIcon("pn_externdb_cmst1", "database_table" ) - asmlib.ToIcon("pn_externdb_cmst2", "database_link" ) + asmlib.ToIcon("pn_externdb_cmsi" , "database_key" ) + asmlib.ToIcon("pn_externdb_cmst1", "folder_find" ) + asmlib.ToIcon("pn_externdb_cmst2", "map_go" ) asmlib.ToIcon("pn_externdb_cmst3", "time_go" ) asmlib.ToIcon("pn_externdb_cmst4", "compress" ) - asmlib.ToIcon("pn_externdb_cmst5", "database_edit" ) - asmlib.ToIcon("pn_externdb_cmst6", "database_delete" ) + asmlib.ToIcon("pn_externdb_cmst5", "table_edit" ) + asmlib.ToIcon("pn_externdb_cmst6", "table_delete" ) asmlib.ToIcon("pn_srchcol_lb1" , "brick" ) asmlib.ToIcon("pn_srchcol_lb2" , "package" ) asmlib.ToIcon("pn_srchcol_lb3" , "tag_green" ) @@ -743,16 +742,18 @@ if(CLIENT) then local sDsv = sBas..asmlib.GetOpVar("DIRPATH_DSV") local fDSV = sDsv..("%s"..sPrU.."%s.txt") local sNam = (sBas..sSet..sLib.."_dsv.txt") - local sDel, nB, nW, nH = "\t", 22, pnFrame:GetSize() - xyPos.x, xyPos.y = xyDsz.x, xyDsz.y + local nW, nH = pnFrame:GetSize() + local sDel, nB, nT = "\t", 22, 23 + xyPos.x, xyPos.y = xyDsz.x, (xyDsz.y + nT) xySiz.x = (nW - 2 * xyDsz.x) - xySiz.y = (nH - 2 * xyDsz.y) - 3*xyDsz.y - 2*nB + xySiz.y = (nH - nT - 2*xyDsz.y) - 2*xyDsz.y - 2*nB local wAct = mathFloor(((gnRatio - 1) / 10) * xySiz.x) local wUse, wSrc = mathFloor(xySiz.x - wAct), (xySiz.x * nAut) local pnListView = pnFrame:Add("DListView") if(not IsValid(pnListView)) then pnFrame:Close() asmlib.LogInstance("List view invalid",sLog); return nil end pnListView:SetParent(pnFrame) + pnListView:Dock(TOP) pnListView:SetVisible(true) pnListView:SetSortable(false) pnListView:SetMultiSelect(false) @@ -890,62 +891,60 @@ if(CLIENT) then -- Enable and disable DSV pnMenu:AddOption(languageGetPhrase(sT.."tg"), function() pnLine:SetColumnText(1, ((pnLine:GetColumnText(1) == "V") and "X" or "V")) - end):SetImage(sT.."tg") + end):SetImage(asmlib.ToIcon(sI.."tg")) -- Copy to clipboard various values and things local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."cp")) if(not IsValid(pIn)) then pnFrame:Close() asmlib.LogInstance("Copy menu invalid",sLog..".ListView"); return nil end if(not IsValid(pOp)) then pnFrame:Close() asmlib.LogInstance("Copy opts invalid",sLog..".ListView"); return nil end - pOp:SetIcon(sI.."cp") + pOp:SetIcon(asmlib.ToIcon(sI.."cp")) pIn:AddOption(languageGetPhrase(sT.."cp1"), - function() asmlib.SetListViewClipboard(pnSelf) end):SetImage(sT.."cp1") + function() asmlib.SetListViewClipboard(pnSelf) end):SetImage(asmlib.ToIcon(sI.."cp1")) pIn:AddOption(languageGetPhrase(sT.."cp2"), - function() SetClipboardText(pnLine:GetColumnText(2)) end):SetImage(sT.."cp2") + function() SetClipboardText(convRow(pnLine)) end):SetImage(asmlib.ToIcon(sI.."cp2")) pIn:AddOption(languageGetPhrase(sT.."cp3"), - function() SetClipboardText(convRow(pnLine)) end):SetImage(sT.."cp3") - pIn:AddOption(languageGetPhrase(sT.."cp4"), - function() SetClipboardText(sDsv) end):SetImage(sT.."cp4") + function() SetClipboardText(sDsv) end):SetImage(asmlib.ToIcon(sI.."cp3")) -- Panel data line manipulation for import/export local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."li")) if(not IsValid(pIn)) then pnFrame:Close() asmlib.LogInstance("Internals menu invalid",sLog..".ListView"); return nil end if(not IsValid(pOp)) then pnFrame:Close() asmlib.LogInstance("Internals opts invalid",sLog..".ListView"); return nil end - pOp:SetIcon(sI.."li") + pOp:SetIcon(asmlib.ToIcon(sI.."li")) pIn:AddOption(languageGetPhrase(sT.."li1"), - function() excgRow(pnLine); tpText.New = false end):SetImage(sT.."li1") + function() excgRow(pnLine); tpText.New = false end):SetImage(asmlib.ToIcon(sI.."li1")) pIn:AddOption(languageGetPhrase(sT.."li2"), - function() excgRow(pnLine); tpText.New = true end):SetImage(sT.."li2") + function() excgRow(pnLine); tpText.New = true end):SetImage(asmlib.ToIcon(sI.."li2")) pIn:AddOption(languageGetPhrase(sT.."li3"), - function() pnSelf:RemoveLine(nIndex)):SetImage(sT.."li3") + function() pnSelf:RemoveLine(nIndex) end):SetImage(asmlib.ToIcon(sI.."li3")) -- Manipulate content local settings related to the line local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."st")) if(not IsValid(pIn)) then pnFrame:Close() asmlib.LogInstance("Settings menu invalid",sLog..".ListView"); return nil end if(not IsValid(pOp)) then pnFrame:Close() asmlib.LogInstance("Settings opts invalid",sLog..".ListView"); return nil end - pOp:SetIcon(sI.."st"); pOp:SetTooltip(languageGetPhrase(sI.."stt")) + pOp:SetIcon(asmlib.ToIcon(sI.."st")); pOp:SetTooltip(languageGetPhrase(sI.."stt")) -- Populate the sub-menu with all table nicknames local iD, makTab = 1, asmlib.GetBuilderID(1) while(makTab) do local defTab = makTab:GetDefinition() - local sFile = fDSV:format(sP, defTab.Nick)) + local sFile = fDSV:format(sP, defTab.Nick) local pTb, pOb = pIn:AddSubMenu(defTab.Nick) if(not IsValid(pTb)) then pnFrame:Close() asmlib.LogInstance("Manage menu invalid"..GetReport(iD, defTab.Nick),sLog..".ListView"); return nil end if(not IsValid(pOb)) then pnFrame:Close() asmlib.LogInstance("Manage opts invalid",sLog..".ListView"); return nil end - pOb:SetIcon(sI.."si") - pIn:AddOption(languageGetPhrase(sT.."st1"), - function() SetClipboardText(defTab.Nick) end):SetImage(sT.."st1") - pIn:AddOption(languageGetPhrase(sT.."st2"), - function() SetClipboardText(sFile) end):SetImage(sT.."st2") - pIn:AddOption(languageGetPhrase(sT.."st3"), - function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(sT.."st3") - pIn:AddOption(languageGetPhrase(sT.."st4"), - function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(sT.."st4") - pIn:AddOption(languageGetPhrase(sT.."st5"), + pOb:SetIcon(asmlib.ToIcon(sI.."si")) + pTb:AddOption(languageGetPhrase(sT.."st1"), + function() SetClipboardText(defTab.Nick) end):SetImage(asmlib.ToIcon(sI.."st1")) + pTb:AddOption(languageGetPhrase(sT.."st2"), + function() SetClipboardText(sFile) end):SetImage(asmlib.ToIcon(sI.."st2")) + pTb:AddOption(languageGetPhrase(sT.."st3"), + function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(asmlib.ToIcon(sI.."st3")) + pTb:AddOption(languageGetPhrase(sT.."st4"), + function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(asmlib.ToIcon(sI.."st4")) + pTb:AddOption(languageGetPhrase(sT.."st5"), function() -- Edit the database contents using the Luapad addon if(not luapad) then return end -- Luapad is not installed do nothing asmlib.LogInstance("Modify "..asmlib.GetReport(sFile), sLog..".ListView") @@ -959,15 +958,15 @@ if(CLIENT) then end -- Luapad is designed not to be closed so we need to make it invisible luapad.Frame:SetVisible(true); luapad.Frame:Center() luapad.Frame:MakePopup(); conElements:Push({luapad.Frame}) - end):SetImage(sT.."st5") - pIn:AddOption(languageGetPhrase(sT.."st6"), + end):SetImage(asmlib.ToIcon(sI.."st5")) + pTb:AddOption(languageGetPhrase(sT.."st6"), function() fileDelete(sFile) asmlib.LogInstance("Deleted "..asmlib.GetReport(sFile), sLog..".ListView") if(defTab.Nick == "PIECES") then local sCats = fDSV:format(sP, "CATEGORY") if(fileExists(sCats,"DATA")) then fileDelete(sCats) -- Delete category when present asmlib.LogInstance("Deleted "..asmlib.GetReport(sCats), sLog..".ListView") end end - end):SetImage(sT.."st6") + end):SetImage(asmlib.ToIcon(sI.."st6")) iD = (iD + 1); makTab = asmlib.GetBuilderID(iD) end pnMenu:Open() @@ -1164,10 +1163,10 @@ if(CLIENT) then if(inputIsKeyDown(KEY_LSHIFT)) then local sType local iD, pnLine = pnListView:GetSelectedLine() if(asmlib.IsHere(iD)) then sType = pnLine:GetColumnText(3) - else local model = asmlib.GetAsmConvar("model", "STR") - local oRec = asmlib.CacheQueryPiece(model) + else local sM = asmlib.GetAsmConvar("model", "STR") + local oRec = asmlib.CacheQueryPiece(sM) if(asmlib.IsHere(oRec)) then sType = oRec.Type - else LogInstance("Not piece <"..model..">") end + else LogInstance("Piece invalid "..asmlib.GetReport(iD, sM)) end end asmlib.ExportTypeAR(sType) asmlib.LogInstance("Export type "..asmlib.GetReport(sType), sLog..".Button") diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 9d804ba6..44241139 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1693,7 +1693,7 @@ function UpdateListView(pnListView,frUsed,sCol,sPat) local sDa = tostring(frUsed[iCnt].Data[sCo] or "") if(sDa:find(sPa)) then local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel) - if(not IsValid(pnLine)) then LogInstance("Line invalid "..GetReport(iCnt, sDa, sPa, sCo); return false end + if(not IsValid(pnLine)) then LogInstance("Line invalid "..GetReport(iCnt, sDa, sPa, sCo)); return false end pnLine:SetTooltip(sModel) end end @@ -2284,7 +2284,7 @@ function RegisterPOA(stData, ivID, sP, sO, sA) tOffs[iID] = {}; tOffs = tOffs[iID] -- Allocate a local offset index tOffs.P = NewPOA(); tOffs.O = NewPOA(); tOffs.A = NewPOA() end - LogInstance("Default "..GetReport(sNull, stData.Slot) + LogInstance("Default "..GetReport(sNull, stData.Slot)) if(not tOffs.O:Raw()) then -- To be decoded on spawn via locating tOffs.O:Set(); tOffs.O:Raw(sO) -- Store transform LogInstance("Origin init "..GetReport(iID, sO)) diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 58407acb..7ac241f3 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -127,23 +127,22 @@ tool.trackassembly.pn_externdb_bti_tp=Imports information from the file list int tool.trackassembly.pn_externdb_bte=Export tool.trackassembly.pn_externdb_bte_tp=Exports information from the panel to the file list and apply tool.trackassembly.pn_externdb_cmcp=Copy -tool.trackassembly.pn_externdb_cmcp1=Cell value -tool.trackassembly.pn_externdb_cmcp2=Unique prefix -tool.trackassembly.pn_externdb_cmcp3=Whole line -tool.trackassembly.pn_externdb_cmcp4=DSV folder path +tool.trackassembly.pn_externdb_cmcp1=Box value +tool.trackassembly.pn_externdb_cmcp2=Entire row +tool.trackassembly.pn_externdb_cmcp3=File path tool.trackassembly.pn_externdb_cmli=Line tool.trackassembly.pn_externdb_cmli1=Change tool.trackassembly.pn_externdb_cmli2=Create tool.trackassembly.pn_externdb_cmli3=Remove tool.trackassembly.pn_externdb_cmst=Tables -tool.trackassembly.pn_externdb_cmstt=External databases for\: -tool.trackassembly.pn_externdb_cmst1=Copy table nick -tool.trackassembly.pn_externdb_cmst2=Copy table path -tool.trackassembly.pn_externdb_cmst3=Copy table time -tool.trackassembly.pn_externdb_cmst4=Copy table size -tool.trackassembly.pn_externdb_cmst5=Edit content (Luapad) -tool.trackassembly.pn_externdb_cmst6=Delete database entry -tool.trackassembly.pn_externdb_cmtg=Enable/Disable +tool.trackassembly.pn_externdb_cmstt=Databases for\: +tool.trackassembly.pn_externdb_cmst1=Copy nick +tool.trackassembly.pn_externdb_cmst2=Copy path +tool.trackassembly.pn_externdb_cmst3=Copy time +tool.trackassembly.pn_externdb_cmst4=Copy size +tool.trackassembly.pn_externdb_cmst5=Edit (Luapad) +tool.trackassembly.pn_externdb_cmst6=Delete files +tool.trackassembly.pn_externdb_cmtg=Toggle tool.trackassembly.pn_ext_dsv_lb=External DSV list tool.trackassembly.pn_ext_dsv_hd=External DSV databases list is displayed here tool.trackassembly.pn_ext_dsv_1=Active From b2c7e342fc272dec26c8243da7246d8cb4ce8095 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Mon, 28 Oct 2024 11:23:36 +0200 Subject: [PATCH 049/114] Removed: Translation `pn_externdb_lb` not needed anymore Added: `Export type` option when right-click on a tree type --- lua/autorun/trackassembly_init.lua | 5 +-- lua/trackassembly/trackasmlib.lua | 35 ++++++++++++------- .../localization/bg/trackassembly.properties | 1 - .../localization/en/trackassembly.properties | 2 +- .../localization/fr/trackassembly.properties | 1 - .../localization/ja/trackassembly.properties | 1 - .../localization/ru/trackassembly.properties | 1 - .../zh-cn/trackassembly.properties | 1 - 8 files changed, 27 insertions(+), 20 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 17815e7b..0375efae 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.785") +asmlib.SetOpVar("TOOL_VERSION","8.786") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -469,6 +469,7 @@ if(CLIENT) then asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) asmlib.ToIcon("treemenu_ws_opp" , "world" ) asmlib.ToIcon("treemenu_expand" , "zoom" ) + asmlib.ToIcon("treemenu_export" , "script_code" ) asmlib.ToIcon("subfolder_item" , "folder" ) asmlib.ToIcon("pn_externdb_cmcp" , "page_copy" ) asmlib.ToIcon("pn_externdb_cmcp1", "database_go" ) @@ -1168,7 +1169,7 @@ if(CLIENT) then if(asmlib.IsHere(oRec)) then sType = oRec.Type else LogInstance("Piece invalid "..asmlib.GetReport(iD, sM)) end end - asmlib.ExportTypeAR(sType) + asmlib.ExportTypeRun(sType) asmlib.LogInstance("Export type "..asmlib.GetReport(sType), sLog..".Button") else asmlib.ExportCategory(3) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 44241139..320055e4 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1623,11 +1623,9 @@ function SetAction(sKey, fAct, tDat) LogInstance("Action mismatch "..GetReport(fAct)); return nil end if(not libAction[sKey]) then libAction[sKey] = {} end local tAct = libAction[sKey]; tAct.Act, tAct.Dat = fAct, {} - if(istable(tDat)) then - for key, val in pairs(tDat) do - tAct.Dat[key] = tDat[key] - end - else tAct.Dat = {tDat} end + if(istable(tDat)) then -- Must support vectors and angles + for key, val in pairs(tDat) do tAct.Dat[key] = tDat[key] end + else tAct.Dat = {tDat} end -- Shared data must always be table tAct.Dat.Slot = sKey; return true end @@ -1727,10 +1725,16 @@ function OpenNodeMenu(pnBase) local sM, sI = GetOpVar("TOOLNAME_NL"), "treemenu_" local sT = "tool."..sM.."."..sI local sID = WorkshopID(pT:GetText()) + local bEx = asmlib.GetAsmConvar("exportdb", "BUL") -- Copy node information local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."cpy")) if(not IsValid(pIn)) then LogInstance("Base copy invalid"); return nil end + -- Panel handling + if(not pnBase.Content) then + pMenu:AddOption(languageGetPhrase(sT.."expand"), function() SetNodeExpand(pnBase) end):SetIcon(ToIcon(sI.."expand")) + end + -- Copy various strings pOp:SetIcon(ToIcon(sI.."cpy")) if(pnBase.Content) then pIn:AddOption(languageGetPhrase(sT.."cpy_mod"), function() SetClipboardText(pnBase.Content) end):SetIcon(ToIcon(sI.."cpy_mod")) @@ -1748,9 +1752,14 @@ function OpenNodeMenu(pnBase) pIn:AddOption(languageGetPhrase(sT.."ws_cid"), function() SetClipboardText(sID) end):SetIcon(ToIcon(sI.."ws_cid")) pIn:AddOption(languageGetPhrase(sT.."ws_opp"), function() guiOpenURL(sUR:format(sID)) end):SetIcon(ToIcon(sI.."ws_opp")) end - -- Panel handling - if(not pnBase.Content) then - pMenu:AddOption(languageGetPhrase(sT.."expand"), function() SetNodeExpand(pnBase) end):SetIcon(ToIcon(sI.."expand")) + -- Export database contents on autorun + if(bEx and pnBase == pT) then + pMenu:AddOption(languageGetPhrase(sT.."export"), function() + local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then + LogInstance("Player invalid"); return nil end + LogInstance("Export "..asmlib.GetReport(oPly:Nick(), pT:GetText())) + ExportTypeRun(pT:GetText()); asmlib.SetAsmConvar(oPly, "exportdb", 0) + end):SetIcon(ToIcon(sI.."export")) end pMenu:Open() end @@ -4071,11 +4080,13 @@ end * to the database by using external plugable DSV prefix list * sType > Track type the autorun file is created for ]] -function ExportTypeAR(sType) - if(SERVER) then return nil end - if(IsBlank(sType)) then return nil end +function ExportTypeRun(sType) + if(SERVER) then + LogInstance("Working on server"); return end + if(IsBlank(sType)) then + LogInstance("Track type blank"); return end local qPieces, qAdditions - local sFunc = "ExportTypeAR" + local sFunc = "ExportTypeRun" local sBase = GetOpVar("DIRPATH_BAS") local noSQL = GetOpVar("MISS_NOSQL") local sTool = GetOpVar("TOOLNAME_NL") diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index 8afe1276..5a6de253 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -121,7 +121,6 @@ tool.trackassembly.pn_routine=Списъкът с редовно използв tool.trackassembly.pn_routine_hd=Редовни парчета на\: tool.trackassembly.pn_externdb=Налични външни бази данни на\: tool.trackassembly.pn_externdb_hd=Външни бази данни на\: -tool.trackassembly.pn_externdb_lb=Десен клик за опции\: tool.trackassembly.pn_externdb_ttt=Текущата стойност от конфигурацията\: tool.trackassembly.pn_externdb_bti=Импорт tool.trackassembly.pn_externdb_bti_tp=Импортира информацията от файла към панела за редактиране diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 7ac241f3..2a19e9ef 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -120,7 +120,6 @@ tool.trackassembly.pn_export_lb=Export DB tool.trackassembly.pn_routine=The list of your frequently used track pieces tool.trackassembly.pn_routine_hd=Frequent pieces by\: tool.trackassembly.pn_externdb_hd=External databases by\: -tool.trackassembly.pn_externdb_lb=Right click for options\: tool.trackassembly.pn_externdb_ttt=Current modified configuration value\: tool.trackassembly.pn_externdb_bti=Import tool.trackassembly.pn_externdb_bti_tp=Imports information from the file list into the panel to edit @@ -171,6 +170,7 @@ tool.trackassembly.treemenu_cpy_pth=Path tool.trackassembly.treemenu_ws=Workshop tool.trackassembly.treemenu_ws_cid=Copy WID tool.trackassembly.treemenu_ws_opp=Open page +tool.trackassembly.treemenu_export=Export type tool.trackassembly.treemenu_expand=Expand node tool.trackassembly.sizeucs=Scale set for the coordinate systems displayed tool.trackassembly.sizeucs_con=Scale UCS\: diff --git a/resource/localization/fr/trackassembly.properties b/resource/localization/fr/trackassembly.properties index 4f0143c2..dc1862de 100644 --- a/resource/localization/fr/trackassembly.properties +++ b/resource/localization/fr/trackassembly.properties @@ -113,7 +113,6 @@ tool.trackassembly.pn_routine=La liste de vos pièces de pistes utilisées fréq tool.trackassembly.pn_routine_hd=Pièces fréquents par\: tool.trackassembly.pn_externdb=Les base de données disponibles pour\: tool.trackassembly.pn_externdb_hd=Base de données de\: -tool.trackassembly.pn_externdb_lb=Clic droit pour les options\: tool.trackassembly.pn_externdb_bt1=Copier préfixe unique tool.trackassembly.pn_externdb_bt2=Copier chemin dossier DSV tool.trackassembly.pn_externdb_bt3=Copier le nom de la table diff --git a/resource/localization/ja/trackassembly.properties b/resource/localization/ja/trackassembly.properties index 667950eb..87f3ec60 100644 --- a/resource/localization/ja/trackassembly.properties +++ b/resource/localization/ja/trackassembly.properties @@ -82,7 +82,6 @@ tool.trackassembly.pn_routine=よく使った線路部分表 tool.trackassembly.pn_routine_hd=よく使った部分\: tool.trackassembly.pn_externdb=使用可能外部データベース\: tool.trackassembly.pn_externdb_hd=外部データベース\: -tool.trackassembly.pn_externdb_lb=右クリックでオプション\: tool.trackassembly.pn_externdb_bt1=特異プレフィックスをコピーして tool.trackassembly.pn_externdb_bt2=DSVフォルダーをコピーして tool.trackassembly.pn_externdb_bt3=テーブルニックネームをコピーして diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index 163a5af2..a727e128 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -86,7 +86,6 @@ tool.trackassembly.pn_routine=Список регулярно используе tool.trackassembly.pn_routine_hd=Часто используемых кусков пользователя\: tool.trackassembly.pn_externdb=Внешние базы данных доступные для\: tool.trackassembly.pn_externdb_hd=Внешние базы данных для\: -tool.trackassembly.pn_externdb_lb=Нажмите правой для вариантов\: tool.trackassembly.pn_externdb_bt1=Скопировать префикс tool.trackassembly.pn_externdb_bt2=Скопировать път папку DSV tool.trackassembly.pn_externdb_bt3=Скопировать ник таблицу diff --git a/resource/localization/zh-cn/trackassembly.properties b/resource/localization/zh-cn/trackassembly.properties index 60777a86..aae58676 100644 --- a/resource/localization/zh-cn/trackassembly.properties +++ b/resource/localization/zh-cn/trackassembly.properties @@ -121,7 +121,6 @@ tool.trackassembly.pn_routine=您经常使用的轨道列表 tool.trackassembly.pn_routine_hd=常用组件\: tool.trackassembly.pn_externdb=外部数据库可用于\: tool.trackassembly.pn_externdb_hd=外部数据库由\: -tool.trackassembly.pn_externdb_lb=右键单击选项\: tool.trackassembly.pn_externdb_ttt=当前修改的配置值\: tool.trackassembly.pn_externdb_bti=输入 tool.trackassembly.pn_externdb_bti_tp=将文件列表中的信息导入面板中进行编辑 From 03644d746b854221658d87a7f2b6533739098a56 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Mon, 28 Oct 2024 11:44:53 +0200 Subject: [PATCH 050/114] Reverted: Expand panel location --- lua/autorun/trackassembly_init.lua | 4 +++- lua/trackassembly/trackasmlib.lua | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 0375efae..72bac0c9 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.786") +asmlib.SetOpVar("TOOL_VERSION","8.788") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -973,6 +973,8 @@ if(CLIENT) then pnMenu:Open() end -- Process only the right mouse button end -- Populate the tables for every database + pnFrame:InvalidateChildren() + pnFrame:ApplySchemeSettings() pnFrame:SetVisible(true); pnFrame:Center(); pnFrame:MakePopup() conElements:Push(pnFrame); asmlib.LogInstance("Success",sLog); return nil end) -- Read client configuration diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 320055e4..7b725905 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1730,10 +1730,6 @@ function OpenNodeMenu(pnBase) local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."cpy")) if(not IsValid(pIn)) then LogInstance("Base copy invalid"); return nil end - -- Panel handling - if(not pnBase.Content) then - pMenu:AddOption(languageGetPhrase(sT.."expand"), function() SetNodeExpand(pnBase) end):SetIcon(ToIcon(sI.."expand")) - end -- Copy various strings pOp:SetIcon(ToIcon(sI.."cpy")) if(pnBase.Content) then @@ -1752,6 +1748,10 @@ function OpenNodeMenu(pnBase) pIn:AddOption(languageGetPhrase(sT.."ws_cid"), function() SetClipboardText(sID) end):SetIcon(ToIcon(sI.."ws_cid")) pIn:AddOption(languageGetPhrase(sT.."ws_opp"), function() guiOpenURL(sUR:format(sID)) end):SetIcon(ToIcon(sI.."ws_opp")) end + -- Panel handling + if(not pnBase.Content) then + pMenu:AddOption(languageGetPhrase(sT.."expand"), function() SetNodeExpand(pnBase) end):SetIcon(ToIcon(sI.."expand")) + end -- Export database contents on autorun if(bEx and pnBase == pT) then pMenu:AddOption(languageGetPhrase(sT.."export"), function() From 89348d9933f76abb866114b06a8b0c77ee439316 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Mon, 28 Oct 2024 16:52:56 +0200 Subject: [PATCH 051/114] Fixed: Context menu `box` copy returning the incorrect row due to different cords Fixed: External DB manager closing its panel when no line is selected on entry Fixed: External DB manager creating new DSV when edit is triggered Added: Routine pieces context menu Added: Function to export list-view rows Added: Translation for the routine pieces context menu --- lua/autorun/trackassembly_init.lua | 252 ++++++++++-------- lua/trackassembly/trackasmlib.lua | 24 +- .../localization/en/trackassembly.properties | 11 + 3 files changed, 166 insertions(+), 121 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 72bac0c9..2bbe68ce 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.788") +asmlib.SetOpVar("TOOL_VERSION","8.789") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -470,7 +470,14 @@ if(CLIENT) then asmlib.ToIcon("treemenu_ws_opp" , "world" ) asmlib.ToIcon("treemenu_expand" , "zoom" ) asmlib.ToIcon("treemenu_export" , "script_code" ) - asmlib.ToIcon("subfolder_item" , "folder" ) + asmlib.ToIcon("subfolder_item" , "folder_brick" ) + asmlib.ToIcon("pn_routine_cmcp" , "page_copy" ) + asmlib.ToIcon("pn_routine_cmcpmd", "brick" ) + asmlib.ToIcon("pn_routine_cmcpbv", "brick_go" ) + asmlib.ToIcon("pn_routine_cmcprw", "brick_link" ) + asmlib.ToIcon("pn_routine_cmws" , "cart" ) + asmlib.ToIcon("pn_routine_cmwsid", "key_go" ) + asmlib.ToIcon("pn_routine_cmwsop", "world" ) asmlib.ToIcon("pn_externdb_cmcp" , "page_copy" ) asmlib.ToIcon("pn_externdb_cmcp1", "database_go" ) asmlib.ToIcon("pn_externdb_cmcp2", "database_lightning") @@ -750,11 +757,10 @@ if(CLIENT) then xySiz.y = (nH - nT - 2*xyDsz.y) - 2*xyDsz.y - 2*nB local wAct = mathFloor(((gnRatio - 1) / 10) * xySiz.x) local wUse, wSrc = mathFloor(xySiz.x - wAct), (xySiz.x * nAut) - local pnListView = pnFrame:Add("DListView") + local pnListView = vguiCreate("DListView") if(not IsValid(pnListView)) then pnFrame:Close() asmlib.LogInstance("List view invalid",sLog); return nil end pnListView:SetParent(pnFrame) - pnListView:Dock(TOP) pnListView:SetVisible(true) pnListView:SetSortable(false) pnListView:SetMultiSelect(false) @@ -785,9 +791,6 @@ if(CLIENT) then ..languageGetPhrase("tool."..gsToolNameL..".pn_ext_dsv_"..iC)) xyPos.x = xyPos.x + xySiz.x + xyDsz.x; tpText[iC] = pnText pnText.OnEnter = function(pnSelf) - local nID, pnRow = pnListView:GetSelectedLine() - if(not IsValid(pnRow)) then pnFrame:Close() - asmlib.LogInstance("Line invalid", sLog..".TextEntry"); return nil end local tDat, sMis = {}, asmlib.GetOpVar("MISS_NOAV") for iV = 1, tpText.Size do tDat[iV] = tpText[iV]:GetValue() end -- Active line. Contains X/V @@ -800,11 +803,15 @@ if(CLIENT) then -- Additional information. It can be anything tDat[3] = tostring(tDat[3] or ""):Trim() tDat[3] = (asmlib.IsBlank(tDat[3]) and sMis or tDat[3]) - if(not asmlib.IsBlank(tDat[1]) and not asmlib.IsBlank(tDat[2])) then - if(nID and nID > 0 and pnRow and not tpText.New) then - for iU = 1, tpText.Size do pnRow:SetColumnText(iU, tDat[iU]) end - else pnListView:AddLine(tDat[1], tDat[2], tDat[3]):SetTooltip(tDat[3]) - end; end; for iV = 1, tpText.Size do tpText[iV]:SetValue(""); tpText[iV]:SetText("") end + if(asmlib.IsBlank(tDat[1])) then return end + if(asmlib.IsBlank(tDat[2])) then return end + local iD, pnRow = pnListView:GetSelectedLine() + if(asmlib.IsHere(iD) and IsValid(pnRow)) then + if(iD and iD > 0 and pnRow and tpText.Chg) then tpText.Chg = nil + for iU = 1, tpText.Size do pnRow:SetColumnText(iU, tDat[iU]) end + else pnListView:AddLine(tDat[1], tDat[2], tDat[3]):SetTooltip(tDat[3]) end + else pnListView:AddLine(tDat[1], tDat[2], tDat[3]):SetTooltip(tDat[3]) end + for iV = 1, tpText.Size do tpText[iV]:SetValue(""); tpText[iV]:SetText("") end end end -- Import button. when clicked loads file into the panel @@ -865,14 +872,6 @@ if(CLIENT) then oDSV:Write(sAct..sPrf..sPth.."\n") end; oDSV:Flush(); oDSV:Close() end - local function convRow(pnRow) - local sSep = asmlib.GetOpVar("OPSYM_VERTDIV") - local sAct = pnRow:GetColumnText(1) -- Active - local sPrf = pnRow:GetColumnText(2) -- PK - local sPth = pnRow:GetColumnText(3) -- Path - if(not asmlib.IsBlank(sPth)) then sPth = sSep..sPth end - return (sAct..sSep..sPrf..sPth) -- Divided - end local function excgRow(pnRow) for iV = 1, tpText.Size do local ptx = tpText[iV] -- Pick a panel @@ -881,100 +880,96 @@ if(CLIENT) then end -- Exchange data with list view and text end pnListView.OnRowRightClick = function(pnSelf, nIndex, pnLine) - if(inputIsMouseDown(MOUSE_RIGHT)) then - local pnMenu = vguiCreate("DMenu") - if(not IsValid(pnMenu)) then pnFrame:Close() - asmlib.LogInstance("Menu invalid",sLog..".ListView"); return nil end - local sI = "pn_externdb_cm" - local sP = pnLine:GetColumnText(2) - local mX, mY = inputGetCursorPos() - local sT = ("tool."..gsToolNameL.."."..sI) - -- Enable and disable DSV - pnMenu:AddOption(languageGetPhrase(sT.."tg"), - function() pnLine:SetColumnText(1, ((pnLine:GetColumnText(1) == "V") and "X" or "V")) - end):SetImage(asmlib.ToIcon(sI.."tg")) - -- Copy to clipboard various values and things - local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."cp")) - if(not IsValid(pIn)) then pnFrame:Close() - asmlib.LogInstance("Copy menu invalid",sLog..".ListView"); return nil end - if(not IsValid(pOp)) then pnFrame:Close() - asmlib.LogInstance("Copy opts invalid",sLog..".ListView"); return nil end - pOp:SetIcon(asmlib.ToIcon(sI.."cp")) - pIn:AddOption(languageGetPhrase(sT.."cp1"), - function() asmlib.SetListViewClipboard(pnSelf) end):SetImage(asmlib.ToIcon(sI.."cp1")) - pIn:AddOption(languageGetPhrase(sT.."cp2"), - function() SetClipboardText(convRow(pnLine)) end):SetImage(asmlib.ToIcon(sI.."cp2")) - pIn:AddOption(languageGetPhrase(sT.."cp3"), - function() SetClipboardText(sDsv) end):SetImage(asmlib.ToIcon(sI.."cp3")) - -- Panel data line manipulation for import/export - local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."li")) - if(not IsValid(pIn)) then pnFrame:Close() - asmlib.LogInstance("Internals menu invalid",sLog..".ListView"); return nil end - if(not IsValid(pOp)) then pnFrame:Close() - asmlib.LogInstance("Internals opts invalid",sLog..".ListView"); return nil end - pOp:SetIcon(asmlib.ToIcon(sI.."li")) - pIn:AddOption(languageGetPhrase(sT.."li1"), - function() excgRow(pnLine); tpText.New = false end):SetImage(asmlib.ToIcon(sI.."li1")) - pIn:AddOption(languageGetPhrase(sT.."li2"), - function() excgRow(pnLine); tpText.New = true end):SetImage(asmlib.ToIcon(sI.."li2")) - pIn:AddOption(languageGetPhrase(sT.."li3"), - function() pnSelf:RemoveLine(nIndex) end):SetImage(asmlib.ToIcon(sI.."li3")) - -- Manipulate content local settings related to the line - local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."st")) - if(not IsValid(pIn)) then pnFrame:Close() - asmlib.LogInstance("Settings menu invalid",sLog..".ListView"); return nil end - if(not IsValid(pOp)) then pnFrame:Close() - asmlib.LogInstance("Settings opts invalid",sLog..".ListView"); return nil end - pOp:SetIcon(asmlib.ToIcon(sI.."st")); pOp:SetTooltip(languageGetPhrase(sI.."stt")) - -- Populate the sub-menu with all table nicknames - local iD, makTab = 1, asmlib.GetBuilderID(1) - while(makTab) do - local defTab = makTab:GetDefinition() - local sFile = fDSV:format(sP, defTab.Nick) - local pTb, pOb = pIn:AddSubMenu(defTab.Nick) - if(not IsValid(pTb)) then pnFrame:Close() - asmlib.LogInstance("Manage menu invalid"..GetReport(iD, defTab.Nick),sLog..".ListView"); return nil end - if(not IsValid(pOb)) then pnFrame:Close() - asmlib.LogInstance("Manage opts invalid",sLog..".ListView"); return nil end - pOb:SetIcon(asmlib.ToIcon(sI.."si")) - pTb:AddOption(languageGetPhrase(sT.."st1"), - function() SetClipboardText(defTab.Nick) end):SetImage(asmlib.ToIcon(sI.."st1")) - pTb:AddOption(languageGetPhrase(sT.."st2"), - function() SetClipboardText(sFile) end):SetImage(asmlib.ToIcon(sI.."st2")) - pTb:AddOption(languageGetPhrase(sT.."st3"), - function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(asmlib.ToIcon(sI.."st3")) - pTb:AddOption(languageGetPhrase(sT.."st4"), - function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(asmlib.ToIcon(sI.."st4")) - pTb:AddOption(languageGetPhrase(sT.."st5"), - function() -- Edit the database contents using the Luapad addon - if(not luapad) then return end -- Luapad is not installed do nothing - asmlib.LogInstance("Modify "..asmlib.GetReport(sFile), sLog..".ListView") - if(luapad.Frame) then luapad.Frame:SetVisible(true) - else asmlib.SetAsmConvar(oPly, "*luapad", gsToolNameL) end - luapad.AddTab("["..defTab.Nick.."]"..defTab.Nick, fileRead(sFile, "DATA"), sDsv); - if(defTab.Nick == "PIECES") then -- Load the category provider for this DSV - local sCats = fDSV:format(sP, "CATEGORY"); if(fileExists(sCats,"DATA")) then - luapad.AddTab("[CATEGORY]"..defTab.Nick, fileRead(sCats, "DATA"), sDsv); - end -- This is done so we can distinguish between luapad and other panels - end -- Luapad is designed not to be closed so we need to make it invisible - luapad.Frame:SetVisible(true); luapad.Frame:Center() - luapad.Frame:MakePopup(); conElements:Push({luapad.Frame}) - end):SetImage(asmlib.ToIcon(sI.."st5")) - pTb:AddOption(languageGetPhrase(sT.."st6"), - function() fileDelete(sFile) - asmlib.LogInstance("Deleted "..asmlib.GetReport(sFile), sLog..".ListView") - if(defTab.Nick == "PIECES") then local sCats = fDSV:format(sP, "CATEGORY") - if(fileExists(sCats,"DATA")) then fileDelete(sCats) -- Delete category when present - asmlib.LogInstance("Deleted "..asmlib.GetReport(sCats), sLog..".ListView") end - end - end):SetImage(asmlib.ToIcon(sI.."st6")) - iD = (iD + 1); makTab = asmlib.GetBuilderID(iD) - end - pnMenu:Open() - end -- Process only the right mouse button + local pnMenu = vguiCreate("DMenu") + if(not IsValid(pnMenu)) then pnFrame:Close() + asmlib.LogInstance("Menu invalid",sLog..".ListView"); return nil end + local sI = "pn_externdb_cm" + local sP = pnLine:GetColumnText(2) + local mX, mY = inputGetCursorPos() + local sT = ("tool."..gsToolNameL.."."..sI) + -- Enable and disable DSV + pnMenu:AddOption(languageGetPhrase(sT.."tg"), + function() pnLine:SetColumnText(1, ((pnLine:GetColumnText(1) == "V") and "X" or "V")) + end):SetImage(asmlib.ToIcon(sI.."tg")) + -- Copy to clipboard various values and things + local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."cp")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Copy menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Copy opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(asmlib.ToIcon(sI.."cp")) + pIn:AddOption(languageGetPhrase(sT.."cp1"), + function() asmlib.SetListViewBoxClipboard(pnSelf, mX, mY) end):SetImage(asmlib.ToIcon(sI.."cp1")) + pIn:AddOption(languageGetPhrase(sT.."cp2"), + function() asmlib.SetListViewRowClipboard(pnSelf) end):SetImage(asmlib.ToIcon(sI.."cp2")) + pIn:AddOption(languageGetPhrase(sT.."cp3"), + function() SetClipboardText(sDsv) end):SetImage(asmlib.ToIcon(sI.."cp3")) + -- Panel data line manipulation for import/export + local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."li")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Internals menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Internals opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(asmlib.ToIcon(sI.."li")) + pIn:AddOption(languageGetPhrase(sT.."li1"), + function() excgRow(pnLine); tpText.Chg = true end):SetImage(asmlib.ToIcon(sI.."li1")) + pIn:AddOption(languageGetPhrase(sT.."li2"), + function() excgRow(pnLine); tpText.Chg = nil end):SetImage(asmlib.ToIcon(sI.."li2")) + pIn:AddOption(languageGetPhrase(sT.."li3"), + function() pnSelf:RemoveLine(nIndex) end):SetImage(asmlib.ToIcon(sI.."li3")) + -- Manipulate content local settings related to the line + local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."st")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Settings menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Settings opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(asmlib.ToIcon(sI.."st")); pOp:SetTooltip(languageGetPhrase(sI.."stt")) + -- Populate the sub-menu with all table nicknames + local iD, makTab = 1, asmlib.GetBuilderID(1) + while(makTab) do + local defTab = makTab:GetDefinition() + local sFile = fDSV:format(sP, defTab.Nick) + local pTb, pOb = pIn:AddSubMenu(defTab.Nick) + if(not IsValid(pTb)) then pnFrame:Close() + asmlib.LogInstance("Manage menu invalid"..GetReport(iD, defTab.Nick),sLog..".ListView"); return nil end + if(not IsValid(pOb)) then pnFrame:Close() + asmlib.LogInstance("Manage opts invalid",sLog..".ListView"); return nil end + pOb:SetIcon(asmlib.ToIcon(sI.."si")) + pTb:AddOption(languageGetPhrase(sT.."st1"), + function() SetClipboardText(defTab.Nick) end):SetImage(asmlib.ToIcon(sI.."st1")) + pTb:AddOption(languageGetPhrase(sT.."st2"), + function() SetClipboardText(sFile) end):SetImage(asmlib.ToIcon(sI.."st2")) + pTb:AddOption(languageGetPhrase(sT.."st3"), + function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(asmlib.ToIcon(sI.."st3")) + pTb:AddOption(languageGetPhrase(sT.."st4"), + function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(asmlib.ToIcon(sI.."st4")) + pTb:AddOption(languageGetPhrase(sT.."st5"), + function() -- Edit the database contents using the Luapad addon + if(not luapad) then return end -- Luapad is not installed do nothing + asmlib.LogInstance("Modify "..asmlib.GetReport(sFile), sLog..".ListView") + if(luapad.Frame) then luapad.Frame:SetVisible(true) + else asmlib.SetAsmConvar(oPly, "*luapad", gsToolNameL) end + luapad.AddTab("["..defTab.Nick.."]"..defTab.Nick, fileRead(sFile, "DATA"), sDsv); + if(defTab.Nick == "PIECES") then -- Load the category provider for this DSV + local sCats = fDSV:format(sP, "CATEGORY"); if(fileExists(sCats,"DATA")) then + luapad.AddTab("[CATEGORY]"..defTab.Nick, fileRead(sCats, "DATA"), sDsv); + end -- This is done so we can distinguish between luapad and other panels + end -- Luapad is designed not to be closed so we need to make it invisible + luapad.Frame:SetVisible(true); luapad.Frame:Center() + luapad.Frame:MakePopup(); conElements:Push({luapad.Frame}) + end):SetImage(asmlib.ToIcon(sI.."st5")) + pTb:AddOption(languageGetPhrase(sT.."st6"), + function() fileDelete(sFile) + asmlib.LogInstance("Deleted "..asmlib.GetReport(sFile), sLog..".ListView") + if(defTab.Nick == "PIECES") then local sCats = fDSV:format(sP, "CATEGORY") + if(fileExists(sCats,"DATA")) then fileDelete(sCats) -- Delete category when present + asmlib.LogInstance("Deleted "..asmlib.GetReport(sCats), sLog..".ListView") end + end + end):SetImage(asmlib.ToIcon(sI.."st6")) + iD = (iD + 1); makTab = asmlib.GetBuilderID(iD) + end + pnMenu:Open() end -- Populate the tables for every database - pnFrame:InvalidateChildren() - pnFrame:ApplySchemeSettings() pnFrame:SetVisible(true); pnFrame:Center(); pnFrame:MakePopup() conElements:Push(pnFrame); asmlib.LogInstance("Success",sLog); return nil end) -- Read client configuration @@ -1155,7 +1150,36 @@ if(CLIENT) then asmlib.SetAsmConvar(oPly, "model" , uiMod) end -- Copy the line model to the clipboard so it can be pasted with Ctrl+V pnListView.OnRowRightClick = function(pnSelf, nIndex, pnLine) - asmlib.SetListViewClipboard(pnSelf) + local sI = "pn_routine_cm" + local sT = "tool.trackassembly."..sI + local mX, mY = inputGetCursorPos() + local sID = asmlib.WorkshopID(pnLine:GetColumnText(3)) + local pMenu = vguiCreate("DMenu") + if(not IsValid(pMenu)) then pnFrame:Close() + asmlib.LogInstance("Menu invalid",sLog..".ListView"); return nil end + -- Copy to clipboard various values and things + local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."cp")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Copy menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Copy opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(asmlib.ToIcon(sI.."cp")) + pIn:AddOption(languageGetPhrase(sT.."cpmd"), + function() SetClipboardText(pnLine:GetColumnText(5)) end):SetImage(asmlib.ToIcon(sI.."cpmd")) + pIn:AddOption(languageGetPhrase(sT.."cpbv"), + function() asmlib.SetListViewBoxClipboard(pnSelf, mX, mY) end):SetImage(asmlib.ToIcon(sI.."cpbv")) + pIn:AddOption(languageGetPhrase(sT.."cprw"), + function() asmlib.SetListViewRowClipboard(pnSelf) end):SetImage(asmlib.ToIcon(sI.."cprw")) + if(sID) then + local sUR = asmlib.GetOpVar("FORM_URLADDON") + local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."ws")) + if(not IsValid(pIn)) then + LogInstance("Base WS invalid"); return nil end + pOp:SetIcon(asmlib.ToIcon(sI.."ws")) + pIn:AddOption(languageGetPhrase(sT.."wsid"), function() SetClipboardText(sID) end):SetIcon(asmlib.ToIcon(sI.."wsid")) + pIn:AddOption(languageGetPhrase(sT.."wsop"), function() guiOpenURL(sUR:format(sID)) end):SetIcon(asmlib.ToIcon(sI.."wsop")) + end + pMenu:Open() end if(not asmlib.UpdateListView(pnListView,frUsed)) then asmlib.LogInstance("Populate the list view failed",sLog); return nil end diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 7b725905..b91eb8b5 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1854,16 +1854,26 @@ function GetFrequentPieces(iCnt) LogInstance("Array is empty or not available"); return nil end -function SetListViewClipboard(pnListView, nX, nY) - local mX, mY = inputGetCursorPos() +function SetListViewRowClipboard(pnListView) + local nID, pnRow = pnListView:GetSelectedLine() + if(not (nID and nID > 0 and pnRow)) then return "" end + local sD = (GetOpVar("OPSYM_VERTDIV") or "|") + sD = tostring(sD):sub(1, 1) -- First symbol + local iSize, sP = #pnListView.Columns, sD + for iD = 1, iSize do + sP = sP..pnRow:GetColumnText(iD)..sD + end; SetClipboardText(sP) +end + +function SetListViewBoxClipboard(pnListView, nX, nY) + local nID, pnRow = pnListView:GetSelectedLine() + if(not (nID and nID > 0 and pnRow)) then return "" end + local cC, mX, mY = 0, inputGetCursorPos() local nX, nY = (tonumber(nX) or mX), (tonumber(nY) or mY) - local cC, cX, cY = 0, pnListView:ScreenToLocal(nX, nY) + local cX, cY = pnListView:ScreenToLocal(nX, nY) while(cX > 0) do cC = (cC + 1) cX = (cX - pnListView:ColumnWidth(cC)) end - local nID, pnRow = pnListView:GetSelectedLine() - if(nID and nID > 0 and pnRow) then - SetClipboardText(pnRow:GetColumnText(cC)) - end + SetClipboardText(pnRow:GetColumnText(cC)) end function SetComboBoxClipboard(pnCombo) diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 2a19e9ef..a5f1a477 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -119,6 +119,13 @@ tool.trackassembly.pn_export=Click to export the client database as a file tool.trackassembly.pn_export_lb=Export DB tool.trackassembly.pn_routine=The list of your frequently used track pieces tool.trackassembly.pn_routine_hd=Frequent pieces by\: +tool.trackassembly.pn_routine_cmcp=Copy +tool.trackassembly.pn_routine_cmcpmd=Row model +tool.trackassembly.pn_routine_cmcpbv=Box value +tool.trackassembly.pn_routine_cmcprw=Entire row +tool.trackassembly.pn_routine_cmws=Workshop +tool.trackassembly.pn_routine_cmwsid=Copy WID +tool.trackassembly.pn_routine_cmwsop=Open page tool.trackassembly.pn_externdb_hd=External databases by\: tool.trackassembly.pn_externdb_ttt=Current modified configuration value\: tool.trackassembly.pn_externdb_bti=Import @@ -160,6 +167,10 @@ tool.trackassembly.pn_routine_lb1=Used tool.trackassembly.pn_routine_lb2=End tool.trackassembly.pn_routine_lb3=Type tool.trackassembly.pn_routine_lb4=Name +tool.trackassembly.pn_routine_cmcp=Copy +tool.trackassembly.pn_routine_cmcpmd=Row model +tool.trackassembly.pn_routine_cmcpbv=Box value +tool.trackassembly.pn_routine_cmcprw=Entire row tool.trackassembly.pn_display_lb=Piece display tool.trackassembly.pn_pattern_lb=Write pattern tool.trackassembly.treemenu_cpy=Copy From cc8ed973254b16c5332a614aeb92de9abb4c2d56 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Mon, 28 Oct 2024 19:51:38 +0200 Subject: [PATCH 052/114] Fixed: Tool panel runtime errors `asmlib.*` Fixed: Export type auto-run not finding a data checks Added: DSV manger list view content move option and translations Updated: Export auto-run configuration Removed: Use the text fields metadata instead of `excgRow` Renamed the auto-run related functions to the new convention --- .../set/z_autorun_[trackassembly].txt | 94 ++++++++++--------- lua/autorun/trackassembly_init.lua | 67 +++++++++++-- lua/trackassembly/trackasmlib.lua | 26 ++--- .../localization/en/trackassembly.properties | 5 + 4 files changed, 123 insertions(+), 69 deletions(-) diff --git a/data/trackassembly/set/z_autorun_[trackassembly].txt b/data/trackassembly/set/z_autorun_[trackassembly].txt index 2859b88d..762a82cd 100644 --- a/data/trackassembly/set/z_autorun_[trackassembly].txt +++ b/data/trackassembly/set/z_autorun_[trackassembly].txt @@ -9,7 +9,8 @@ ]]-- -- Local reference to the module. -local asmlib = trackasmlib +local asmlib = trackasmlib; if(not asmlib) then -- Module present + ErrorNoHaltWithStack("TOOL: Track assembly tool module fail!\n"); return end --[[ * This is your addon name. It is mandatory and it must be string. @@ -19,6 +20,9 @@ local asmlib = trackasmlib ]] local myAddon = "Test's track pack" +-- Log messages identifier. Leave DSV here or change it if you like +local mySource = "DSV" + --[[ * Change this if you want to use different in-game type * You can also use multiple types myType1, myType2, @@ -27,17 +31,6 @@ local myAddon = "Test's track pack" ]]-- local myType = myAddon -- The type your addon resides in the tool with ---[[ - * For actually produce an error you can replace the /print/ - * statement with one of following API calls: - * https://wiki.facepunch.com/gmod/Global.print - * https://wiki.facepunch.com/gmod/Global.error - * https://wiki.facepunch.com/gmod/Global.Error - * https://wiki.facepunch.com/gmod/Global.ErrorNoHalt - * https://wiki.facepunch.com/gmod/Global.ErrorNoHaltWithStack -]] -local myError = ErrorNoHalt - -- This is used for addon relation prefix. Fingers away from it local myPrefix = myAddon:gsub("[^%w]","_") -- Addon prefix @@ -45,7 +38,8 @@ local myPrefix = myAddon:gsub("[^%w]","_") -- Addon prefix -- Do not touch this also, it is used for debugging local myScript = tostring(debug.getinfo(1).source or "N/A") myScript = "@"..myScript:gsub("^%W+", ""):gsub("\\","/") - + mySource = tostring(mySource or ""):gsub("^%W+", "") + mySource = (asmlib.IsBlank(mySource) and "DSV" or mySource) --[[ * This function defines what happens when there is an error present * Usually you can tell Gmod that you want it to generate an error @@ -53,13 +47,14 @@ local myScript = tostring(debug.getinfo(1).source or "N/A") * have to change the function name in lots of places * when you need it to do something else. --]] -local function myThrowError(vMesg) - local sMesg = (myScript.." > ("..myAddon.."): "..tostring(vMesg)) -- Make sure the message is string - if(asmlib) then asmlib.LogInstance(sMesg) end; myError(sMesg) -- Output the message into the logs +local function ThrowError(vMesg) + local sMesg = (myScript.." > ("..myAddon.."): "..tostring(vMesg)) -- Convert to string + if(asmlib) then asmlib.LogInstance(sMesg, mySource) end -- Update the tool logs + ErrorNoHaltWithStack(sMesg.."\n") -- Produce an error without breaking the stack end -- There is something to error about stop the execution and report it -if(not asmlib) then myThrowError("Failed loading the required module!"); return end +if(not asmlib) then ThrowError("Failed loading the required module!"); return end --[[ * This logic statement is needed for reporting the error @@ -80,18 +75,19 @@ if(not asmlib) then myThrowError("Failed loading the required module!"); return * sPref > An export file custom prefix. For synchronizing it must be related to your addon * sDelim > The delimiter used by the server/client ( default is a tab symbol ) ]]-- -local function mySyncTable(sName, tData, bRepl) - if(not asmlib.IsEmpty(tData)) then -- Somrting to be processed. Do stuff when the table is not empty - asmlib.LogInstance("SynchronizeDSV START <"..myPrefix..">") -- Signal start synchronization +local function SyncTable(sName, tData, bRepl) + local sRep = asmlib.GetReport(myPrefix, sName) -- Generate report if error is present + if(not asmlib.IsEmpty(tData)) then -- Something to be processed. Do stuff when the table is not empty + asmlib.LogInstance("Synchronization START "..sRep, mySource) -- Signal start synchronization if(not asmlib.SynchronizeDSV(sName, tData, bRepl, myPrefix)) then -- Attempt to synchronize - myThrowError("Failed to synchronize: "..sName) -- Raise error when fails to sync tracks data + ThrowError("Failed to synchronize content") -- Raise error when fails to sync tracks data else -- Successful. You are saving me from all the work for manually generating these - asmlib.LogInstance("TranslateDSV START <"..myPrefix..">") -- Signal start translation + asmlib.LogInstance("Translation START "..sRep, mySource) -- Signal start translation if(not asmlib.TranslateDSV(sName, myPrefix)) then -- Attempt to translate the DSV to Lua source - myThrowError("Failed to translate DSV: "..sName) end -- Raise error when fails - asmlib.LogInstance("TranslateDSV OK <"..myPrefix..">") -- Translation is successful + ThrowError("Failed to translate content") end -- Raise error when fails + asmlib.LogInstance("Translation OK "..sRep, mySource) -- Translation is successful end -- Now we have Lua inserts and DSV. Otherwise sent empty table and print status in logs - else asmlib.LogInstance("SynchronizeDSV EMPTY <"..myPrefix..">") end -- Nothing to be done + else asmlib.LogInstance("Synchronization EMPTY "..sRep, mySource) end -- Nothing to be done end --[[ @@ -106,15 +102,16 @@ end * sDelim > The delimiter to be used for processing ( default tab ) * bSkip > Skip addition for the DSV prefix if exists ( default `false` ) ]]-- -local function myRegisterDSV(bSkip) - asmlib.LogInstance("RegisterDSV START <"..myPrefix..">") +local function RegisterDSV(bSkip) + local sRep = asmlib.GetReport(myPrefix, bSkip) -- Generate report if error is present + asmlib.LogInstance("Registration START "..sRep, mySource) if(bSkip) then -- Your DSV must be registered only once when loading for the first time - asmlib.LogInstance("RegisterDSV SKIP <"..myPrefix..">") + asmlib.LogInstance("Registration SKIP "..sRep, mySource) else -- If the locking file is not located that means this is the first run of your script if(not asmlib.RegisterDSV(myScript, myPrefix)) then -- Register the DSV prefix and check for error - myThrowError("Failed to register DSV") -- Throw the error if fails + ThrowError("Failed to register content") -- Throw the error if fails end -- Third argument is the delimiter. The default tab is used - asmlib.LogInstance("RegisterDSV OK <"..myPrefix..">") + asmlib.LogInstance("Registration OK "..sRep, mySource) end end @@ -128,22 +125,22 @@ end * sPref > An export file custom prefix. For synchronizing * it must be related to your addon ( default is instance prefix ) ]]-- -local function myExportCategory(tCatg) - asmlib.LogInstance("ExportCategory START <"..myPrefix..">") +local function ExportCategory(tCatg) + local sRep = asmlib.GetReport(myPrefix, bSkip) -- Generate report if error is present + asmlib.LogInstance("Category export START "..sRep, mySource) if(CLIENT) then -- Category handling is client side only if(not asmlib.IsEmpty(tCatg)) then if(not asmlib.ExportCategory(3, tCatg, myPrefix)) then - myThrowError("Failed to synchronize category") - end; asmlib.LogInstance("ExportCategory OK <"..myPrefix..">") - else asmlib.LogInstance("ExportCategory SKIP <"..myPrefix..">") end - else asmlib.LogInstance("ExportCategory SERVER <"..myPrefix..">") end + ThrowError("Failed to synchronize category") + end; asmlib.LogInstance("Category export OK "..sRep, mySource) + else asmlib.LogInstance("Category export SKIP "..sRep, mySource) end + else asmlib.LogInstance("Category export SERVER "..sRep, mySource) end end -- Store a reference to disable symbol local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") -local gsModeDB = asmlib.GetOpVar("MODE_DATABASE") local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") -- This is the path to your DSV @@ -163,13 +160,14 @@ local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. local myFlag = file.Exists(myDsv, "DATA") -- Tell TA what custom script we just called don't touch it -asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}") +asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}", mySource) -- Register the addon to the workshop ID list asmlib.WorkshopID(myAddon, "287012681") -- Register the addon to the pluggable DSV list -myRegisterDSV(myFlag) +local bS, vO = pcall(RegisterDSV, myFlag) +if(not bS) then ThrowError("Retistration error: "..vO) end --[[ * This is used if you want to make internal categories for your addon @@ -200,7 +198,8 @@ local myCategory = { } -- Register the addon category to the pluggable DSV list -myExportCategory(myCategory) +local bS, vO = pcall(ExportCategory, myCategory) +if(not bS) then ThrowError("Category error: "..vO) end --[[ * Create a table and populate it as shown below @@ -254,7 +253,8 @@ local myPieces = { } -- Register the addon PIECES to the pluggable DSV list -mySyncTable("PIECES", myPieces, true) +local bS, vO = pcall(SyncTable, "PIECES", myPieces, true) +if(not bS) then ThrowError("PIECES error: "..vO) end --[[ * Create a table and populate it as shown below @@ -290,8 +290,9 @@ mySyncTable("PIECES", myPieces, true) ]]-- local myAdditions = {} --- Register the addon ADDITIONS to the pluggable DSV list -mySyncTable("ADDITIONS", myAdditions, true) +-- Register the addon ADDITIONS to the plugable DSV list +local bS, vO = pcall(SyncTable, "ADDITIONS", myAdditions, true) +if(not bS) then ThrowError("ADDITIONS error: "..vO) end --[[ * Create a table and populate it as shown below @@ -311,7 +312,8 @@ mySyncTable("ADDITIONS", myAdditions, true) ]]-- local myPhysproperties = {} --- Register the addon PHYSPROPERTIES to the pluggable DSV list -mySyncTable("PHYSPROPERTIES", myPhysproperties, true) +-- Register the addon PHYSPROPERTIES to the plugable DSV list +local bS, vO = pcall(SyncTable, "PHYSPROPERTIES", myPhysproperties, true) +if(not bS) then ThrowError("PHYSPROPERTIES error: "..vO) end -asmlib.LogInstance("<<< "..myScript) +asmlib.LogInstance("<<< "..myScript, mySource) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 2bbe68ce..d35b4872 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.789") +asmlib.SetOpVar("TOOL_VERSION","8.790") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -487,6 +487,11 @@ if(CLIENT) then asmlib.ToIcon("pn_externdb_cmli1", "database_edit" ) asmlib.ToIcon("pn_externdb_cmli2", "database_add" ) asmlib.ToIcon("pn_externdb_cmli3", "database_delete" ) + asmlib.ToIcon("pn_externdb_cmmv" , "joystick" ) + asmlib.ToIcon("pn_externdb_cmmv1", "arrow_up" ) + asmlib.ToIcon("pn_externdb_cmmv2", "arrow_down" ) + asmlib.ToIcon("pn_externdb_cmmv3", "arrow_redo" ) + asmlib.ToIcon("pn_externdb_cmmv4", "arrow_undo" ) asmlib.ToIcon("pn_externdb_cmst" , "database_gear" ) asmlib.ToIcon("pn_externdb_cmsi" , "database_key" ) asmlib.ToIcon("pn_externdb_cmst1", "folder_find" ) @@ -775,6 +780,28 @@ if(CLIENT) then xyPos.y = xyPos.y + xySiz.y + xyDsz.y xySiz.y = nB -- General Y-size of elements local tpText = {Size = #pnListView.Columns} + function tpText:Scan(pnRow, bChng) + if(not IsValid(pnRow)) then return end + local bChng = (bChng and asmlib.IsHere(bChng)) + for iV = 1, self.Size do + local ptx = self[iV] -- Pick a panel + local str = pnRow:GetColumnText(iV) + ptx:SetValue(str); ptx:SetText(str) + end -- Exchange data with list view and text. Setup change line flag + if(bChng) then self.Chng = true else self.Chng = nil end + end + function tpText:Swap(pnSor, pnDes) + if(not IsValid(pnSor)) then return end + if(not IsValid(pnDes)) then return end + local bChng = (bChng and asmlib.IsHere(bChng)) + for iV = 1, self.Size do + local str = pnDes:GetColumnText(iV) + pnDes:SetColumnText(iV, pnSor:GetColumnText(iV)) + pnSor:SetColumnText(iV, str) + pnListView:ClearSelection() + pnListView:SelectItem(pnDes) + end -- Exchange data with list view and text. Setup change line flag + end for iC = 1, tpText.Size do local pC = pnListView.Columns[iC] local cW = math.min(pC:GetMinWidth(), pC:GetMaxWidth()) @@ -872,13 +899,6 @@ if(CLIENT) then oDSV:Write(sAct..sPrf..sPth.."\n") end; oDSV:Flush(); oDSV:Close() end - local function excgRow(pnRow) - for iV = 1, tpText.Size do - local ptx = tpText[iV] -- Pick a panel - local str = pnRow:GetColumnText(iV) - ptx:SetValue(str); ptx:SetText(str) - end -- Exchange data with list view and text - end pnListView.OnRowRightClick = function(pnSelf, nIndex, pnLine) local pnMenu = vguiCreate("DMenu") if(not IsValid(pnMenu)) then pnFrame:Close() @@ -912,11 +932,38 @@ if(CLIENT) then asmlib.LogInstance("Internals opts invalid",sLog..".ListView"); return nil end pOp:SetIcon(asmlib.ToIcon(sI.."li")) pIn:AddOption(languageGetPhrase(sT.."li1"), - function() excgRow(pnLine); tpText.Chg = true end):SetImage(asmlib.ToIcon(sI.."li1")) + function() tpText:Scan(pnLine, true) end):SetImage(asmlib.ToIcon(sI.."li1")) pIn:AddOption(languageGetPhrase(sT.."li2"), - function() excgRow(pnLine); tpText.Chg = nil end):SetImage(asmlib.ToIcon(sI.."li2")) + function() tpText:Scan(pnLine) end):SetImage(asmlib.ToIcon(sI.."li2")) pIn:AddOption(languageGetPhrase(sT.."li3"), function() pnSelf:RemoveLine(nIndex) end):SetImage(asmlib.ToIcon(sI.."li3")) + -- Move current line around + local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."mv")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Internals menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Internals opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(asmlib.ToIcon(sI.."mv")) + pIn:AddOption(languageGetPhrase(sT.."mv1"), + function() + if(nIndex <= 1) then return end + tpText:Swap(pnLine, pnSelf:GetLine(nIndex - 1)) + end):SetImage(asmlib.ToIcon(sI.."mv1")) + pIn:AddOption(languageGetPhrase(sT.."mv2"), + function() local nT = #pnSelf:GetLines() + if(nIndex >= nT) then return end + tpText:Swap(pnLine, pnSelf:GetLine(nIndex + 1)) + end):SetImage(asmlib.ToIcon(sI.."mv2")) + pIn:AddOption(languageGetPhrase(sT.."mv3"), + function() + if(nIndex <= 1) then return end + tpText:Swap(pnLine, pnSelf:GetLine(1)) + end):SetImage(asmlib.ToIcon(sI.."mv3")) + pIn:AddOption(languageGetPhrase(sT.."mv4"), + function() local nT = #pnSelf:GetLines() + if(nIndex >= nT) then return end + tpText:Swap(pnLine, pnSelf:GetLine(nT)) + end):SetImage(asmlib.ToIcon(sI.."mv4")) -- Manipulate content local settings related to the line local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."st")) if(not IsValid(pIn)) then pnFrame:Close() diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index b91eb8b5..c33698ec 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1725,7 +1725,7 @@ function OpenNodeMenu(pnBase) local sM, sI = GetOpVar("TOOLNAME_NL"), "treemenu_" local sT = "tool."..sM.."."..sI local sID = WorkshopID(pT:GetText()) - local bEx = asmlib.GetAsmConvar("exportdb", "BUL") + local bEx = GetAsmConvar("exportdb", "BUL") -- Copy node information local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."cpy")) if(not IsValid(pIn)) then @@ -1757,8 +1757,8 @@ function OpenNodeMenu(pnBase) pMenu:AddOption(languageGetPhrase(sT.."export"), function() local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then LogInstance("Player invalid"); return nil end - LogInstance("Export "..asmlib.GetReport(oPly:Nick(), pT:GetText())) - ExportTypeRun(pT:GetText()); asmlib.SetAsmConvar(oPly, "exportdb", 0) + LogInstance("Export "..GetReport(oPly:Nick(), pT:GetText())) + ExportTypeRun(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) end):SetIcon(ToIcon(sI.."export")) end pMenu:Open() @@ -3987,18 +3987,18 @@ end * makTab > Reference to additions table builder * qList > The list to insert the found additions ]] -function SetAdditionsAR(sModel, makTab, qList) +function SetAdditionsRun(sModel, makTab, qList) if(not IsHere(makTab)) then return end local defTab = makTab:GetDefinition() if(not IsHere(defTab)) then LogInstance("Table definition missing") end - local sMoDB, sFunc, qData = GetOpVar("MODE_DATABASE"), "SetAdditionsAR" + local sMoDB, sFunc, qData = GetOpVar("MODE_DATABASE"), "SetAdditionsRun" if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") local qModel = makTab:Match(tostring(sModel or ""), 1, true) local qIndx = qsKey:format(sFunc, "ADDITIONS") local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end - if(not IsHere(sStmt)) then + if(not IsHere(Q)) then LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return end qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return end @@ -4032,7 +4032,7 @@ function SetAdditionsAR(sModel, makTab, qList) for iD = 1, #qData do qList[iE + iD] = qData[iD] end end -function ExportPiecesAR(fF,qData,sName,sInd,qList) +function ExportPiecesRun(fF,qData,sName,sInd,qList) local dbNull = GetOpVar("MISS_NOSQL") local keyBld, makAdd = GetOpVar("KEYQ_BUILDER") local makTab = qData[keyBld]; if(not IsHere(makTab)) then @@ -4066,11 +4066,11 @@ function ExportPiecesAR(fF,qData,sName,sInd,qList) end if(fRow) then fRow = false fF:Write(sInd:rep(1).."["..aRow[pkID].."] = {\n") - SetAdditionsAR(mMod, makAdd, qList) + SetAdditionsRun(mMod, makAdd, qList) else if(aRow[idxID] == 1) then fF:Seek(fF:Tell() - 2) fF:Write("\n"..sInd:rep(1).."},\n"..sInd:rep(1).."["..aRow[pkID].."] = {\n") - SetAdditionsAR(mMod, makAdd, qList) + SetAdditionsRun(mMod, makAdd, qList) end end mgrTab.ExportAR(aRow); tableRemove(aRow, 1) @@ -4133,9 +4133,9 @@ function ExportTypeRun(sType) LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)) fE:Flush(); fE:Close(); fS:Close(); return end - if(not IsHere(qData) or IsEmpty(qData)) then + if(not IsHere(qPieces) or IsEmpty(qPieces)) then LogInstance("No data found "..GetReport(Q)) - if(not IsHere(qData)) then qPieces = {} end + if(not IsHere(qPieces)) then qPieces = {} end end elseif(sMoDB == "LUA") then local iCnt = 0; qPieces = {} @@ -4209,9 +4209,9 @@ function ExportTypeRun(sType) fE:Write("asmlib.WorkshopID(myAddon)\n") end elseif(sLine:find(patPiece)) then isSkip = true - ExportPiecesAR(fE, qPieces, "myPieces", sInd, qAdditions) + ExportPiecesRun(fE, qPieces, "myPieces", sInd, qAdditions) elseif(sLine:find(patAddit)) then isSkip = true - ExportPiecesAR(fE, qAdditions, "myAdditions", sInd) + ExportPiecesRun(fE, qAdditions, "myAdditions", sInd) else if(isSkip and IsBlank(sLine:Trim())) then isSkip = false end end diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index a5f1a477..e59911cf 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -140,6 +140,11 @@ tool.trackassembly.pn_externdb_cmli=Line tool.trackassembly.pn_externdb_cmli1=Change tool.trackassembly.pn_externdb_cmli2=Create tool.trackassembly.pn_externdb_cmli3=Remove +tool.trackassembly.pn_externdb_cmmv=Move +tool.trackassembly.pn_externdb_cmmv1=Up +tool.trackassembly.pn_externdb_cmmv2=Down +tool.trackassembly.pn_externdb_cmmv3=Top +tool.trackassembly.pn_externdb_cmmv4=Bottom tool.trackassembly.pn_externdb_cmst=Tables tool.trackassembly.pn_externdb_cmstt=Databases for\: tool.trackassembly.pn_externdb_cmst1=Copy nick From c6f38699627083ded467be223ab50f3bd349826b Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 29 Oct 2024 11:08:43 +0200 Subject: [PATCH 053/114] Fixed: File fore-close for `ExportDSV` on some fail cases Added: More export options for DSV format and script format --- lua/autorun/trackassembly_init.lua | 12 +- lua/trackassembly/trackasmlib.lua | 143 ++++++++++++++++-- .../localization/en/trackassembly.properties | 4 +- 3 files changed, 143 insertions(+), 16 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index d35b4872..b884ae88 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.790") +asmlib.SetOpVar("TOOL_VERSION","8.791") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -469,7 +469,9 @@ if(CLIENT) then asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) asmlib.ToIcon("treemenu_ws_opp" , "world" ) asmlib.ToIcon("treemenu_expand" , "zoom" ) - asmlib.ToIcon("treemenu_export" , "script_code" ) + asmlib.ToIcon("treemenu_exp" , "transmit_go" ) + asmlib.ToIcon("treemenu_exp_dsv" , "database_table" ) + asmlib.ToIcon("treemenu_exp_run" , "script_code" ) asmlib.ToIcon("subfolder_item" , "folder_brick" ) asmlib.ToIcon("pn_routine_cmcp" , "page_copy" ) asmlib.ToIcon("pn_routine_cmcpmd", "brick" ) @@ -1790,7 +1792,8 @@ asmlib.NewTable("PIECES",{ }, Query = { Record = {"%s","%s","%s","%d","%s","%s","%s","%s"}, - ExportDSV = {2,3,1,4} + ExportDSV = {2,3,1,4}, + ExportTypeDSV = {2,3,1,4} }, [1] = {"MODEL" , "TEXT" , "LOW", "QMK"}, [2] = {"TYPE" , "TEXT" , nil , "QMK"}, @@ -1807,7 +1810,8 @@ asmlib.NewTable("ADDITIONS",{ Index = {{1,4,Un=true}, {4}}, Query = { Record = {"%s","%s","%s","%d","%s","%s","%d","%d","%d","%d","%d","%d"}, - ExportDSV = {1,4} + ExportDSV = {1,4}, + ExportTypeDSV = {1,4} }, Cache = { Record = function(makTab, tCache, snPK, arLine, vSrc) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index c33698ec..166e55ae 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1728,7 +1728,7 @@ function OpenNodeMenu(pnBase) local bEx = GetAsmConvar("exportdb", "BUL") -- Copy node information local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."cpy")) - if(not IsValid(pIn)) then + if(not (IsValid(pIn) and IsValid(pOp))) then LogInstance("Base copy invalid"); return nil end -- Copy various strings pOp:SetIcon(ToIcon(sI.."cpy")) @@ -1742,7 +1742,7 @@ function OpenNodeMenu(pnBase) if(sID) then local sUR = GetOpVar("FORM_URLADDON") local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."ws")) - if(not IsValid(pIn)) then + if(not (IsValid(pIn) and IsValid(pOp))) then LogInstance("Base WS invalid"); return nil end pOp:SetIcon(ToIcon(sI.."ws")) pIn:AddOption(languageGetPhrase(sT.."ws_cid"), function() SetClipboardText(sID) end):SetIcon(ToIcon(sI.."ws_cid")) @@ -1754,12 +1754,24 @@ function OpenNodeMenu(pnBase) end -- Export database contents on autorun if(bEx and pnBase == pT) then - pMenu:AddOption(languageGetPhrase(sT.."export"), function() - local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then - LogInstance("Player invalid"); return nil end - LogInstance("Export "..GetReport(oPly:Nick(), pT:GetText())) - ExportTypeRun(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) - end):SetIcon(ToIcon(sI.."export")) + local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."exp")) + if(not (IsValid(pIn) and IsValid(pOp))) then + LogInstance("Base export invalid"); return nil end + pOp:SetIcon(ToIcon(sI.."exp")) + pIn:AddOption(languageGetPhrase(sT.."exp_dsv"), + function() SetClipboardText(sID) + local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then + LogInstance("Player invalid"); return nil end + LogInstance("Export "..GetReport(oPly:Nick(), pT:GetText())) + ExportTypeRun(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) + end):SetIcon(ToIcon(sI.."exp_dsv")) + pIn:AddOption(languageGetPhrase(sT.."exp_run"), + function() + local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then + LogInstance("Player invalid"); return nil end + LogInstance("Export "..GetReport(oPly:Nick(), pT:GetText())) + ExportTypeDSV(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) + end):SetIcon(ToIcon(sI.."exp_run")) end pMenu:Open() end @@ -3674,9 +3686,9 @@ function ExportDSV(sTable, sPref, sDelim) local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then F:Flush(); F:Close() LogInstance("("..fPref..") Cache missing",sTable); return false end local bS, sR = pcall(defTab.Cache[sFunc], F, makTab, tCache, fPref, sDelim, ssLog:format("Cache")) - if(not bS) then LogInstance("("..fPref..") Cache manager fail for "..sR,sTable); return false end - if(not sR) then LogInstance("("..fPref..") Cache routine fail",sTable); return false end - else LogInstance("("..fPref..") Unsupported mode "..GetReport(sMoDB, fName),sTable); return false end + if(not bS) then F:Flush(); F:Close(); LogInstance("("..fPref..") Cache manager fail for "..sR,sTable); return false end + if(not sR) then F:Flush(); F:Close(); LogInstance("("..fPref..") Cache routine fail",sTable); return false end + else F:Flush(); F:Close(); LogInstance("("..fPref..") Unsupported mode "..GetReport(sMoDB, fName),sTable); return false end -- The dynamic cache population was successful then send a message F:Flush(); F:Close(); LogInstance("("..fPref..") Success",sTable); return true end @@ -4224,6 +4236,115 @@ function ExportTypeRun(sType) end end +--[[ + * This function extracts some track type from the database and creates + * dedicated DSV files adding the given type argument + * to the database by using external plugable DSV prefix list + * sType > Track type the DSV files are created for +]] +function ExportTypeDSV(sType, sPref, sDelim) + if(not isstring(sType)) then + LogInstance("Type mismatch "..GetReport(sType)); return false end + local fPref = tostring(sPref or GetInstPref()) + local makP = GetBuilderNick("PIECES"); if(not IsHere(makP)) then + LogInstance("("..fPref..") Missing pieces builder"); return false end + local defP = makP:GetDefinition(); if(not IsHere(defP)) then + LogInstance("("..fPref..") Missing pieces definition"); return nil end + local makA = GetBuilderNick("ADDITIONS"); if(not IsHere(makA)) then + LogInstance("("..fPref..") Missing additions builder"); return false end + local defA = makA:GetDefinition(); if(not IsHere(defA)) then + LogInstance("("..fPref..") Missing additions definition"); return nil end + local fDir = GetOpVar("DIRPATH_BAS") + if(not fileExists(fDir,"DATA")) then fileCreateDir(fDir) end + local fDir = fDir..GetOpVar("DIRPATH_EXP") + if(not fileExists(fDir,"DATA")) then fileCreateDir(fDir) end + local fForm = GetOpVar("FORM_PREFIXDSV") + local fName = fDir..fForm:format(fPref, defP.Name) + local P = fileOpen(fName, "wb", "DATA"); if(not P) then + LogInstance("("..fPref..")("..fName..") Open fail"); return false end + local fName = fDir..fForm:format(fPref, defA.Name) + local A = fileOpen(fName, "wb", "DATA"); if(not A) then + LogInstance("("..fPref..")("..fName..") Open fail"); return false end + local sDelim, sFunc = tostring(sDelim or "\t"):sub(1,1), "ExportTypeDSV" + local fsLog = GetOpVar("FORM_LOGSOURCE") -- Read the log source format + local ssLog = "*"..fsLog:format(defP.Nick,sFunc,"%s") + local sMoDB = GetOpVar("MODE_DATABASE") -- Read database mode + P:Write("#1 "..sFunc..":("..fPref.."@"..defP.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") + P:Write("#2 "..defP.Nick..":("..makP:GetColumnList(sDelim)..")\n") + A:Write("#1 "..sFunc..":("..fPref.."@"..defA.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") + A:Write("#2 "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") + if(sMoDB == "SQL") then + local qsKey = GetOpVar("FORM_KEYSTMT") + local qType = makP:Match(sType, 2, true) + local qInxP = qsKey:format(sFunc, defP.Nick) + local qInxA = qsKey:format(sFunc, defA.Nick) + local Q = makP:Get(qInxP, qType); if(not IsHere(Q)) then + Q = makP:Select():Where({2,"%s"}):Order(unpack(defP.Query[sFunc])):Store(qInxP):Get(qInxP, qType) end + if(not IsHere(Q)) then + LogInstance("("..fPref..") Build statement failed",defP.Nick) + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + P:Write("#3 Query:<"..Q..">\n") + local qP = sqlQuery(Q); if(not qP and isbool(qP)) then + LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defP.Nick); + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + if(not IsHere(qP) or IsEmpty(qP)) then + LogInstance("("..fPref..") No data found "..GetReport(Q), defP.Nick); + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + local rwP, rwA, rwM = "", "", "" + local coMo = makTab:GetColumnName(1) + local coLI = makTab:GetColumnName(4) + for iP = 1, #qP do + local qRec = qP[iP]; rwP = defP.Name + for iC = 1, defP.Size do + local sC = defP[iC][1], "" + local vC = qRec[sC] + local mC = makP:Match(vC,iC,true,"\"",true) + rwP, rwM = (rwP..sDelim..vC), (sC == coMo and mC or rwM) + if(sC == coLI and (tonumber(vC) or 0) == 1) then + local Q = makA:Get(qInxA, rwM); if(not IsHere(Q)) then + Q = makA:Select():Where({1,"%s"}):Order(unpack(defP.Query[sFunc])):Get(qInxA, rwM) end + if(not IsHere(Q)) then + LogInstance("("..fPref..") Build statement failed",defA.Nick) + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + if(iP == 1) then A:Write("#3 Query:<"..Q..">\n") end + local qA = sqlQuery(Q); if(not qA and isbool(qA)) then + LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defA.Nick); + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + if(not IsHere(qA) or IsEmpty(qA)) then + LogInstance("("..fPref..") No data found "..GetReport(Q), defA.Nick); + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + end + end; P:Write(rwP.."\n"); rwP = "" + end -- Matching will not crash as it is matched during insertion + elseif(sMoDB == "LUA") then + local tCache = libCache[defP.Name] + if(not IsHere(tCache)) then + LogInstance("("..fPref..") Cache missing",defP.Nick) + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + local bS, sR = pcall(defP.Cache[sFunc], P, makP, A, makA, tCache, fPref, sDelim, ssLog:format("Cache")) + if(not bS) then + LogInstance("("..fPref..") Cache manager fail for "..sR,defP.Nick) + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + if(not sR) then + LogInstance("("..fPref..") Cache routine fail",defP.Nick) + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + else + LogInstance("("..fPref..") Unsupported mode "..GetReport(sMoDB, fName),defP.Nick) + P:Flush(); P:Close(); A:Flush(); A:Close(); return false + end + -- The dynamic cache population was successful then send a message + P:Flush(); P:Close(); A:Flush(); A:Close(); LogInstance("("..fPref..") Success"); return true +end + ----------------------------- SNAPPING ------------------------------ function GetSurfaceAngle(oPly, vNorm) diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index e59911cf..c416b3ca 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -186,7 +186,9 @@ tool.trackassembly.treemenu_cpy_pth=Path tool.trackassembly.treemenu_ws=Workshop tool.trackassembly.treemenu_ws_cid=Copy WID tool.trackassembly.treemenu_ws_opp=Open page -tool.trackassembly.treemenu_export=Export type +tool.trackassembly.treemenu_exp=Export +tool.trackassembly.treemenu_exp_dsv=Extern +tool.trackassembly.treemenu_exp_run=Autorun tool.trackassembly.treemenu_expand=Expand node tool.trackassembly.sizeucs=Scale set for the coordinate systems displayed tool.trackassembly.sizeucs_con=Scale UCS\: From 1474ce07af0fb3dfc175370b85bcea44efbfc913 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 29 Oct 2024 14:35:53 +0200 Subject: [PATCH 054/114] Updated: Query parameters at the top Updated: Export type to DSV format in LUA mode Added: Cache PIECES method `ExportTypeDSV` for LUA mode --- lua/autorun/trackassembly_init.lua | 68 ++++++++++++++++++++----- lua/trackassembly/trackasmlib.lua | 82 ++++++++++++------------------ 2 files changed, 88 insertions(+), 62 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index b884ae88..e404c428 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.791") +asmlib.SetOpVar("TOOL_VERSION","8.792") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1725,7 +1725,12 @@ propertiesAdd(gsOptionsCM, gtOptionsCM) asmlib.NewTable("PIECES",{ Timer = gaTimerSet[1], - Index = {{1,4,Un=true}, {4}}, + Index = {{1,4,Un=true},{1},{2},{4}}, + Query = { + Record = {"%s","%s","%s","%d","%s","%s","%s","%s"}, + ExportDSV = {2,3,1,4}, + ExportTypeDSV = {3,1,4} + }, Trigs = { Record = function(arLine, vSrc) local noMD = asmlib.GetOpVar("MISS_NOMD") @@ -1788,13 +1793,50 @@ asmlib.NewTable("PIECES",{ end end; return true end, + ExportTypeDSV = function(fP, makP, PCache, fA, makA, ACache, fPref, sDelim, vSrc) + local tSort = asmlib.Arrange(PCache, "Name", "Slot") + if(not tSort) then P:Flush(); P:Close(); A:Flush(); A:Close() + asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end + local defP, defA = makP:GetDefinition(), makA:GetDefinition() + local noSQL = asmlib.GetOpVar("MISS_NOSQL") + local symOff = asmlib.GetOpVar("OPSYM_DISABLE") + local sClass = asmlib.GetOpVar("ENTITY_DEFCLASS") + for iP = 1, tSort.Size do + local stRec = tSort[iP] + local tData = PCache[stRec.Key] + local sPref = tData.Type:gsub("[^%w]","_"):lower() + if(sPref == fPref) then + local sData, tOffs = defP.Name, tData.Offs + sData = sData..sDelim..makP:Match(stRec.Key,1,true,"\"")..sDelim.. + makP:Match(tData.Type,2,true,"\"")..sDelim.. + makP:Match(tData.Name,3,true,"\"") + -- Matching crashes only for numbers. The number is already inserted, so there will be no crash + for iD = 1, #tOffs do + local stPnt = tOffs[iD] -- Read current offsets from the model + local sP, sO, sA = stPnt.P:Export(stPnt.O), stPnt.O:Export(), stPnt.A:Export() + local sC = (asmlib.IsHere(tData.Unit) and tostring(tData.Unit) or noSQL) + sC = ((sC == sClass) and noSQL or sC) -- Export default class as noSQL + fP:Write(sData..sDelim..makP:Match(iD,4,true,"\"")) + fP:Write(sDelim.."\""..sP.."\""..sDelim.."\""..sO.."\"") + fP:Write(sDelim.."\""..sA.."\""..sDelim.."\""..sC.."\"\n") + if(iD == 1) then + local tA = ACache[stRec.Key] + if(tA and tA.Size and tA.Size > 0) then + local sRow = defA.Name..sDelim..makA:Match(stRec.Key,1,true,"\"") + for iA = 1, tA.Size do for iC = 2, defA.Size do + local sC = defA[iC][1] + local mA = makA:Match(tA[iA][sC],iC,true,"\""); if(not mA) then + asmlib.LogInstance("Cannot match "..asmlib.GetReport(iA, sC, iC, tA[iA][iC]), vSrc); return false end + fA:Write(sRow); fA:Write(sDelim..mA) + end end + end + end + end + end + end; return true + end, ExportAR = function(aRow) aRow[2], aRow[4] = "myType", "gsSymOff" end }, - Query = { - Record = {"%s","%s","%s","%d","%s","%s","%s","%s"}, - ExportDSV = {2,3,1,4}, - ExportTypeDSV = {2,3,1,4} - }, [1] = {"MODEL" , "TEXT" , "LOW", "QMK"}, [2] = {"TYPE" , "TEXT" , nil , "QMK"}, [3] = {"NAME" , "TEXT" , nil , "QMK"}, @@ -1807,7 +1849,7 @@ asmlib.NewTable("PIECES",{ asmlib.NewTable("ADDITIONS",{ Timer = gaTimerSet[2], - Index = {{1,4,Un=true}, {4}}, + Index = {{1,4,Un=true},{1},{4}}, Query = { Record = {"%s","%s","%s","%d","%s","%s","%d","%d","%d","%d","%d","%d"}, ExportDSV = {1,4}, @@ -1869,7 +1911,11 @@ asmlib.NewTable("ADDITIONS",{ asmlib.NewTable("PHYSPROPERTIES",{ Timer = gaTimerSet[3], - Index = {{1,2,Un=true}, {2}}, + Index = {{1,2,Un=true},{1},{2}}, + Query = { + Record = {"%s","%d","%s"}, + ExportDSV = {1,2} + }, Trigs = { Record = function(arLine, vSrc) local noTY = asmlib.GetOpVar("MISS_NOTP") @@ -1916,10 +1962,6 @@ asmlib.NewTable("PHYSPROPERTIES",{ end, ExportAR = function(aRow) aRow[1], aRow[2] = "myType", "gsSymOff" end }, - Query = { - Record = {"%s","%d","%s"}, - ExportDSV = {1,2} - }, [1] = {"TYPE" , "TEXT" , nil , "QMK"}, [2] = {"LINEID", "INTEGER", "FLR", nil }, [3] = {"NAME" , "TEXT" , nil , nil } diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 166e55ae..e7e1685a 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3668,7 +3668,9 @@ function ExportDSV(sTable, sPref, sDelim) F:Write("#1 "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") F:Write("#2 "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then - local Q = makTab:Select():Order(unpack(defTab.Query[sFunc])):Get() + local qIndx = qsKey:format(sFunc,"") + local Q = makTab:Get(qIndx); if(not IsHere(Q)) then + Q = makTab:Select():Order(unpack(defTab.Query[sFunc])):Store(qIndx):Get(qIndx) end if(not IsHere(Q)) then F:Flush(); F:Close() LogInstance("("..fPref..") Build statement failed",sTable); return false end F:Write("#3 Query:<"..Q..">\n") @@ -3686,8 +3688,10 @@ function ExportDSV(sTable, sPref, sDelim) local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then F:Flush(); F:Close() LogInstance("("..fPref..") Cache missing",sTable); return false end local bS, sR = pcall(defTab.Cache[sFunc], F, makTab, tCache, fPref, sDelim, ssLog:format("Cache")) - if(not bS) then F:Flush(); F:Close(); LogInstance("("..fPref..") Cache manager fail for "..sR,sTable); return false end - if(not sR) then F:Flush(); F:Close(); LogInstance("("..fPref..") Cache routine fail",sTable); return false end + if(not bS) then F:Flush(); F:Close() + LogInstance("("..fPref..") Cache manager fail for "..sR,sTable); return false end + if(not sR) then F:Flush(); F:Close() + LogInstance("("..fPref..") Cache routine fail",sTable); return false end else F:Flush(); F:Close(); LogInstance("("..fPref..") Unsupported mode "..GetReport(sMoDB, fName),sTable); return false end -- The dynamic cache population was successful then send a message F:Flush(); F:Close(); LogInstance("("..fPref..") Success",sTable); return true @@ -4242,10 +4246,10 @@ end * to the database by using external plugable DSV prefix list * sType > Track type the DSV files are created for ]] -function ExportTypeDSV(sType, sPref, sDelim) +function ExportTypeDSV(sType, sDelim) if(not isstring(sType)) then LogInstance("Type mismatch "..GetReport(sType)); return false end - local fPref = tostring(sPref or GetInstPref()) + local fPref = sType:gsub("[^%w]","_"):lower() local makP = GetBuilderNick("PIECES"); if(not IsHere(makP)) then LogInstance("("..fPref..") Missing pieces builder"); return false end local defP = makP:GetDefinition(); if(not IsHere(defP)) then @@ -4280,19 +4284,13 @@ function ExportTypeDSV(sType, sPref, sDelim) local qInxA = qsKey:format(sFunc, defA.Nick) local Q = makP:Get(qInxP, qType); if(not IsHere(Q)) then Q = makP:Select():Where({2,"%s"}):Order(unpack(defP.Query[sFunc])):Store(qInxP):Get(qInxP, qType) end - if(not IsHere(Q)) then - LogInstance("("..fPref..") Build statement failed",defP.Nick) - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end + if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") Build statement failed",defP.Nick); return false end P:Write("#3 Query:<"..Q..">\n") - local qP = sqlQuery(Q); if(not qP and isbool(qP)) then - LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defP.Nick); - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end - if(not IsHere(qP) or IsEmpty(qP)) then - LogInstance("("..fPref..") No data found "..GetReport(Q), defP.Nick); - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end + local qP = sqlQuery(Q); if(not qP and isbool(qP)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defP.Nick); return false end + if(not IsHere(qP) or IsEmpty(qP)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") No data found "..GetReport(Q), defP.Nick); return false end local rwP, rwA, rwM = "", "", "" local coMo = makTab:GetColumnName(1) local coLI = makTab:GetColumnName(4) @@ -4305,43 +4303,29 @@ function ExportTypeDSV(sType, sPref, sDelim) rwP, rwM = (rwP..sDelim..vC), (sC == coMo and mC or rwM) if(sC == coLI and (tonumber(vC) or 0) == 1) then local Q = makA:Get(qInxA, rwM); if(not IsHere(Q)) then - Q = makA:Select():Where({1,"%s"}):Order(unpack(defP.Query[sFunc])):Get(qInxA, rwM) end - if(not IsHere(Q)) then - LogInstance("("..fPref..") Build statement failed",defA.Nick) - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end + Q = makA:Select():Where({1,"%s"}):Order(unpack(defP.Query[sFunc])):Store(qInxA):Get(qInxA, rwM) end + if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") Build statement failed",defA.Nick); return false end if(iP == 1) then A:Write("#3 Query:<"..Q..">\n") end - local qA = sqlQuery(Q); if(not qA and isbool(qA)) then - LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defA.Nick); - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end - if(not IsHere(qA) or IsEmpty(qA)) then - LogInstance("("..fPref..") No data found "..GetReport(Q), defA.Nick); - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end + local qA = sqlQuery(Q); if(not qA and isbool(qA)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defA.Nick); return false end + if(not IsHere(qA) or IsEmpty(qA)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") No data found "..GetReport(Q), defA.Nick); return false end end end; P:Write(rwP.."\n"); rwP = "" end -- Matching will not crash as it is matched during insertion elseif(sMoDB == "LUA") then - local tCache = libCache[defP.Name] - if(not IsHere(tCache)) then - LogInstance("("..fPref..") Cache missing",defP.Nick) - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end - local bS, sR = pcall(defP.Cache[sFunc], P, makP, A, makA, tCache, fPref, sDelim, ssLog:format("Cache")) - if(not bS) then - LogInstance("("..fPref..") Cache manager fail for "..sR,defP.Nick) - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end - if(not sR) then - LogInstance("("..fPref..") Cache routine fail",defP.Nick) - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end - else - LogInstance("("..fPref..") Unsupported mode "..GetReport(sMoDB, fName),defP.Nick) - P:Flush(); P:Close(); A:Flush(); A:Close(); return false - end - -- The dynamic cache population was successful then send a message + local PCache, ACache = libCache[defP.Name], libCache[defA.Name] + if(not IsHere(PCache)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") Cache missing",defP.Nick) ; return false end + local bS, sR = pcall(defP.Cache[sFunc], P, makP, PCache, A, makA, ACache, fPref, sDelim, ssLog:format("Cache")) + if(not bS) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") Cache manager fail for "..sR,defP.Nick) ; return false end + if(not sR) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") Cache routine fail",defP.Nick) ; return false end + else P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") Unsupported mode "..GetReport(sMoDB, fName),defP.Nick); return false + end -- The dynamic cache population was successful then send a message P:Flush(); P:Close(); A:Flush(); A:Close(); LogInstance("("..fPref..") Success"); return true end From 49f160ef922d37a1fbbaea965c699532214ec5c2 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 29 Oct 2024 18:07:47 +0200 Subject: [PATCH 055/114] Fixed: Exporting DSV process triggering error due to query store missing --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index e404c428..ed1a5dff 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.792") +asmlib.SetOpVar("TOOL_VERSION","8.793") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index e7e1685a..aac3b7aa 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3668,6 +3668,7 @@ function ExportDSV(sTable, sPref, sDelim) F:Write("#1 "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") F:Write("#2 "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then + local qsKey = GetOpVar("FORM_KEYSTMT") local qIndx = qsKey:format(sFunc,"") local Q = makTab:Get(qIndx); if(not IsHere(Q)) then Q = makTab:Select():Order(unpack(defTab.Query[sFunc])):Store(qIndx):Get(qIndx) end From d17d5e0135a8882130786510acff9e1a136a6930 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Tue, 29 Oct 2024 23:58:31 +0200 Subject: [PATCH 056/114] TODO: `Categorize` calls results in empty categody exports Fixed: Frequent pices panel sorting crashing in LUA mode Fixed: Logic and runtime errors of `ExportTypeDSV` Fixed: Utilizing `tpText:Scan` using wrong field Fixed: Some typos reading auto-run export comments Fixed: Tree export context menu calling wrong routine Utilize: `tableInsert` in `ProcessDSV` Changed: Export tree context menu icon --- .../set/z_autorun_[trackassembly].txt | 6 +-- lua/autorun/trackassembly_init.lua | 18 +++---- lua/trackassembly/trackasmlib.lua | 48 ++++++++++--------- 3 files changed, 38 insertions(+), 34 deletions(-) diff --git a/data/trackassembly/set/z_autorun_[trackassembly].txt b/data/trackassembly/set/z_autorun_[trackassembly].txt index 762a82cd..a0dc5556 100644 --- a/data/trackassembly/set/z_autorun_[trackassembly].txt +++ b/data/trackassembly/set/z_autorun_[trackassembly].txt @@ -165,7 +165,7 @@ asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", -- Register the addon to the workshop ID list asmlib.WorkshopID(myAddon, "287012681") --- Register the addon to the pluggable DSV list +-- Register the addon to the plugable DSV list local bS, vO = pcall(RegisterDSV, myFlag) if(not bS) then ThrowError("Retistration error: "..vO) end @@ -197,7 +197,7 @@ local myCategory = { ]]} } --- Register the addon category to the pluggable DSV list +-- Register the addon category to the plugable DSV list local bS, vO = pcall(ExportCategory, myCategory) if(not bS) then ThrowError("Category error: "..vO) end @@ -252,7 +252,7 @@ local myPieces = { } } --- Register the addon PIECES to the pluggable DSV list +-- Register the addon PIECES to the plugable DSV list local bS, vO = pcall(SyncTable, "PIECES", myPieces, true) if(not bS) then ThrowError("PIECES error: "..vO) end diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index ed1a5dff..3f217932 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.793") +asmlib.SetOpVar("TOOL_VERSION","8.794") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -469,7 +469,7 @@ if(CLIENT) then asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) asmlib.ToIcon("treemenu_ws_opp" , "world" ) asmlib.ToIcon("treemenu_expand" , "zoom" ) - asmlib.ToIcon("treemenu_exp" , "transmit_go" ) + asmlib.ToIcon("treemenu_exp" , "transmit" ) asmlib.ToIcon("treemenu_exp_dsv" , "database_table" ) asmlib.ToIcon("treemenu_exp_run" , "script_code" ) asmlib.ToIcon("subfolder_item" , "folder_brick" ) @@ -836,7 +836,7 @@ if(CLIENT) then if(asmlib.IsBlank(tDat[2])) then return end local iD, pnRow = pnListView:GetSelectedLine() if(asmlib.IsHere(iD) and IsValid(pnRow)) then - if(iD and iD > 0 and pnRow and tpText.Chg) then tpText.Chg = nil + if(iD and iD > 0 and pnRow and tpText.Chng) then tpText.Chng = nil for iU = 1, tpText.Size do pnRow:SetColumnText(iU, tDat[iU]) end else pnListView:AddLine(tDat[1], tDat[2], tDat[3]):SetTooltip(tDat[3]) end else pnListView:AddLine(tDat[1], tDat[2], tDat[3]):SetTooltip(tDat[3]) end @@ -1756,6 +1756,7 @@ asmlib.NewTable("PIECES",{ if(not asmlib.IsHere(stData.Name)) then stData.Name = arLine[3] end if(not asmlib.IsHere(stData.Unit)) then stData.Unit = arLine[8] end if(not asmlib.IsHere(stData.Size)) then stData.Size = 0 end + if(not asmlib.IsHere(stData.Used)) then stData.Used = 0 end if(not asmlib.IsHere(stData.Slot)) then stData.Slot = snPK end local nOffsID = makTab:Match(arLine[4],4); if(not asmlib.IsHere(nOffsID)) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(4,arLine[4],snPK),vSrc); return false end @@ -1822,13 +1823,12 @@ asmlib.NewTable("PIECES",{ if(iD == 1) then local tA = ACache[stRec.Key] if(tA and tA.Size and tA.Size > 0) then - local sRow = defA.Name..sDelim..makA:Match(stRec.Key,1,true,"\"") - for iA = 1, tA.Size do for iC = 2, defA.Size do + local sH = defA.Name..sDelim..makA:Match(stRec.Key,1,true,"\"") + for iA = 1, tA.Size do fA:Write(sH) for iC = 2, defA.Size do local sC = defA[iC][1] - local mA = makA:Match(tA[iA][sC],iC,true,"\""); if(not mA) then - asmlib.LogInstance("Cannot match "..asmlib.GetReport(iA, sC, iC, tA[iA][iC]), vSrc); return false end - fA:Write(sRow); fA:Write(sDelim..mA) - end end + local vC = tA[iA][sC] + fA:Write(sDelim..makA:Match(vC,iC,true,"\"")) + end fA:Write("\n") end end end end diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index aac3b7aa..79b1d420 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1759,18 +1759,18 @@ function OpenNodeMenu(pnBase) LogInstance("Base export invalid"); return nil end pOp:SetIcon(ToIcon(sI.."exp")) pIn:AddOption(languageGetPhrase(sT.."exp_dsv"), - function() SetClipboardText(sID) + function() local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then LogInstance("Player invalid"); return nil end LogInstance("Export "..GetReport(oPly:Nick(), pT:GetText())) - ExportTypeRun(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) + ExportTypeDSV(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) end):SetIcon(ToIcon(sI.."exp_dsv")) pIn:AddOption(languageGetPhrase(sT.."exp_run"), function() local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then LogInstance("Player invalid"); return nil end LogInstance("Export "..GetReport(oPly:Nick(), pT:GetText())) - ExportTypeDSV(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) + ExportTypeRun(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) end):SetIcon(ToIcon(sI.."exp_run")) end pMenu:Open() @@ -2786,16 +2786,16 @@ function NewTable(sTable,defTab,bDelete,bReload) end -- Attaches timer to a record related in the table cache function self:TimerAttach(vMsg, ...) - local sDiv = GetOpVar("OPSYM_DIVIDER") local oSpot, kKey, tKey = self:GetNavigate(...) + local sDiv, nNow = GetOpVar("OPSYM_DIVIDER"), Time() local sMoDB, iCnt = GetOpVar("MODE_DATABASE"), select("#", ...) if(not (IsHere(oSpot) and IsHere(kKey))) then LogInstance("Navigation failed",tabDef.Nick); return nil end LogInstance("Called by "..GetReport(vMsg, kKey),tabDef.Nick) + oSpot[kKey].Used = nNow -- Make the first selected deleteable to avoid phantom records if(sMoDB == "SQL") then local qtCmd = self:GetCommand() -- Read the command and current time - local nNow, tTim = Time(), qtCmd.Timer; if(not IsHere(tTim)) then + local tTim = qtCmd.Timer; if(not IsHere(tTim)) then LogInstance("Missing timer settings",tabDef.Nick); return oSpot[kKey] end - oSpot[kKey].Used = nNow -- Make the first selected deleteable to avoid phantom records local smTM, tmLif, tmDie, tmCol = tTim[1], tTim[2], tTim[3], tTim[4]; if(tmLif <= 0) then LogInstance("Timer attachment ignored",tabDef.Nick); return oSpot[kKey] end LogInstance("Stats "..GetReport(iCnt, smTM, tmLif, tmDie, tmCol), tabDef.Nick) @@ -2842,21 +2842,21 @@ function NewTable(sTable,defTab,bDelete,bReload) end); timerStart(tmID); return oSpot[kKey] else LogInstance("Unsupported mode "..GetReport(smTM),tabDef.Nick); return oSpot[kKey] end elseif(sMoDB == "LUA") then - LogInstance("Memory manager impractical",tabDef.Nick); return oSpot[kKey] + LogInstance("Memory manager skip",tabDef.Nick); return oSpot[kKey] else LogInstance("Unsupported mode "..GetReport(sMoDB),tabDef.Nick); return nil end end -- Restarts timer to a record related in the table cache function self:TimerRestart(vMsg, ...) - local sDiv = GetOpVar("OPSYM_DIVIDER") local sMoDB = GetOpVar("MODE_DATABASE") local oSpot, kKey, tKey = self:GetNavigate(...) + local sDiv, nNow = GetOpVar("OPSYM_DIVIDER"), Time() if(not (IsHere(oSpot) and IsHere(kKey))) then LogInstance("Navigation failed",tabDef.Nick); return nil end LogInstance("Called by "..GetReport(vMsg, kKey),tabDef.Nick) + oSpot[kKey].Used = nNow -- Mark the current caching time stamp if(sMoDB == "SQL") then local qtCmd = self:GetCommand() local tTim = qtCmd.Timer; if(not IsHere(tTim)) then LogInstance("Missing timer settings",tabDef.Nick); return oSpot[kKey] end - oSpot[kKey].Used = Time() -- Mark the current caching time stamp local smTM, tmLif = tTim[1], tTim[2]; if(tmLif <= 0) then LogInstance("Timer life ignored",tabDef.Nick); return oSpot[kKey] end if(smTM == "CQT") then smTM = "CQT" -- Cache query timer does nothing @@ -2865,7 +2865,8 @@ function NewTable(sTable,defTab,bDelete,bReload) LogInstance("Timer missing "..GetReport(tmID),tabDef.Nick); return nil end timerStart(tmID) else LogInstance("Mode mismatch "..GetReport(smTM),tabDef.Nick); return nil end - elseif(sMoDB == "LUA") then oSpot[kKey].Used = Time() + elseif(sMoDB == "LUA") then + LogInstance("Memory manager skip",tabDef.Nick); return oSpot[kKey] else LogInstance("Unsupported mode "..GetReport(sMoDB),tabDef.Nick); return nil end return oSpot[kKey] end @@ -3950,7 +3951,7 @@ function ProcessDSV(sDelim) local fName = (sBas..sSet..lbNam.."_dsv.txt") local F = fileOpen(fName, "rb" ,"DATA"); if(not F) then LogInstance("Open fail "..GetReport(fName)); return false end - local sLine, isEOF = "", false + local sLine, isEOF, sIns = "", false, GetInstPref() local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXDSV") local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} local sDv = sBas..GetOpVar("DIRPATH_DSV") @@ -3961,23 +3962,26 @@ function ProcessDSV(sDelim) local fPrf = GetStrip(tostring(tInf[1] or ""):Trim()) local fSrc = GetStrip(tostring(tInf[2] or ""):Trim()) if(not IsBlank(fPrf)) then -- Is there something - if(not tProc[fPrf]) then - tProc[fPrf] = {Cnt = 1, [1] = fSrc} - else local tStore = tProc[fPrf] -- Prefix is processed already - tStore.Cnt = tStore.Cnt + 1 -- Store the count of the repeated prefixes - tStore[tStore.Cnt] = fSrc + local tStore = tProc[fPrf] + if(not tStore) then + tProc[fPrf] = {Size = 1} + tStore = tProc[fPrf] + tableInsert(tStore, fSrc) + else -- Prefix is processed already + tStore.Size = tStore.Size + 1 -- Store the count of the repeated prefixes + tableInsert(tStore, fSrc) end -- What user puts there is a problem of his own end -- If the line is disabled/comment else LogInstance("Skipped "..GetReport(sLine)) end end end; F:Close() for prf, tab in pairs(tProc) do - if(tab.Cnt > 1) then - LogInstance("Prefix clones "..GetReport(prf, tab.Cnt, fName)) - for iD = 1, tab.Cnt do LogInstance("Prefix "..GetReport(iD, prf, tab[iD])) end - else local irf = GetInstPref() + if(tab.Size > 1) then + LogInstance("Prefix clones "..GetReport(prf, tab.Size, fName)) + for iD = 1, tab.Size do LogInstance("Prefix "..GetReport(iD, prf, tab[iD])) end + else if(CLIENT) then - if(not fileExists(sDv..fForm:format(irf, sNt.."CATEGORY"), "DATA")) then + if(not fileExists(sDv..fForm:format(sIns, sNt.."CATEGORY"), "DATA")) then if(fileExists(sDv..fForm:format(prf, sNt.."CATEGORY"), "DATA")) then if(not ImportCategory(3, prf)) then LogInstance("Failed "..GetReport(prf, "CATEGORY")) end @@ -3987,7 +3991,7 @@ function ProcessDSV(sDelim) for iD = 1, #libQTable do local makTab = GetBuilderID(iD) local defTab = makTab:GetDefinition() - if(not fileExists(sDv..fForm:format(irf, sNt..defTab.Nick), "DATA")) then + if(not fileExists(sDv..fForm:format(sIns, sNt..defTab.Nick), "DATA")) then if(fileExists(sDv..fForm:format(prf, sNt..defTab.Nick), "DATA")) then if(not ImportDSV(defTab.Nick, true, prf)) then LogInstance("Failed "..GetReport(prf, defTab.Nick)) end From 42f4d2c78ea04e8489058da811c8ffb3a067e383 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 30 Oct 2024 10:23:10 +0200 Subject: [PATCH 057/114] Added: Test if the file is present before opening --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 3f217932..d69fb0e6 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.794") +asmlib.SetOpVar("TOOL_VERSION","8.795") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 79b1d420..de9515e8 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3763,8 +3763,10 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end local fForm, sMoDB = GetOpVar("FORM_PREFIXDSV"), GetOpVar("MODE_DATABASE") local sFunc = "SynchronizeDSV"; fName = fName..fForm:format(fPref, defTab.Name) - local I, fData = fileOpen(fName, "rb", "DATA"), {} - if(I) then local sLine, isEOF = "", false + local bI, fData = fileExists(fName, "DATA"), {} + if(bI) then + local sLine, isEOF = "", false + local I = fileOpen(fName, "rb", "DATA") while(not isEOF) do sLine, isEOF = GetStringFile(I) if((not IsBlank(sLine)) and (not IsDisable(sLine))) then local tLine = sDelim:Explode(sLine) From 90aaacd1b82e189c8b9135e9fc9c1326806dac4e Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 30 Oct 2024 11:25:18 +0200 Subject: [PATCH 058/114] Fixed: DSV registration existence check crash when source not provided --- lua/trackassembly/trackasmlib.lua | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index de9515e8..d4e61de6 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3910,25 +3910,25 @@ function RegisterDSV(sProg, sPref, sDelim, bSkip) local sDelim = tostring(sDelim or "\t"):sub(1,1) if(bSkip) then if(fileExists(fName, "DATA")) then - local fPool, isEOF, isAct = {}, false, true + local fPool, isEOF = {}, false local F, sLine = fileOpen(fName, "rb" ,"DATA"), ""; if(not F) then LogInstance("Skip fail "..GetReport(fPref, fName)); return false end - while(not isEOF) do sLine, isEOF = GetStringFile(F) - if(not IsBlank(sLine)) then - if(IsDisable(sLine)) then - isAct, sLine = false, sLine:sub(2,-1) else isAct = true end + while(not isEOF) do + sLine, isEOF = GetStringFile(F) + if(not IsBlank(sLine)) then local isAct = true + if(IsDisable(sLine)) then isAct, sLine = false, sLine:sub(2,-1) end local tab = sDelim:Explode(sLine) - local prf, src = tab[1]:Trim(), tab[2]:Trim() + local prf = tostring(tab[1]):Trim() + local src = tostring(tab[2] or sMiss):Trim() local inf = fPool[prf]; if(not inf) then fPool[prf] = {Size = 0}; inf = fPool[prf] end - inf.Size = inf.Size + 1; inf[inf.Size] = {src, isAct} + tableInsert(inf, {isAct and "V" or "X", src}); inf.Size = inf.Size + 1 end end; F:Close() if(fPool[fPref]) then local inf = fPool[fPref] - for ID = 1, inf.Size do local tab = inf[ID] - local sta = (tab[2] and "On " or "Off") - LogInstance(GetReport(fPref, sta, tab[1])) end - LogInstance("Skip "..GetReport(fPref, sProg)); return true + for iP = 1, inf.Size do local tab = inf[iP] + LogInstance("Status "..GetReport(tab[1], fPref, tab[2])) + end; LogInstance("Skip "..GetReport(fPref, sProg)); return true end else LogInstance("Skip miss "..GetReport(fPref, fName)) end end From cb8dd5ba877bc0cb00f3a25323d125c88b0cb447 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 30 Oct 2024 12:12:40 +0200 Subject: [PATCH 059/114] Added: Import/Export category being forced from/to the EXP folder --- lua/trackassembly/trackasmlib.lua | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index d4e61de6..2fd4ba38 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3562,9 +3562,10 @@ end * Save/Load the category generation * vEq > Amount of internal comment depth * tData > The local data table to be exported ( if given ) - * sPref > Prefix used on exporting ( if not uses instance prefix ) + * sPref > Prefix used on exporting ( if none uses instance prefix ) + * bExp > Forces the output in the export folder.( defaults to DSV ) ]] -function ExportCategory(vEq, tData, sPref) +function ExportCategory(vEq, tData, sPref, bExp) if(SERVER) then LogInstance("Working on server"); return true end local nEq = (tonumber(vEq) or 0); if(nEq <= 0) then LogInstance("Wrong equality "..GetReport(vEq)); return false end @@ -3574,7 +3575,7 @@ function ExportCategory(vEq, tData, sPref) LogInstance("("..fPref..") User disabled"); return true end local fName, sFunc = GetOpVar("DIRPATH_BAS"), "ExportCategory" if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - fName = fName..GetOpVar("DIRPATH_DSV") + fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") fName = fName..fForm:format(fPref, sTool.."CATEGORY") @@ -3593,13 +3594,20 @@ function ExportCategory(vEq, tData, sPref) end; F:Flush(); F:Close(); LogInstance("("..fPref..") Success"); return true end -function ImportCategory(vEq, sPref) +--[[ + * Save/Load the category generation + * vEq > Amount of internal comment depth + * sPref > Prefix used on importing ( if none uses instance prefix ) + * bExp > Forces the input from the export folder.( defaults to DSV ) +]] +function ImportCategory(vEq, sPref, bExp) if(SERVER) then LogInstance("Working on server"); return true end local nEq = (tonumber(vEq) or 0); if(nEq <= 0) then LogInstance("Wrong equality "..GetReport(vEq)); return false end local fPref = tostring(sPref or GetInstPref()) local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") - local fName = GetOpVar("DIRPATH_BAS")..GetOpVar("DIRPATH_DSV") + local fName = GetOpVar("DIRPATH_BAS") --Switch the import source + fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) fName = fName..fForm:format(fPref, sTool.."CATEGORY") local F = fileOpen(fName, "rb", "DATA") if(not F) then LogInstance("("..fName..") Open fail"); return false end From 1ea595e6672a0c724768c0fd78e0e0f7742e0e98 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 30 Oct 2024 17:45:26 +0200 Subject: [PATCH 060/114] Added: Attachment extraction via unique entity index and log per type Added: Pieces record trigger to default POA values to NULL Updated: Some typos and grammar updates for Shinji and autorun --- .../set/z_autorun_[trackassembly].txt | 16 +++--- lua/autorun/trackassembly_init.lua | 5 +- lua/autorun/z_autorun_[shinji85_s_rails].lua | 14 ++--- lua/trackassembly/trackasmlib.lua | 51 ++++++++----------- 4 files changed, 41 insertions(+), 45 deletions(-) diff --git a/data/trackassembly/set/z_autorun_[trackassembly].txt b/data/trackassembly/set/z_autorun_[trackassembly].txt index a0dc5556..36216363 100644 --- a/data/trackassembly/set/z_autorun_[trackassembly].txt +++ b/data/trackassembly/set/z_autorun_[trackassembly].txt @@ -167,7 +167,7 @@ asmlib.WorkshopID(myAddon, "287012681") -- Register the addon to the plugable DSV list local bS, vO = pcall(RegisterDSV, myFlag) -if(not bS) then ThrowError("Retistration error: "..vO) end +if(not bS) then ThrowError("Registration error: "..vO) end --[[ * This is used if you want to make internal categories for your addon @@ -177,7 +177,7 @@ if(not bS) then ThrowError("Retistration error: "..vO) end * with that much elements or return a /nil/ value to add the piece to * the root of your branch. You can also return a second value if you * want to override the track piece name. If you need to use categories - * for multiple track types, just put their hashes in the table below + * for multiple track types, just put their hashes in the table below * and make every track point to its dedicated category handler. ]]-- local myCategory = { @@ -224,7 +224,7 @@ if(not bS) then ThrowError("Category error: "..vO) end * the model ( from the last slash to the file extension ). * LINEID > This is the ID of the point that can be selected for building. They must be * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. + * a given model key. Disabling this, makes it use the index of the current line. * Use that to swap the active points around by only moving the desired row up or down. * For the example table definition below, the line ID in the database will be the same. * POINT > This is the location vector that TA searches and selects the related ORIGIN for. @@ -262,14 +262,14 @@ if(not bS) then ThrowError("PIECES error: "..vO) end * and then for every active point, you must have one array of * strings and numbers, where the elements match the following data settings. * {MODELBASE, MODELADD, ENTCLASS, LINEID, POSOFF, ANGOFF, MOVETYPE, PHYSINIT, DRSHADOW, PHMOTION, PHYSLEEP, SETSOLID} - * MODELBASE > This string contains the path to your base /*.mdl/ file the additions are gonna be attached to. + * MODELBASE > This string contains the path to your base /*.mdl/ file the additions will be attached to. * It is mandatory and taken in pairs with LINEID, it forms the unique identifier of every record. - * When used in /DSV/ mode ( like seen below ) is is used as a hash index. + * When used in /DSV/ mode ( like seen below ) it is used as a hash index. * MODELADD > This is the /*.mdl/ path of the addition entity. It is mandatory and cannot be disabled. * ENTCLASS > This is the class of the addition entity. When disabled or missing it defaults to a normal prop. * LINEID > This is the ID of the point that can be selected for building. They must be * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. + * a given model key. Disabling this, makes it use the index of the current line. * Use that to swap the active points around by only moving the desired row up or down. * For the example table definition below, the line ID in the database will be the same. * POSOFF > This is the local position vector offset that TA uses to place the addition relative to MODELBASE. @@ -302,10 +302,10 @@ if(not bS) then ThrowError("ADDITIONS error: "..vO) end * {TYPE, LINEID, NAME} * TYPE > This is the category under your physical properties are stored internally. * It is mandatory and taken in pairs with LINEID, it forms the unique identifier of every record. - * When used in /DSV/ mode ( like seen below ) is is used as a hash index. + * When used in /DSV/ mode ( like seen below ) it is used as a hash index. * LINEID > This is the ID of the point that can be selected for building. They must be * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. + * a given model key. Disabling this, makes it use the index of the current line. * Use that to swap the active points around by only moving the desired row up or down. * For the example table definition below, the line ID in the database will be the same. * NAME > This stores the name of the physical property. It must an actual physical property. diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index d69fb0e6..6be3d6e2 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.795") +asmlib.SetOpVar("TOOL_VERSION","8.796") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1740,6 +1740,9 @@ asmlib.NewTable("PIECES",{ local emFva = asmlib.GetOpVar("EMPTYSTR_BLDS") arLine[2] = asmlib.GetEmpty(arLine[2], emFva, asmlib.Categorize(), noTY) arLine[3] = asmlib.GetEmpty(arLine[3], emFva, asmlib.ModelToName(arLine[1]), noMD) + arLine[5] = asmlib.GetEmpty(arLine[5], asmlib.IsBlank, noSQL) + arLine[6] = asmlib.GetEmpty(arLine[6], asmlib.IsBlank, noSQL) + arLine[7] = asmlib.GetEmpty(arLine[7], asmlib.IsBlank, noSQL) arLine[8] = asmlib.GetEmpty(arLine[8], emFva, noSQL) if(not (asmlib.IsNull(arLine[8]) or asmlib.IsBlank(arLine[8]) or trCls[arLine[8]])) then asmlib.LogInstance("Register trace "..asmlib.GetReport(arLine[8],arLine[1]),vSrc) diff --git a/lua/autorun/z_autorun_[shinji85_s_rails].lua b/lua/autorun/z_autorun_[shinji85_s_rails].lua index 369946cc..56bcaf39 100644 --- a/lua/autorun/z_autorun_[shinji85_s_rails].lua +++ b/lua/autorun/z_autorun_[shinji85_s_rails].lua @@ -167,7 +167,7 @@ asmlib.WorkshopID(myAddon, "326640186") -- Register the addon to the plugable DSV list local bS, vO = pcall(RegisterDSV, myFlag) -if(not bS) then ThrowError("Retistration error: "..vO) end +if(not bS) then ThrowError("Registration error: "..vO) end --[[ * This is used if you want to make internal categories for your addon @@ -220,7 +220,7 @@ if(not bS) then ThrowError("Category error: "..vO) end * the model ( from the last slash to the file extension ). * LINEID > This is the ID of the point that can be selected for building. They must be * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. + * a given model key. Disabling this, makes it use the index of the current line. * Use that to swap the active points around by only moving the desired row up or down. * For the example table definition below, the line ID in the database will be the same. * POINT > This is the location vector that TA searches and selects the related ORIGIN for. @@ -353,14 +353,14 @@ if(not bS) then ThrowError("PIECES error: "..vO) end * and then for every active point, you must have one array of * strings and numbers, where the elements match the following data settings. * {MODELBASE, MODELADD, ENTCLASS, LINEID, POSOFF, ANGOFF, MOVETYPE, PHYSINIT, DRSHADOW, PHMOTION, PHYSLEEP, SETSOLID} - * MODELBASE > This string contains the path to your base /*.mdl/ file the additions are gonna be attached to. + * MODELBASE > This string contains the path to your base /*.mdl/ file the additions will be attached to. * It is mandatory and taken in pairs with LINEID, it forms the unique identifier of every record. - * When used in /DSV/ mode ( like seen below ) is is used as a hash index. + * When used in /DSV/ mode ( like seen below ) it is used as a hash index. * MODELADD > This is the /*.mdl/ path of the addition entity. It is mandatory and cannot be disabled. * ENTCLASS > This is the class of the addition entity. When disabled or missing it defaults to a normal prop. * LINEID > This is the ID of the point that can be selected for building. They must be * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. + * a given model key. Disabling this, makes it use the index of the current line. * Use that to swap the active points around by only moving the desired row up or down. * For the example table definition below, the line ID in the database will be the same. * POSOFF > This is the local position vector offset that TA uses to place the addition relative to MODELBASE. @@ -404,10 +404,10 @@ if(not bS) then ThrowError("ADDITIONS error: "..vO) end * {TYPE, LINEID, NAME} * TYPE > This is the category under your physical properties are stored internally. * It is mandatory and taken in pairs with LINEID, it forms the unique identifier of every record. - * When used in /DSV/ mode ( like seen below ) is is used as a hash index. + * When used in /DSV/ mode ( like seen below ) it is used as a hash index. * LINEID > This is the ID of the point that can be selected for building. They must be * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. + * a given model key. Disabling this, makes it use the index of the current line. * Use that to swap the active points around by only moving the desired row up or down. * For the example table definition below, the line ID in the database will be the same. * NAME > This stores the name of the physical property. It must an actual physical property. diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 2fd4ba38..57143177 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2234,21 +2234,28 @@ function GetAttachmentByID(vSrc, sID) LogInstance("Index missing "..GetReport(sID, vSrc)); return nil end if(isstring(vSrc)) then -- Source is a model path sSrc = vSrc; if(not IsModel(sSrc)) then - LogInstance("Model mismatch "..GetReport(sID, sSrc)); return nil, sSrc end + LogInstance("Model mismatch [S] "..GetReport(sID, sSrc)); return nil, sSrc end eBase = GetOpVar("ENTITY_TRANSFORMPOA") -- Use transform entity if(eBase and eBase:IsValid()) then -- Valid basis entity then if(eBase:GetModel() ~= sSrc) then eBase:SetModel(sSrc) - LogInstance("Update "..GetReport(eBase:EntIndex(), sID, sSrc)) end + LogInstance("Update [S] "..GetReport(eBase:EntIndex(), sID, sSrc)) end else -- If there is no basis need to create one for attachment extraction eBase = NewEntityNone(sSrc); if(not (eBase and eBase:IsValid())) then - LogInstance("Basis creation error "..GetReport(sID, sSrc)); return nil, sSrc end + LogInstance("Basis creation error [S] "..GetReport(sID, sSrc)); return nil, sSrc end SetOpVar("ENTITY_TRANSFORMPOA", eBase) -- Register the entity transform basis end -- Transfer the data from the transform attachment location + elseif(isnumber(vSrc)) then + local iSrc = mathFloor(vSrc); if(iSrc <= 0) then + LogInstance("Index invalid [N] "..GetReport(sID, vSrc, iSrc)); return nil, sSrc end + local eSrc = EntityID(iSrc); if(not (eSrc and eSrc:IsValid())) then + LogInstance("Entity invalid [N] "..GetReport(sID, eSrc)); return nil, sSrc end + eBase, sSrc = eSrc, eSrc:GetModel(); if(not isstring(sID)) then + LogInstance("Index mismatch [N] "..GetReport(sID, sSrc)); return nil, sSrc end else -- Assume the source is an entity already spawned use it instead if(not (vSrc and vSrc:IsValid())) then - LogInstance("Entity invalid "..GetReport(sID, vSrc)); return nil, sSrc end + LogInstance("Entity invalid [E] "..GetReport(sID, vSrc)); return nil, sSrc end eBase, sSrc = vSrc, vSrc:GetModel(); if(not isstring(sID)) then - LogInstance("Index mismatch "..GetReport(sID, sSrc)); return nil, sSrc end + LogInstance("Index mismatch [E] "..GetReport(sID, sSrc)); return nil, sSrc end end local mID = eBase:LookupAttachment(sID); if(not isnumber(mID)) then LogInstance("Attachment invalid ID "..GetReport(sID, sSrc)); return nil, sSrc end @@ -2276,18 +2283,13 @@ function LocatePOA(oRec, ivPoID) local stPOA = tOffs[iPoID]; if(not IsHere(stPOA)) then LogInstance("Missing ID "..GetReport(iPoID, oRec.Slot)); return nil end if(oRec.Post) then oRec.Post = nil -- Transforming has started - for ID = 1, oRec.Size do local tPOA = tOffs[ID] -- Index current offset + for ID = 1, oRec.Size do + local tPOA, sM = tOffs[ID], oRec.Slot local sP, sO, sA = tPOA.P:Raw(), tPOA.O:Raw(), tPOA.A:Raw() - if(sO) then tPOA.O:Decode(sO, oRec.Slot, "Pos") - LogInstance("Origin spawn "..GetReport(ID, sO)) - end -- Transform origin is decoded from the model and stored in the cache - if(sA) then tPOA.A:Decode(sA, oRec.Slot, "Ang") - LogInstance("Angle spawn "..GetReport(ID, sA)) - end -- Transform angle is decoded from the model and stored in the cache - if(sP) then tPOA.P:Decode(sP, oRec.Slot, "Pos", tPOA.O:Get()) - LogInstance("Point spawn "..GetReport(ID, sP)) - end -- Otherwise point is initialized on registration and we have nothing to do here - LogInstance("Index "..GetReport(ID, tPOA.P:String(), tPOA.O:String(), tPOA.A:String())) + if(sO) then tPOA.O:Decode(sO, sM, "Pos") end + if(sA) then tPOA.A:Decode(sA, sM, "Ang") end + if(sP) then tPOA.P:Decode(sP, sM, "Pos", tPOA.O:Get()) end + LogInstance("Spawn "..GetReport(ID, tPOA.P:String(), tPOA.O:String(), tPOA.A:String())) end -- Loop and transform all the POA configuration at once. Game model slot will be taken end; return stPOA, iPoID end @@ -2303,6 +2305,7 @@ function RegisterPOA(stData, ivID, sP, sO, sA) LogInstance("Origin mismatch "..GetReport(sO)); return nil end local sA = (sA or sNull); if(not isstring(sA)) then LogInstance("Angle mismatch "..GetReport(sA)); return nil end + LogInstance("Store "..GetReport(sNull, iID, sP, sO, sA, stData.Slot)) if(not stData.Offs) then if(iID ~= 1) then LogInstance("Mismatch ID "..GetReport(iID, stData.Slot)); return nil end stData.Offs = {}; stData.Post = true @@ -2315,19 +2318,9 @@ function RegisterPOA(stData, ivID, sP, sO, sA) tOffs[iID] = {}; tOffs = tOffs[iID] -- Allocate a local offset index tOffs.P = NewPOA(); tOffs.O = NewPOA(); tOffs.A = NewPOA() end - LogInstance("Default "..GetReport(sNull, stData.Slot)) - if(not tOffs.O:Raw()) then -- To be decoded on spawn via locating - tOffs.O:Set(); tOffs.O:Raw(sO) -- Store transform - LogInstance("Origin init "..GetReport(iID, sO)) - end -- Try decoding the transform point when not applicable - if(not tOffs.A:Raw()) then -- To be decoded on spawn via locating - tOffs.A:Set(); tOffs.A:Raw(sA) -- Store transform - LogInstance("Angle init "..GetReport(iID, sA)) - end -- Try decoding the transform point when not applicable - if(not tOffs.P:Raw()) then -- Origin transform trigger - tOffs.P:Set(); tOffs.P:Raw(sP) -- Store transform - LogInstance("Point init "..GetReport(iID, sP)) - end -- Try decoding the transform point when not applicable + if(not tOffs.O:Raw()) then tOffs.O:Set(); tOffs.O:Raw(sO) end + if(not tOffs.A:Raw()) then tOffs.A:Set(); tOffs.A:Raw(sA) end + if(not tOffs.P:Raw()) then tOffs.P:Set(); tOffs.P:Raw(sP) end return tOffs -- On success return the populated POA offset end From c8bb08f9e82cbf45fab240ac92f30c96eecdc3e8 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Wed, 30 Oct 2024 20:24:50 +0200 Subject: [PATCH 061/114] Updated: Log proper data when navigation is missing --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 6be3d6e2..9b09bcfb 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.796") +asmlib.SetOpVar("TOOL_VERSION","8.798") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 57143177..3e5f7edc 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2780,10 +2780,12 @@ function NewTable(sTable,defTab,bDelete,bReload) -- Attaches timer to a record related in the table cache function self:TimerAttach(vMsg, ...) local oSpot, kKey, tKey = self:GetNavigate(...) + if(not (IsHere(oSpot) and IsHere(kKey))) then + LogInstance("Navigation miss "..GetReport(unpack(tKey)),tabDef.Nick) + LogTable(oSpot, "Navigation", tabDef.Nick); return nil + end -- Navigated to the last table node and returned the value key local sDiv, nNow = GetOpVar("OPSYM_DIVIDER"), Time() local sMoDB, iCnt = GetOpVar("MODE_DATABASE"), select("#", ...) - if(not (IsHere(oSpot) and IsHere(kKey))) then - LogInstance("Navigation failed",tabDef.Nick); return nil end LogInstance("Called by "..GetReport(vMsg, kKey),tabDef.Nick) oSpot[kKey].Used = nNow -- Make the first selected deleteable to avoid phantom records if(sMoDB == "SQL") then local qtCmd = self:GetCommand() -- Read the command and current time @@ -2840,11 +2842,13 @@ function NewTable(sTable,defTab,bDelete,bReload) end -- Restarts timer to a record related in the table cache function self:TimerRestart(vMsg, ...) - local sMoDB = GetOpVar("MODE_DATABASE") local oSpot, kKey, tKey = self:GetNavigate(...) - local sDiv, nNow = GetOpVar("OPSYM_DIVIDER"), Time() if(not (IsHere(oSpot) and IsHere(kKey))) then - LogInstance("Navigation failed",tabDef.Nick); return nil end + LogInstance("Navigation miss "..GetReport(unpack(tKey)),tabDef.Nick) + LogTable(oSpot, "Navigation", tabDef.Nick); return nil + end -- Navigated to the last table node and returned the value key + local sMoDB = GetOpVar("MODE_DATABASE") + local sDiv, nNow = GetOpVar("OPSYM_DIVIDER"), Time() LogInstance("Called by "..GetReport(vMsg, kKey),tabDef.Nick) oSpot[kKey].Used = nNow -- Mark the current caching time stamp if(sMoDB == "SQL") then local qtCmd = self:GetCommand() From aa5db083757839731775eb6cbdcbb40bb546afd6 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Wed, 30 Oct 2024 22:32:33 +0200 Subject: [PATCH 062/114] Fixed: Categories not being exported due to one-liners Added: More logging skip triggers Added: Force EXP destination for Export/Import DSV Added: Better logic control flow for `Categorize` Added: Freshly exported content database from the gmod client Changed: Open DSV manager will be triggered by export DB button Changed: Only one database per table to trigger generic population Removed: One-liner export error trigger in `ExportCategory` Removed: Export database as a file will not be present on the server Removed: Some data exports that are old and nor relevant anymore --- .../exp/cl_TRACKASSEMBLY_ADDITIONS.txt | 8 - .../exp/cl_TRACKASSEMBLY_PHYSPROPERTIES.txt | 91 - .../exp/cl_TRACKASSEMBLY_PIECES.txt | 2366 --------- .../exp/cl_trackassembly_additions.txt | 8 + .../exp/cl_trackassembly_category.txt | 203 + .../exp/cl_trackassembly_physproperties.txt | 91 + .../exp/cl_trackassembly_pieces.txt | 4228 +++++++++++++++++ .../exp/sv_TRACKASSEMBLY_ADDITIONS.txt | 8 - .../exp/sv_TRACKASSEMBLY_PHYSPROPERTIES.txt | 91 - .../exp/sv_TRACKASSEMBLY_PIECES.txt | 2366 --------- ..._autorun_[anyone_s_horrible_trackpack].txt | 373 -- data/trackassembly/set/trackasmlib_slskip.txt | 10 +- lua/autorun/trackassembly_init.lua | 26 +- lua/trackassembly/trackasmlib.lua | 130 +- .../gmod_tool/stools/trackassembly.lua | 12 - 15 files changed, 4613 insertions(+), 5398 deletions(-) delete mode 100644 data/trackassembly/exp/cl_TRACKASSEMBLY_ADDITIONS.txt delete mode 100644 data/trackassembly/exp/cl_TRACKASSEMBLY_PHYSPROPERTIES.txt delete mode 100644 data/trackassembly/exp/cl_TRACKASSEMBLY_PIECES.txt create mode 100644 data/trackassembly/exp/cl_trackassembly_additions.txt create mode 100644 data/trackassembly/exp/cl_trackassembly_category.txt create mode 100644 data/trackassembly/exp/cl_trackassembly_physproperties.txt create mode 100644 data/trackassembly/exp/cl_trackassembly_pieces.txt delete mode 100644 data/trackassembly/exp/sv_TRACKASSEMBLY_ADDITIONS.txt delete mode 100644 data/trackassembly/exp/sv_TRACKASSEMBLY_PHYSPROPERTIES.txt delete mode 100644 data/trackassembly/exp/sv_TRACKASSEMBLY_PIECES.txt delete mode 100644 data/trackassembly/exp/z_autorun_[anyone_s_horrible_trackpack].txt diff --git a/data/trackassembly/exp/cl_TRACKASSEMBLY_ADDITIONS.txt b/data/trackassembly/exp/cl_TRACKASSEMBLY_ADDITIONS.txt deleted file mode 100644 index 0b6817f7..00000000 --- a/data/trackassembly/exp/cl_TRACKASSEMBLY_ADDITIONS.txt +++ /dev/null @@ -1,8 +0,0 @@ -# StoreExternalDatabase( INS ): 01/22/17 17:15:05 [ LUA ] -# Data settings: MODELBASE,MODELADD,ENTCLASS,LINEID,POSOFF,ANGOFF,MOVETYPE,PHYSINIT,DRSHADOW,PHMOTION,PHYSLEEP,SETSOLID - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/sw_lever.mdl","buttonswitch",1,"-100,125,0","NULL",-1,-1,-1,0,-1,-1}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/rail_r_switcher1.mdl","prop_dynamic",2,"NULL","NULL",6,6,-1,-1,1,6}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/rail_r_switcher2.mdl","prop_dynamic",3,"NULL","NULL",6,6,-1,0,-1,0}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/sw_lever.mdl","buttonswitch",1,"-100,-125,0","0,180,0",-1,-1,-1,0,-1,-1}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/rail_l_switcher1.mdl","prop_dynamic",2,"NULL","NULL",6,6,-1,-1,1,6}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/rail_l_switcher2.mdl","prop_dynamic",3,"NULL","NULL",6,6,-1,0,-1,0}) diff --git a/data/trackassembly/exp/cl_TRACKASSEMBLY_PHYSPROPERTIES.txt b/data/trackassembly/exp/cl_TRACKASSEMBLY_PHYSPROPERTIES.txt deleted file mode 100644 index 8d5d202e..00000000 --- a/data/trackassembly/exp/cl_TRACKASSEMBLY_PHYSPROPERTIES.txt +++ /dev/null @@ -1,91 +0,0 @@ -# StoreExternalDatabase( INS ): 01/22/17 17:15:05 [ LUA ] -# Data settings: TYPE,LINEID,NAME - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",1,"default"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",2,"default_silent"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",3,"floatingstandable"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",4,"item"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",5,"ladder"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",6,"no_decal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",7,"player"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",8,"player_control_clip"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",1,"brick"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",2,"concrete"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",3,"concrete_block"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",4,"gravel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",5,"rock"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",1,"canister"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",2,"chain"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",3,"chainlink"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",4,"combine_metal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",5,"crowbar"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",6,"floating_metal_barrel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",7,"grenade"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",8,"gunship"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",9,"metal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",10,"metal_barrel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",11,"metal_bouncy"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",12,"Metal_Box"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",13,"metal_seafloorcar"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",14,"metalgrate"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",15,"metalpanel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",16,"metalvent"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",17,"metalvehicle"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",18,"paintcan"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",19,"popcan"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",20,"roller"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",21,"slipperymetal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",22,"solidmetal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",23,"strider"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",24,"weapon"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",1,"wood"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",2,"Wood_Box"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",3,"Wood_Furniture"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",4,"Wood_Plank"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",5,"Wood_Panel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",6,"Wood_Solid"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",1,"dirt"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",2,"grass"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",3,"gravel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",4,"mud"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",5,"quicksand"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",6,"sand"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",7,"slipperyslime"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",8,"antlionsand"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Liquid",1,"slime"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Liquid",2,"water"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Liquid",3,"wade"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Frozen",1,"snow"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Frozen",2,"ice"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Frozen",3,"gmod_ice"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Miscellaneous",1,"carpet"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Miscellaneous",2,"ceiling_tile"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Miscellaneous",3,"computer"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Miscellaneous",4,"pottery"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",1,"alienflesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",2,"antlion"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",3,"armorflesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",4,"bloodyflesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",5,"flesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",6,"foliage"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",7,"watermelon"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",8,"zombieflesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",1,"jeeptire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",2,"jalopytire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",3,"rubber"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",4,"rubbertire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",5,"slidingrubbertire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",6,"slidingrubbertire_front"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",7,"slidingrubbertire_rear"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",8,"brakingrubbertire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",9,"tile"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",10,"paper"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",11,"papercup"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",12,"cardboard"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",13,"plaster"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",14,"plastic_barrel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",15,"plastic_barrel_buoyant"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",16,"Plastic_Box"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",17,"plastic"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",18,"glass"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",19,"glassbottle"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",20,"combine_glass"}) diff --git a/data/trackassembly/exp/cl_TRACKASSEMBLY_PIECES.txt b/data/trackassembly/exp/cl_TRACKASSEMBLY_PIECES.txt deleted file mode 100644 index 9224dceb..00000000 --- a/data/trackassembly/exp/cl_TRACKASSEMBLY_PIECES.txt +++ /dev/null @@ -1,2366 +0,0 @@ -# StoreExternalDatabase( INS ): 01/22/17 17:15:05 [ LUA ] -# Data settings: MODEL,TYPE,NAME,LINEID,POINT,ORIGIN,ANGLE,CLASS - asmlib.InsertRecord("PIECES", {"models/craptrax/curve_cs_std/curve_cs_std_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curve_cs_std/curve_cs_std_damaged.mdl","Battleship's abandoned rails","#",2,"","-966.40771,127.97242,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curve_cs_std/curve_cs_std_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curve_cs_std/curve_cs_std_nodamage.mdl","Battleship's abandoned rails","#",2,"","-966.40771,127.97242,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver1/curve_r1_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver1/curve_r1_damaged.mdl","Battleship's abandoned rails","#",2,"","-1060.13232,139.53517,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver1/curve_r1_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver1/curve_r1_nodamage.mdl","Battleship's abandoned rails","#",2,"","-1060.13232,139.53517,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver11/curve_r11_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver11/curve_r11_damaged.mdl","Battleship's abandoned rails","#",2,"","-1086.07532,450.1528,-16.110403","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver11/curve_r11_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver11/curve_r11_nodamage.mdl","Battleship's abandoned rails","#",2,"","-1086.07532,450.1528,-16.110403","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver2/curve_r2_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver2/curve_r2_damaged.mdl","Battleship's abandoned rails","#",2,"","-993.86975,130.8159,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver2/curve_r2_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver2/curve_r2_nodamage.mdl","Battleship's abandoned rails","#",2,"","-993.86975,130.8159,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver3/curve_r3_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver3/curve_r3_damaged.mdl","Battleship's abandoned rails","#",2,"","-927.61951,122.07793,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver3/curve_r3_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver3/curve_r3_nodamage.mdl","Battleship's abandoned rails","#",2,"","-927.61951,122.07793,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight1x/straight_1x_damaged.mdl","Battleship's abandoned rails","#",1,"","64,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight1x/straight_1x_damaged.mdl","Battleship's abandoned rails","#",2,"","-64,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight1x/straight_1x_nodamage.mdl","Battleship's abandoned rails","#",1,"","64,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight1x/straight_1x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-64,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight2x/straight_2x_damaged.mdl","Battleship's abandoned rails","#",1,"","128,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight2x/straight_2x_damaged.mdl","Battleship's abandoned rails","#",2,"","-128,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight2x/straight_2x_nodamage.mdl","Battleship's abandoned rails","#",1,"","128,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight2x/straight_2x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-128,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight3x/straight_3x_damaged.mdl","Battleship's abandoned rails","#",1,"","192,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight3x/straight_3x_damaged.mdl","Battleship's abandoned rails","#",2,"","-192,0,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight3x/straight_3x_nodamage.mdl","Battleship's abandoned rails","#",1,"","192,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight3x/straight_3x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-192,0,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight4x/straight_4x_damaged.mdl","Battleship's abandoned rails","#",1,"","256,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight4x/straight_4x_damaged.mdl","Battleship's abandoned rails","#",2,"","-256,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight4x/straight_4x_nodamage.mdl","Battleship's abandoned rails","#",1,"","256,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight4x/straight_4x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-256,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight8x/straight_8x_damaged.mdl","Battleship's abandoned rails","#",1,"","512,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight8x/straight_8x_damaged.mdl","Battleship's abandoned rails","#",2,"","-512,0,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight8x/straight_8x_nodamage.mdl","Battleship's abandoned rails","#",1,"","512,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight8x/straight_8x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-512,0,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight_cs_std/straight_cs_std_damaged.mdl","Battleship's abandoned rails","#",1,"","454.40574,0.01251,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight_cs_std/straight_cs_std_damaged.mdl","Battleship's abandoned rails","#",2,"","-454.40574,0.01248,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight_cs_std/straight_cs_std_nodamage.mdl","Battleship's abandoned rails","#",1,"","454.40574,0.01251,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight_cs_std/straight_cs_std_nodamage.mdl","Battleship's abandoned rails","#",2,"","-454.40574,0.01248,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_left_std/switch_left_base_std.mdl","Battleship's abandoned rails","#",1,"","512,-0.000545,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_left_std/switch_left_base_std.mdl","Battleship's abandoned rails","#",2,"","-512,-0.000545,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_left_std/switch_left_base_std.mdl","Battleship's abandoned rails","#",3,"","-454.49805,-128.04355,-16.110403","0,-165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_right_std/switch_right_base_std.mdl","Battleship's abandoned rails","#",1,"","512,3e-005,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_right_std/switch_right_base_std.mdl","Battleship's abandoned rails","#",2,"","-512,-3e-005,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_right_std/switch_right_base_std.mdl","Battleship's abandoned rails","#",3,"","-454.48437,128.0936,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/misc/cross.mdl","Bobster's two feet rails","#",1,"","83,0,3.015","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/misc/cross.mdl","Bobster's two feet rails","#",2,"","0.003,83,3.015","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/misc/cross.mdl","Bobster's two feet rails","#",3,"","-83,0.003,3.015","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/misc/cross.mdl","Bobster's two feet rails","#",4,"","0,-83,3.015","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_1024.mdl","Bobster's two feet rails","#",2,"","249.471,49.621,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_2048.mdl","Bobster's two feet rails","#",2,"","498.941,99.246,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_512.mdl","Bobster's two feet rails","#",2,"","124.735,24.812,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_1024.mdl","Bobster's two feet rails","#",2,"","249.471,-49.623,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_2048.mdl","Bobster's two feet rails","#",2,"","498.945,-99.237,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_512.mdl","Bobster's two feet rails","#",2,"","124.736,-24.811,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_1024.mdl","Bobster's two feet rails","#",2,"","460.962,190.936,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_2048.mdl","Bobster's two feet rails","#",2,"","921.925,381.872,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_512.mdl","Bobster's two feet rails","#",2,"","230.481,95.468,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_1024.mdl","Bobster's two feet rails","#",2,"","460.963,-190.936,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_2048.mdl","Bobster's two feet rails","#",2,"","921.925,-381.872,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_512.mdl","Bobster's two feet rails","#",2,"","230.481,-95.469,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_1024.mdl","Bobster's two feet rails","#",2,"","651.898,651.898,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_2048.mdl","Bobster's two feet rails","#",2,"","1303.797,1303.797,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_512.mdl","Bobster's two feet rails","#",2,"","325.949,325.95,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_1024.mdl","Bobster's two feet rails","#",2,"","651.898,-651.899,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_2048.mdl","Bobster's two feet rails","#",2,"","1303.797,-1303.797,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_512.mdl","Bobster's two feet rails","#",2,"","325.949,-325.949,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_1024.mdl","Bobster's two feet rails","#",2,"","651.899,651.898,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_2048.mdl","Bobster's two feet rails","#",2,"","1303.797,1303.797,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_512.mdl","Bobster's two feet rails","#",2,"","325.949,325.949,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_1024.mdl","Bobster's two feet rails","#",2,"","651.926,-651.874,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_2048.mdl","Bobster's two feet rails","#",2,"","1303.798,-1303.797,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_512.mdl","Bobster's two feet rails","#",2,"","325.949,-325.949,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_1024.mdl","Bobster's two feet rails","#",2,"","249.471,49.621,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_512.mdl","Bobster's two feet rails","#",2,"","124.735,24.812,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_1024.mdl","Bobster's two feet rails","#",2,"","249.471,-49.623,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_512.mdl","Bobster's two feet rails","#",2,"","124.736,-24.811,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_1024.mdl","Bobster's two feet rails","#",2,"","460.962,190.936,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_512.mdl","Bobster's two feet rails","#",2,"","230.481,95.468,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_1024.mdl","Bobster's two feet rails","#",2,"","460.963,-190.936,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_512.mdl","Bobster's two feet rails","#",2,"","230.481,-95.469,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_1024.mdl","Bobster's two feet rails","#",2,"","651.898,651.898,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_512.mdl","Bobster's two feet rails","#",2,"","325.949,325.95,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_1024.mdl","Bobster's two feet rails","#",2,"","651.898,-651.899,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_512.mdl","Bobster's two feet rails","#",2,"","325.949,-325.949,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_1024.mdl","Bobster's two feet rails","#",1,"","512,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_1024.mdl","Bobster's two feet rails","#",2,"","-512,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_128.mdl","Bobster's two feet rails","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_128.mdl","Bobster's two feet rails","#",2,"","-64,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_16.mdl","Bobster's two feet rails","#",1,"0,-32,1.5","8,0,3.017","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_16.mdl","Bobster's two feet rails","#",2,"0,32,1.5","-8,0,3.017","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_2048.mdl","Bobster's two feet rails","#",1,"","1024,0,3.017","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_2048.mdl","Bobster's two feet rails","#",2,"","-1024,0,3.017","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_256.mdl","Bobster's two feet rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_256.mdl","Bobster's two feet rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_32.mdl","Bobster's two feet rails","#",1,"0,-32,1.5","16,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_32.mdl","Bobster's two feet rails","#",2,"0,32,1.5","-16,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_4096.mdl","Bobster's two feet rails","#",1,"","2048,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_4096.mdl","Bobster's two feet rails","#",2,"","-2048,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_512.mdl","Bobster's two feet rails","#",1,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_512.mdl","Bobster's two feet rails","#",2,"","-256,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_64.mdl","Bobster's two feet rails","#",1,"","32,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_64.mdl","Bobster's two feet rails","#",2,"","-32,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_bank_left.mdl","Bobster's two feet rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_bank_left.mdl","Bobster's two feet rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_bank_right.mdl","Bobster's two feet rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_bank_right.mdl","Bobster's two feet rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_1024.mdl","Bobster's two feet rails","#",1,"","512,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_1024.mdl","Bobster's two feet rails","#",2,"","-512,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_128.mdl","Bobster's two feet rails","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_128.mdl","Bobster's two feet rails","#",2,"","-64,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_16.mdl","Bobster's two feet rails","#",1,"0,-32,1.5","8,0,3.017","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_16.mdl","Bobster's two feet rails","#",2,"0,32,1.5","-8,0,3.017","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_256.mdl","Bobster's two feet rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_256.mdl","Bobster's two feet rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_32.mdl","Bobster's two feet rails","#",1,"0,-32,1.5","16,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_32.mdl","Bobster's two feet rails","#",2,"0,32,1.5","-16,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_512.mdl","Bobster's two feet rails","#",1,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_512.mdl","Bobster's two feet rails","#",2,"","-256,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_64.mdl","Bobster's two feet rails","#",1,"","32,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_64.mdl","Bobster's two feet rails","#",2,"","-32,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl","Bobster's two feet rails","#",2,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl","Bobster's two feet rails","#",3,"","262.471,49.622,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl","Bobster's two feet rails","#",2,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl","Bobster's two feet rails","#",3,"","262.471,49.622,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl","Bobster's two feet rails","#",2,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl","Bobster's two feet rails","#",3,"","262.472,-49.622,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl","Bobster's two feet rails","#",2,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl","Bobster's two feet rails","#",3,"","262.472,-49.622,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/blocks/cube025x025x025.mdl","Develop PHX","x1",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/blocks/cube05x05x05.mdl","Develop PHX","x2",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/blocks/cube075x075x075.mdl","Develop PHX","x3",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/blocks/cube1x1x1.mdl","Develop PHX","x4",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height06/size_1/cube_6x6x6.mdl","Develop Sprops","x1",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height12/size_1/cube_12x12x12.mdl","Develop Sprops","x2",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/non_set/cube_18x18x18.mdl","Develop Sprops","x3",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height24/size_1/cube_24x24x24.mdl","Develop Sprops","x4",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height36/size_1/cube_36x36x36.mdl","Develop Sprops","x5",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height48/size_1/cube_48x48x48.mdl","Develop Sprops","x6",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/props_c17/furniturewashingmachine001a.mdl","Develop Test","#",1,"","-0.05,0.006,21.934","#@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_c17/furniturewashingmachine001a.mdl","Develop Test","#",2,"","-0.05,0.006,-21.922","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/225l.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/225l.mdl","G Scale Track Pack","#",2,"","-196.060471,-39.081982,1.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/225r.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/225r.mdl","G Scale Track Pack","#",2,"","-196.060471,39.081982,1.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/45l.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/45l.mdl","G Scale Track Pack","#",2,"","-362,-150,1.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/45r.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/45r.mdl","G Scale Track Pack","#",2,"","-362,150,1.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/90l.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/90l.mdl","G Scale Track Pack","#",2,"","-512,-512,1.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/90r.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/90r.mdl","G Scale Track Pack","#",2,"","-512,512,1.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_s.mdl","G Scale Track Pack","#",3,"","-196.060471,-39.081982,1.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_s.mdl","G Scale Track Pack","#",3,"","-392,-78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_s.mdl","G Scale Track Pack","#",4,"","-136,-78,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_s.mdl","G Scale Track Pack","#",3,"","-392,-78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_t.mdl","G Scale Track Pack","#",3,"","-196.060471,-39.081982,1.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_t.mdl","G Scale Track Pack","#",3,"","-392,-78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_t.mdl","G Scale Track Pack","#",4,"","-136,-78,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_t.mdl","G Scale Track Pack","#",3,"","-392,-78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0032.mdl","G Scale Track Pack","#",1,"","32,0,2.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0032.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0064.mdl","G Scale Track Pack","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0064.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0128.mdl","G Scale Track Pack","#",1,"","128,0,5.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0128.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0256.mdl","G Scale Track Pack","#",1,"","256,0,9.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0256.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0512.mdl","G Scale Track Pack","#",1,"","512,0,17.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0512.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r1024.mdl","G Scale Track Pack","#",1,"","1024,0,33.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r1024.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_s.mdl","G Scale Track Pack","#",3,"","-196.060471,39.081982,1.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_s.mdl","G Scale Track Pack","#",3,"","-392,78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_s.mdl","G Scale Track Pack","#",4,"","-136,78,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_s.mdl","G Scale Track Pack","#",3,"","-392,78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_t.mdl","G Scale Track Pack","#",3,"","-196.060471,39.081982,1.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_t.mdl","G Scale Track Pack","#",3,"","-392,78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_t.mdl","G Scale Track Pack","#",4,"","-136,78,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_t.mdl","G Scale Track Pack","#",3,"","-392,78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0008.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0008.mdl","G Scale Track Pack","#",2,"","-8,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0016.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0016.mdl","G Scale Track Pack","#",2,"","-16,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0032.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0032.mdl","G Scale Track Pack","#",2,"","-32,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0032.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0032.mdl","G Scale Track Pack","#",2,"","-32,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0064.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0064.mdl","G Scale Track Pack","#",2,"","-64,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0064.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0064.mdl","G Scale Track Pack","#",2,"","-64,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0128.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0128.mdl","G Scale Track Pack","#",2,"","-128,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0128.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0128.mdl","G Scale Track Pack","#",2,"","-128,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0256.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0256.mdl","G Scale Track Pack","#",2,"","-256,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0256.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0256.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0512.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0512.mdl","G Scale Track Pack","#",2,"","-512,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0512.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0512.mdl","G Scale Track Pack","#",2,"","-512,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s1024.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s1024.mdl","G Scale Track Pack","#",2,"","-1024,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s1024.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s1024.mdl","G Scale Track Pack","#",2,"","-1024,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/s225l.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/s225l.mdl","G Scale Track Pack","#",2,"","-392,-78.125595,1.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/s225r.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/s225r.mdl","G Scale Track Pack","#",2,"","-392,78.125595,1.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_s_1.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_s_1.mdl","G Scale Track Pack","#",2,"","-32,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_s_2.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_s_2.mdl","G Scale Track Pack","#",2,"","-32,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_t.mdl","G Scale Track Pack","#",2,"","-32,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_225.mdl","Magnum's Rails","#",1,"","-0.01,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_225.mdl","Magnum's Rails","#",2,"","-587.955,-117.702,3.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_45.mdl","Magnum's Rails","#",1,"","-0.012,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_45.mdl","Magnum's Rails","#",2,"","-1087.089,-451.055,3.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_90.mdl","Magnum's Rails","#",1,"","1086.58,450.079,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_90.mdl","Magnum's Rails","#",2,"","-449.475,-1085.92,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0032.mdl","Magnum's Rails","#",1,"","16,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0032.mdl","Magnum's Rails","#",2,"","-16,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0064.mdl","Magnum's Rails","#",1,"","32,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0064.mdl","Magnum's Rails","#",2,"","-32,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0128.mdl","Magnum's Rails","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0128.mdl","Magnum's Rails","#",2,"","-64,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0256.mdl","Magnum's Rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0256.mdl","Magnum's Rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0512.mdl","Magnum's Rails","#",1,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0512.mdl","Magnum's Rails","#",2,"","-256,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_1024.mdl","Magnum's Rails","#",1,"","512,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_1024.mdl","Magnum's Rails","#",2,"","-512,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_2048.mdl","Magnum's Rails","#",1,"","1024,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_2048.mdl","Magnum's Rails","#",2,"","-1024,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_cross_128.mdl","Mr.Train's G-Gauge","#",1,"","64,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_cross_128.mdl","Mr.Train's G-Gauge","#",2,"","0,64,1.516","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_cross_128.mdl","Mr.Train's G-Gauge","#",3,"","-64,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_cross_128.mdl","Mr.Train's G-Gauge","#",4,"","0,-64,1.516","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_1.mdl","Mr.Train's G-Gauge","#",1,"","16,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_1.mdl","Mr.Train's G-Gauge","#",2,"","-16,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_2.mdl","Mr.Train's G-Gauge","#",1,"","16,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_2.mdl","Mr.Train's G-Gauge","#",2,"","-16,0,4.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_3.mdl","Mr.Train's G-Gauge","#",1,"","16,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_3.mdl","Mr.Train's G-Gauge","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_s_left_22_5.mdl","Mr.Train's G-Gauge","#",1,"","256,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_s_left_22_5.mdl","Mr.Train's G-Gauge","#",2,"","-256,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_s_right_22_5.mdl","Mr.Train's G-Gauge","#",1,"","256,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_s_right_22_5.mdl","Mr.Train's G-Gauge","#",2,"","-256,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_1024.mdl","Mr.Train's G-Gauge","#",1,"","512,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_1024.mdl","Mr.Train's G-Gauge","#",2,"","-512,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_128.mdl","Mr.Train's G-Gauge","#",1,"","64,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_128.mdl","Mr.Train's G-Gauge","#",2,"","-64,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_2048.mdl","Mr.Train's G-Gauge","#",1,"","1024,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_2048.mdl","Mr.Train's G-Gauge","#",2,"","-1024,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_256.mdl","Mr.Train's G-Gauge","#",1,"","128,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_256.mdl","Mr.Train's G-Gauge","#",2,"","-128,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_32.mdl","Mr.Train's G-Gauge","#",1,"","16,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_32.mdl","Mr.Train's G-Gauge","#",2,"","-16,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_512.mdl","Mr.Train's G-Gauge","#",1,"","256,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_512.mdl","Mr.Train's G-Gauge","#",2,"","-256,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_64.mdl","Mr.Train's G-Gauge","#",1,"","32,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_64.mdl","Mr.Train's G-Gauge","#",2,"","-32,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl","Mr.Train's G-Gauge","#",1,"","256,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl","Mr.Train's G-Gauge","#",2,"","0,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl","Mr.Train's G-Gauge","#",3,"","-256,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl","Mr.Train's G-Gauge","#",1,"","256,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl","Mr.Train's G-Gauge","#",2,"","0,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl","Mr.Train's G-Gauge","#",3,"","-256,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl","Mr.Train's G-Gauge","#",1,"","256,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl","Mr.Train's G-Gauge","#",2,"","0,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl","Mr.Train's G-Gauge","#",3,"","-256,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl","Mr.Train's G-Gauge","#",1,"","256,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl","Mr.Train's G-Gauge","#",2,"","0,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl","Mr.Train's G-Gauge","#",3,"","-256,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl","Mr.Train's G-Gauge","#",1,"","195.938,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl","Mr.Train's G-Gauge","#",2,"","195.938,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl","Mr.Train's G-Gauge","#",3,"","-195.937,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl","Mr.Train's G-Gauge","#",4,"","-195.937,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl","Mr.Train's G-Gauge","#",1,"","195.938,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl","Mr.Train's G-Gauge","#",2,"","195.938,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl","Mr.Train's G-Gauge","#",3,"","-195.937,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl","Mr.Train's G-Gauge","#",4,"","-195.937,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl","Mr.Train's G-Gauge","#",1,"","195.938,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl","Mr.Train's G-Gauge","#",2,"","195.938,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl","Mr.Train's G-Gauge","#",3,"","-195.937,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl","Mr.Train's G-Gauge","#",4,"","-195.937,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl","Mr.Train's G-Gauge","#",1,"","195.938,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl","Mr.Train's G-Gauge","#",2,"","195.938,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl","Mr.Train's G-Gauge","#",3,"","-195.937,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl","Mr.Train's G-Gauge","#",4,"","-195.937,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_22_5.mdl","Mr.Train's G-Gauge","#",1,"","263.75,248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_22_5.mdl","Mr.Train's G-Gauge","#",2,"","67.855,209.265,1.516","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_45.mdl","Mr.Train's G-Gauge","#",1,"","263.75,248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_45.mdl","Mr.Train's G-Gauge","#",2,"","-98.326,98.323,1.516","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_90.mdl","Mr.Train's G-Gauge","#",1,"","263.75,248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_90.mdl","Mr.Train's G-Gauge","#",2,"","-248.25,-263.75,1.516","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_22_5.mdl","Mr.Train's G-Gauge","#",1,"","263.75,-248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_22_5.mdl","Mr.Train's G-Gauge","#",2,"","67.872,-209.299,1.516","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_45.mdl","Mr.Train's G-Gauge","#",1,"","263.75,-248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_45.mdl","Mr.Train's G-Gauge","#",2,"","-98.302,-98.302,1.516","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_90.mdl","Mr.Train's G-Gauge","#",1,"","263.75,-248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_90.mdl","Mr.Train's G-Gauge","#",2,"","-248.25,263.75,1.516","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_1024.mdl","Mr.Train's M-Gauge","#",1,"","512,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_1024.mdl","Mr.Train's M-Gauge","#",2,"","-512,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128_cross.mdl","Mr.Train's M-Gauge","#",1,"","64,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128_cross.mdl","Mr.Train's M-Gauge","#",2,"","0,64,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128_cross.mdl","Mr.Train's M-Gauge","#",3,"","-64,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128_cross.mdl","Mr.Train's M-Gauge","#",4,"","0,-64,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128.mdl","Mr.Train's M-Gauge","#",1,"","64,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128.mdl","Mr.Train's M-Gauge","#",2,"","-64,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_2048.mdl","Mr.Train's M-Gauge","#",1,"","1024,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_2048.mdl","Mr.Train's M-Gauge","#",2,"","-1024,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_256.mdl","Mr.Train's M-Gauge","#",1,"","128,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_256.mdl","Mr.Train's M-Gauge","#",2,"","-128,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_32.mdl","Mr.Train's M-Gauge","#",1,"","16,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_32.mdl","Mr.Train's M-Gauge","#",2,"","-16,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_4096.mdl","Mr.Train's M-Gauge","#",1,"","2048,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_4096.mdl","Mr.Train's M-Gauge","#",2,"","-2048,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_512.mdl","Mr.Train's M-Gauge","#",1,"","256,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_512.mdl","Mr.Train's M-Gauge","#",2,"","-256,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_64.mdl","Mr.Train's M-Gauge","#",1,"","32,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_64.mdl","Mr.Train's M-Gauge","#",2,"","-32,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_1024_45.mdl","Mr.Train's M-Gauge","#",1,"","518.5,505.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_1024_45.mdl","Mr.Train's M-Gauge","#",2,"","-205.608,205.607,0.014","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_1024.mdl","Mr.Train's M-Gauge","#",1,"","518.5,505.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_1024.mdl","Mr.Train's M-Gauge","#",2,"","-505.5,-518.5,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_256.mdl","Mr.Train's M-Gauge","#",1,"","134.497,121.499,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_256.mdl","Mr.Train's M-Gauge","#",2,"","-121.5,-134.5,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_512_45.mdl","Mr.Train's M-Gauge","#",1,"","262.5,-249.497,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_512_45.mdl","Mr.Train's M-Gauge","#",2,"","-99.51,-99.507,0.015","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_512.mdl","Mr.Train's M-Gauge","#",1,"","262.5,249.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_512.mdl","Mr.Train's M-Gauge","#",2,"","-249.5,-262.5,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_768_45.mdl","Mr.Train's M-Gauge","#",1,"","383.625,370.625,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_768_45.mdl","Mr.Train's M-Gauge","#",2,"","-149.73,149.729,0.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_768.mdl","Mr.Train's M-Gauge","#",1,"","383.625,370.625,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_768.mdl","Mr.Train's M-Gauge","#",2,"","-370.625,-383.625,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_1024_45.mdl","Mr.Train's M-Gauge","#",1,"","518.5,-505.498,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_1024_45.mdl","Mr.Train's M-Gauge","#",2,"","-205.621,-205.618,0.014","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_1024.mdl","Mr.Train's M-Gauge","#",1,"","518.5,-505.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_1024.mdl","Mr.Train's M-Gauge","#",2,"","-505.5,518.5,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_256.mdl","Mr.Train's M-Gauge","#",1,"","134.5,-121.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_256.mdl","Mr.Train's M-Gauge","#",2,"","-121.5,134.5,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_512.mdl","Mr.Train's M-Gauge","#",1,"","262.5,-249.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_512.mdl","Mr.Train's M-Gauge","#",2,"","-249.5,262.5,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_768_45.mdl","Mr.Train's M-Gauge","#",1,"","383.625,-370.625,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_768_45.mdl","Mr.Train's M-Gauge","#",2,"","-149.758,-149.751,0.012","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_768.mdl","Mr.Train's M-Gauge","#",1,"","383.625,-370.625,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_768.mdl","Mr.Train's M-Gauge","#",2,"","-370.625,383.625,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl","Mr.Train's M-Gauge","#",1,"","75,-75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl","Mr.Train's M-Gauge","#",2,"","203,75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl","Mr.Train's M-Gauge","#",3,"","-75,75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl","Mr.Train's M-Gauge","#",4,"","-203,-75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl","Mr.Train's M-Gauge","#",1,"","203,-75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl","Mr.Train's M-Gauge","#",2,"","75,75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl","Mr.Train's M-Gauge","#",3,"","-203,75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl","Mr.Train's M-Gauge","#",4,"","-75,-75,-2.485","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover.mdl","Mr.Train's M-Gauge","#",1,"","203,-75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover.mdl","Mr.Train's M-Gauge","#",2,"","203,75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover.mdl","Mr.Train's M-Gauge","#",3,"","-203,75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover.mdl","Mr.Train's M-Gauge","#",4,"","-203,-75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_lefthand.mdl","Mr.Train's M-Gauge","#",1,"","0,-10,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_lefthand.mdl","Mr.Train's M-Gauge","#",2,"","-256,-10,0.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_lefthand.mdl","Mr.Train's M-Gauge","#",3,"","-384,-160,0.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_righthand.mdl","Mr.Train's M-Gauge","#",1,"","0,10,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_righthand.mdl","Mr.Train's M-Gauge","#",2,"","-384,160,0.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_righthand.mdl","Mr.Train's M-Gauge","#",3,"","-256,10,0.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_1024.mdl","PHX Metal","#",1,"","511.754761,-4.7e-005,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_1024.mdl","PHX Metal","#",2,"","-512.240601,-0.050828,9.215","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_128.mdl","PHX Metal","#",1,"","63.75531,0.001953,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_128.mdl","PHX Metal","#",2,"","-64.240356,-0.005125,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_2048.mdl","PHX Metal","#",1,"","1023.755066,0.000642,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_2048.mdl","PHX Metal","#",2,"","-1024.242676,-0.109433,9.215","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_256.mdl","PHX Metal","#",1,"","127.754944,0.001953,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_256.mdl","PHX Metal","#",2,"","-128.245117,-0.012207,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_32.mdl","PHX Metal","#",1,"-0.327,-61.529,8.714","15.755127,0.001953,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_32.mdl","PHX Metal","#",2,"-0.327,61.529,8.714","-16.239746,0.000244,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_4096.mdl","PHX Metal","#",1,"","2047.755249,0.001923,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_4096.mdl","PHX Metal","#",2,"","-2048.240479,-0.225247,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_512.mdl","PHX Metal","#",1,"","255.754791,0.001465,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_512.mdl","PHX Metal","#",2,"","-256.242401,-0.026855,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_64.mdl","PHX Metal","#",1,"","31.999878,0.00196,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_64.mdl","PHX Metal","#",2,"","-32.000275,-0.001469,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam1.mdl","PHX Monorail Beam","#",1,"","22.411,0.001,5.002","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam1.mdl","PHX Monorail Beam","#",2,"","-22.413,0.001,5.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam2.mdl","PHX Monorail Beam","#",1,"","45.298,0.001,5.002","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam2.mdl","PHX Monorail Beam","#",2,"","-46.968,0.001,5.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam3.mdl","PHX Monorail Beam","#",1,"","93.069,0,5.002","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam3.mdl","PHX Monorail Beam","#",2,"","-94.079,0.002,5.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam4.mdl","PHX Monorail Beam","#",1,"","175.507,0.001,5.002","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam4.mdl","PHX Monorail Beam","#",2,"","-201.413,0.001,5.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail3.mdl","PHX Monorail","Straight Long",1,"","0.239949,-934.135559,13.879116","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail3.mdl","PHX Monorail","Straight Long",2,"","0.239705,930.885315,13.87915","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail2.mdl","PHX Monorail","Straight Middle",1,"","0.239726,-462.635468,13.879296","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail2.mdl","PHX Monorail","Straight Middle",2,"","0.239914,464.885315,13.879209","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail1.mdl","PHX Monorail","Straight Short",1,"","229.885559,0.23999,13.87915","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail1.mdl","PHX Monorail","Straight Short",2,"","-228.885254,0.239726,13.87915","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail4.mdl","PHX Monorail","Straight Very Long",1,"","0.239664,-1867.13562,13.879143","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail4.mdl","PHX Monorail","Straight Very Long",2,"","0.239664,1872.885376,13.87915","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail_curve2.mdl","PHX Monorail","Turn 45",1,"","-0.030396,-605.638428,13.881409","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail_curve2.mdl","PHX Monorail","Turn 45",2,"","-428.018524,-428.362335,13.881714","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail_curve.mdl","PHX Monorail","Turn 90",1,"","-0.030518,-605.638184,13.880554","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail_curve.mdl","PHX Monorail","Turn 90",2,"","-605.380859,-0.307583,13.881714","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_16x.mdl","PHX Regular","16x",1,"","2029.797363,0.000133,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_16x.mdl","PHX Regular","16x",2,"","-370.036865,-2e-060,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_1x.mdl","PHX Regular","1x",1,"","79.929352,0,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_1x.mdl","PHX Regular","1x",2,"","-70.05806,6e-006,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_225_down.mdl","PHX Regular","225 Down",1,"","-75.016,-0.006,64.57","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_225_down.mdl","PHX Regular","225 Down",2,"","4.096,-0.007,48.791","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_225_up.mdl","PHX Regular","225 Up",1,"","-75.016,0.007,11.212","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_225_up.mdl","PHX Regular","225 Up",2,"","4.196,0,27.054","@-22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_2x.mdl","PHX Regular","2x",1,"","229.919388,0,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_2x.mdl","PHX Regular","2x",2,"","-70.05806,-6e-006,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_45_down.mdl","PHX Regular","45 Down",1,"-75.016,-0.002,64.568","-75.013,-0.002,64.568","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_45_down.mdl","PHX Regular","45 Down",2,"","71.037,-0.018,3.951","@45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_45_up.mdl","PHX Regular","45 Up",1,"","-75.013,0.007,11.218","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_45_up.mdl","PHX Regular","45 Up",2,"","71.173,0.003,71.909","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_4x.mdl","PHX Regular","4x",1,"","229.919388,3.1e-005,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_4x.mdl","PHX Regular","4x",2,"","-370.037079,-3.2e-005,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_8x.mdl","PHX Regular","8x",1,"","829.878418,3.8e-005,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_8x.mdl","PHX Regular","8x",2,"","-370.036865,-2.5e-005,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_x.mdl","PHX Regular","Cross 45",1,"","250.473389,49.613159,11.214844","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_x.mdl","PHX Regular","Cross 45",2,"","-349.483032,49.613129,11.214844","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_x.mdl","PHX Regular","Cross 45",3,"","162.610229,-162.4935,11.214844","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_x.mdl","PHX Regular","Cross 45",4,"","-261.623718,261.740234,11.214844","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_crossing.mdl","PHX Regular","Cross 90",1,"","74.973145,1e-005,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_crossing.mdl","PHX Regular","Cross 90",2,"","-75.013794,-7e-006,12.548828","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_crossing.mdl","PHX Regular","Cross 90",3,"","-0.022434,74.999878,12.548828","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_crossing.mdl","PHX Regular","Cross 90",4,"","-0.022434,-74.987061,12.548828","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_pass.mdl","PHX Regular","Cross Road",1,"","229.920044,2e-005,11.214844","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_pass.mdl","PHX Regular","Cross Road",2,"","-370.036377,2e-006,11.214844","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_single.mdl","PHX Regular","Single",1,"-0.327,-61.529,8.714","15.451782,1.5e-005,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_single.mdl","PHX Regular","Single",2,"-0.327,61.529,8.714","-16.094971,-1e-006,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch2.mdl","PHX Regular","Switch Left [X]",1,"","829.880005,-0.001465,11.218994","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch2.mdl","PHX Regular","Switch Left [X]",2,"","-370.037262,-0.000456,11.218994","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch2.mdl","PHX Regular","Switch Left [X]",3,"","-158.311356,-338.111572,11.218994","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch.mdl","PHX Regular","Switch Right",1,"","829.8797,0.001587,11.218994","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch.mdl","PHX Regular","Switch Right",2,"","-370.037231,0.000256,11.218994","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch.mdl","PHX Regular","Switch Right",3,"","-158.311737,338.107941,11.218994","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_turn45.mdl","PHX Regular","Turn45",1,"","733.000061,-265.363037,11.218994","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_turn45.mdl","PHX Regular","Turn45",2,"","-83.26461,72.744667,11.218994","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_turn90.mdl","PHX Regular","Turn90",1,"","733.000061,-265.363037,11.218994","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_turn90.mdl","PHX Regular","Turn90",2,"","-421.363312,889.005493,11.218994","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/big_ramp.mdl","PHX Road","#",1,"","-569.177,-7.199953,-3.075","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/big_ramp.mdl","PHX Road","#",2,"","625.022,-7.199953,472.427","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_curve.mdl","PHX Road","#",1,"","162.813,379.277,1.879","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_curve.mdl","PHX Road","#",2,"","-363.22,-146.757,1.879","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_long.mdl","PHX Road","#",1,"","0,1198.773,1.765","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_long.mdl","PHX Road","#",2,"","0,-1198.773,1.765","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_medium.mdl","PHX Road","#",1,"","0,599.386,1.765","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_medium.mdl","PHX Road","#",2,"","0,-599.386,1.765","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_short.mdl","PHX Road","#",1,"","0,299.693,1.765","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_short.mdl","PHX Road","#",2,"","0,-299.693,1.765","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/small_ramp.mdl","PHX Road","#",1,"","-284.589,-3.599976,-1.672","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/small_ramp.mdl","PHX Road","#",2,"","312.608,-3.599976,236.11","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle180.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle180.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle360.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle360.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle90.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle90.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve180x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.667,47.543","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve180x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve180x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.668,94.993","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve180x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve90x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve90x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve90x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve90x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_dome180.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_dome360.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_dome90.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle180.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle180.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle360.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle360.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle90.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle90.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_dome180.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_dome360.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_dome90.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve180.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve180.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve180x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.081","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve180x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve2x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve2x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve360.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve360.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle180x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.667,47.543","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle180x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle180x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.668,94.993","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle180x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle90x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle90x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle90x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle90x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle180.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle180.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle360.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle360.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle90.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle90.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve180x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.667,47.543","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve180x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve180x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.668,94.993","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve180x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve90x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve90x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve90x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve90x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_dome180.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_dome360.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_dome90.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle180.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle180.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle360.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle360.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle90.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle90.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve180x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve180x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve180x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.081","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve180x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve90x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve90x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve90x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve90x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_dome180.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_dome360.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_dome90.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle180x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.667,47.543","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle180x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle180x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.668,94.993","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle180x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle90x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle90x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle90x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle90x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2b.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2c.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2d.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4c.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4c.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4d.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4d.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1a.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1a.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1b.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1b.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1c.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1c.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1d.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1d.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole1x1.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole1x1.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole1x2.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole1x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole2x2.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole2x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole3.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole3.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4c.mdl","PHX Tubes Plastic","#",1,"","47.45,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4c.mdl","PHX Tubes Plastic","#",2,"","47.45,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4d.mdl","PHX Tubes Plastic","#",1,"","47.45,47.45,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4d.mdl","PHX Tubes Plastic","#",2,"","47.45,47.45,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2a.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2e.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2x45.mdl","PHX Tubes Plastic","#",1,"0,-47.45,0","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2x45.mdl","PHX Tubes Plastic","#",2,"-33.552,-33.552,0","0,0,0","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1b.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1c.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1d.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3b.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3c.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3d.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4c.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4d.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5b.mdl","PHX Tubes Plastic","#",1,"","0,0,237.25","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5c.mdl","PHX Tubes Plastic","#",1,"","0,0,237.25","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5d.mdl","PHX Tubes Plastic","#",1,"","0,0,237.25","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5.mdl","PHX Tubes Plastic","#",1,"","0,0,237.25","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6b.mdl","PHX Tubes Plastic","#",1,"","0,0,284.7","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6c.mdl","PHX Tubes Plastic","#",1,"","0,0,284.7","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6d.mdl","PHX Tubes Plastic","#",1,"","0,0,284.7","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6.mdl","PHX Tubes Plastic","#",1,"","0,0,284.7","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8b.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8c.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8d.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x+.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x+.mdl","PHX Tubes Plastic","#",2,"","0,-47.45,0","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x+.mdl","PHX Tubes Plastic","#",3,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x+.mdl","PHX Tubes Plastic","#",4,"","0,47.45,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025b.mdl","PHX Tubes Plastic","#",1,"","0,0,5.93125","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025b.mdl","PHX Tubes Plastic","#",2,"","0,0,-5.93125","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025c.mdl","PHX Tubes Plastic","#",1,"","0,0,5.93125","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025c.mdl","PHX Tubes Plastic","#",2,"","0,0,-5.93125","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025d.mdl","PHX Tubes Plastic","#",1,"","0,0,5.93125","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025d.mdl","PHX Tubes Plastic","#",2,"","0,0,-5.93125","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025.mdl","PHX Tubes Plastic","#",1,"","0,0,5.93125","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025.mdl","PHX Tubes Plastic","#",2,"","0,0,-5.93125","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05b.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05b.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05c.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05c.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05d.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05d.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x16d.mdl","PHX Tubes Plastic","#",1,"","0,0,711.75","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x16d.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1b.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1b.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1c.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1c.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1d.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1d.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2b.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2c.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2d.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4c.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4c.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4d.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4d.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8b.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8b.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8c.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8c.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8d.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8d.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xta.mdl","PHX Tubes Plastic","#",1,"","0,0,-23.725","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xta.mdl","PHX Tubes Plastic","#",2,"","0,47.45,23.725","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xta.mdl","PHX Tubes Plastic","#",3,"","0,-47.45,23.725","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xtb.mdl","PHX Tubes Plastic","#",1,"","0,-23.725,0","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xtb.mdl","PHX Tubes Plastic","#",2,"","0,23.725,-47.45","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xt.mdl","PHX Tubes Plastic","#",1,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xt.mdl","PHX Tubes Plastic","#",2,"","0,-47.45,0","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xt.mdl","PHX Tubes Plastic","#",3,"","0,47.45,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025b.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025c.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025d.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05b.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05b.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05c.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05c.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05d.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05d.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16b.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16b.mdl","PHX Tubes Plastic","#",2,"","0,0,-379.6","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16c.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16c.mdl","PHX Tubes Plastic","#",2,"","0,0,-379.6","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16d.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16d.mdl","PHX Tubes Plastic","#",2,"","0,0,-379.6","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16.mdl","PHX Tubes Plastic","#",2,"","0,0,-379.6","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1b.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1b.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1c.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1c.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1d.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1d.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1to2x2.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1to2x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2b.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2c.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2d.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3b.mdl","PHX Tubes Plastic","#",1,"","0,0,71.175","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3b.mdl","PHX Tubes Plastic","#",2,"","0,0,-71.175","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3c.mdl","PHX Tubes Plastic","#",1,"","0,0,71.175","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3c.mdl","PHX Tubes Plastic","#",2,"","0,0,-71.175","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3d.mdl","PHX Tubes Plastic","#",1,"","0,0,71.175","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3d.mdl","PHX Tubes Plastic","#",2,"","0,0,-71.175","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3.mdl","PHX Tubes Plastic","#",1,"","0,0,71.175","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3.mdl","PHX Tubes Plastic","#",2,"","0,0,-71.175","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4c.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4c.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4d.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4d.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5b.mdl","PHX Tubes Plastic","#",1,"","0,0,118.625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5b.mdl","PHX Tubes Plastic","#",2,"","0,0,-118.625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5c.mdl","PHX Tubes Plastic","#",1,"","0,0,118.625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5c.mdl","PHX Tubes Plastic","#",2,"","0,0,-118.625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5d.mdl","PHX Tubes Plastic","#",1,"","0,0,118.625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5d.mdl","PHX Tubes Plastic","#",2,"","0,0,-118.625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5.mdl","PHX Tubes Plastic","#",1,"","0,0,118.625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5.mdl","PHX Tubes Plastic","#",2,"","0,0,-118.625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6b.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6b.mdl","PHX Tubes Plastic","#",2,"","0,0,-142.35","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6c.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6c.mdl","PHX Tubes Plastic","#",2,"","0,0,-142.35","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6d.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6d.mdl","PHX Tubes Plastic","#",2,"","0,0,-142.35","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6.mdl","PHX Tubes Plastic","#",2,"","0,0,-142.35","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8b.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8b.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8c.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8c.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8d.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8d.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x1x90.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x1x90.mdl","PHX Tubes Plastic","#",2,"","0,23.725,23.725","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90a.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90a.mdl","PHX Tubes Plastic","#",2,"","0,47.45,47.45","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90b.mdl","PHX Tubes Plastic","#",1,"","-47.45,0,47.45","0,-180,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,-90,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90.mdl","PHX Tubes Plastic","#",2,"","0,47.45,47.45","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90.mdl","PHX Tubes Plastic","#",2,"","0,47.45,47.45","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90outer.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90outer.mdl","PHX Tubes Plastic","#",2,"","0,47.45,47.45","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90square.mdl","PHX Tubes Plastic","#",1,"","0,0,-47.451","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90square.mdl","PHX Tubes Plastic","#",2,"","0,47.417,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend4x4x90.mdl","PHX Tubes Plastic","#",1,"","0,94.9,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend4x4x90.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendinsidesquare2.mdl","PHX Tubes Plastic","#",1,"","0,0,23.725","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendinsidesquare2.mdl","PHX Tubes Plastic","#",2,"","0,-47.45,-23.724","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendinsidesquare.mdl","PHX Tubes Plastic","#",1,"","0,0,23.725","@-90,90,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendinsidesquare.mdl","PHX Tubes Plastic","#",2,"","-47.45,0,-23.724","0,-180,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendoutsidesquare2.mdl","PHX Tubes Plastic","#",1,"0,0,47.45","0,0,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendoutsidesquare2.mdl","PHX Tubes Plastic","#",2,"0,-47.45,0","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendoutsidesquare.mdl","PHX Tubes Plastic","#",1,"0,0,47.45","0,0,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendoutsidesquare.mdl","PHX Tubes Plastic","#",2,"0,-47.45,0","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_90deg.mdl","Portal Tubes","#",1,"","64.041,0.049,0.131","",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_90deg.mdl","Portal Tubes","#",2,"","0.002,0.04,-63.904","@90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_broken.mdl","Portal Tubes","#",1,"","0.009,0,63.896","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_broken.mdl","Portal Tubes","#",2,"","0.008,0.004,-63.897","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_straight.mdl","Portal Tubes","#",1,"","0.009,0,63.896","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_straight.mdl","Portal Tubes","#",2,"","0.008,0.004,-63.897","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_tjoint.mdl","Portal Tubes","#",1,"","-0.014,0.13,96.075","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_tjoint.mdl","Portal Tubes","#",2,"","-0.004,-95.763,0.016","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_tjoint.mdl","Portal Tubes","#",3,"","0,96,0.083","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/big_jetty.mdl","Random Bridges","#",1,"","0,116.668,57.94","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/big_jetty.mdl","Random Bridges","#",2,"","0,-11.914,57.939","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_128.mdl","Random Bridges","#",1,"","0,67.452,14.326","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_128.mdl","Random Bridges","#",2,"","0,-63.954,14.325","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_256.mdl","Random Bridges","#",1,"","0,131.491,14.199","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_256.mdl","Random Bridges","#",2,"","0,-139.388,14.198","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_384.mdl","Random Bridges","#",1,"","0,199.517,14.302","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_384.mdl","Random Bridges","#",2,"","0,-196.069,14.215","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_128.mdl","Random Bridges","#",1,"","0,67.244,14.323","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_128.mdl","Random Bridges","#",2,"","0,-63.033,14.337","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_256.mdl","Random Bridges","#",1,"","0,131.502,14.339","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_256.mdl","Random Bridges","#",2,"","0,-127.085,14.319","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_384.mdl","Random Bridges","#",1,"","0,199.517,14.332","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_384.mdl","Random Bridges","#",2,"","0,-196.012,14.318","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_wasteland/bridge_low_res.mdl","Random Bridges","#",1,"","5056,219.145,992.765","",""}) - asmlib.InsertRecord("PIECES", {"models/props_wasteland/bridge_low_res.mdl","Random Bridges","#",2,"","-576,219.145,992.765","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge01b.mdl","Random Bridges","#",1,"","910.69,-13.63,403.46","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge01b.mdl","Random Bridges","#",2,"","-913.31,-13.63,403.46","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge01.mdl","Random Bridges","#",1,"","455.345,-6.815,201.73","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge01.mdl","Random Bridges","#",2,"","-456.655,-6.815,201.73","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge02.mdl","Random Bridges","#",1,"","0,512.155,288","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge02.mdl","Random Bridges","#",2,"","0,-512.212,288","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03a.mdl","Random Bridges","#",1,"","320.89,0,187.742","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03a.mdl","Random Bridges","#",2,"","-320.059,0,187.742","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03b.mdl","Random Bridges","#",1,"","320.89,0,187.741","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03b.mdl","Random Bridges","#",2,"","-320.059,0,187.741","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03c.mdl","Random Bridges","#",1,"","1026.848,0,600.773","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03c.mdl","Random Bridges","#",2,"","-1024.189,0,600.773","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_combine/combine_bridge_b.mdl","Random Bridges","#",1,"","-330.895,0.039,124.673","",""}) - asmlib.InsertRecord("PIECES", {"models/props_combine/combine_bridge_b.mdl","Random Bridges","#",2,"","-522.855,0.251,124.671","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_combine/combine_bridge.mdl","Random Bridges","#",1,"","-8.401,0,124.685","",""}) - asmlib.InsertRecord("PIECES", {"models/props_combine/combine_bridge.mdl","Random Bridges","#",2,"","-320,0,124.685","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/bridge.mdl","Random Bridges","Karkar",1,"","62.07,-343.696,208.295","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/bridge.mdl","Random Bridges","Karkar",2,"","62.07,334.44,208.295","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/askari/bridge01_stlve.mdl","Random Bridges","Stlve",1,"","192,0,189.531","",""}) - asmlib.InsertRecord("PIECES", {"models/askari/bridge01_stlve.mdl","Random Bridges","Stlve",2,"","-192,0,189.531","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_2fort/bridgesupports001.mdl","Random Bridges","TF Support",1,"","448,0,-14.268","",""}) - asmlib.InsertRecord("PIECES", {"models/props_2fort/bridgesupports001.mdl","Random Bridges","TF Support",2,"","-448,0,-15.558","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/tresslebridge.mdl","Random Bridges","#",1,"","374.246,-1.2345,24.849","",""}) - asmlib.InsertRecord("PIECES", {"models/props/tresslebridge.mdl","Random Bridges","#",2,"","-345.367,-1.2345,24.85","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge01.mdl","Random Bridges","#",1,"","0,68.767,14.898","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge01.mdl","Random Bridges","#",2,"","0,-70.316,14.898","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge02.mdl","Random Bridges","#",1,"","5.236,-13.396,11.976","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge02.mdl","Random Bridges","#",2,"","5.236,479.851,11.976","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge03.mdl","Random Bridges","#",1,"","1.436,-12.169,11.136","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge03.mdl","Random Bridges","#",2,"","1.436,480.851,11.136","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge04.mdl","Random Bridges","#",1,"","-2.253,-11.847,10.696","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge04.mdl","Random Bridges","#",2,"","-2.253,480.851,10.696","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/wooden_bridge_helly_broken_bstk.mdl","Random Bridges","#",1,"","-318.524,0,26.757","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/wooden_bridge_helly_broken_bstk.mdl","Random Bridges","#",2,"","244.523,0,3.55","",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/wooden_bridge_helly.mdl","Random Bridges","#",1,"","0,318.601,26.783","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/wooden_bridge_helly.mdl","Random Bridges","#",2,"","0,-240.814,2.85","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/90crossing.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/90crossing.mdl","Ron's 2ft track pack","#",2,"","0,64,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/90crossing.mdl","Ron's 2ft track pack","#",3,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/90crossing.mdl","Ron's 2ft track pack","#",4,"","0,-64,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_32.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_32.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_64.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_64.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_end.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_end.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_32.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_32.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_64.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_64.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_end.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_end.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_pillar.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_pillar.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer_2.mdl","Ron's 2ft track pack","Buffer SH2",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer_2.mdl","Ron's 2ft track pack","Buffer SH2",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer_3.mdl","Ron's 2ft track pack","Buffer SH3",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer_3.mdl","Ron's 2ft track pack","Buffer SH3",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_1.mdl","Ron's 2ft track pack","#",2,"","-391.846,-77.978,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_2.mdl","Ron's 2ft track pack","#",2,"","-439.352,-87.36,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_3.mdl","Ron's 2ft track pack","#",2,"","-486.814,-96.707,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_4.mdl","Ron's 2ft track pack","#",2,"","-532.889,-105.687,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_1.mdl","Ron's 2ft track pack","#",2,"","-391.846,77.978,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_2.mdl","Ron's 2ft track pack","#",2,"","-439.352,87.36,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_3.mdl","Ron's 2ft track pack","#",2,"","-486.814,96.707,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_4.mdl","Ron's 2ft track pack","#",2,"","-532.866,105.763,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_1.mdl","Ron's 2ft track pack","#",2,"","-724.122,-299.876,6.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_2.mdl","Ron's 2ft track pack","#",2,"","-811.77,-336.23,6.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_3.mdl","Ron's 2ft track pack","#",2,"","-899.503,-372.497,6.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_4.mdl","Ron's 2ft track pack","#",2,"","-987.115,-408.885,6.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_1.mdl","Ron's 2ft track pack","#",2,"","-724.122,299.876,6.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_2.mdl","Ron's 2ft track pack","#",2,"","-811.77,336.23,6.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_3.mdl","Ron's 2ft track pack","#",2,"","-899.503,372.497,6.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_4.mdl","Ron's 2ft track pack","#",2,"","-987.115,408.885,6.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_1.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_2.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_3.mdl","Ron's 2ft track pack","#",2,"","-1272,-1272,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_4.mdl","Ron's 2ft track pack","#",2,"","-1396,-1396,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_1024_sided.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_1024_sided.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_128_sided.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_128_sided.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_256_sided.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_256_sided.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_32_sided.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_32_sided.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_32.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_32.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_512_sided.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_512_sided.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_64_sided.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_64_sided.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_64.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_64.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge_sided_m.mdl","Ron's 2ft track pack","Embankment Bridge Sided Mirrored",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge_sided_m.mdl","Ron's 2ft track pack","Embankment Bridge Sided Mirrored",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge_sided.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge_sided.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_1.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_2.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_3.mdl","Ron's 2ft track pack","#",2,"","-1272,-1272,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_4.mdl","Ron's 2ft track pack","#",2,"","-1396,-1396,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_1.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_2.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_3.mdl","Ron's 2ft track pack","#",2,"","-1272,-1272,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_4.mdl","Ron's 2ft track pack","#",2,"","-1396,-1396,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_1.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_2.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_3.mdl","Ron's 2ft track pack","#",2,"","-1272,-1272,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_4.mdl","Ron's 2ft track pack","#",2,"","-1396,-1396,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/left/junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/left/junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/left/junction.mdl","Ron's 2ft track pack","#",3,"","-77.994,391.842,6.016","0,112.5,0","r2ftp_junction_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/right/junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/right/junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/right/junction.mdl","Ron's 2ft track pack","#",3,"","77.994,391.842,6.016","0,67.5,0","r2ftp_junction_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_switched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_switched_1.mdl","Ron's 2ft track pack","#",2,"","-384,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_switched_1.mdl","Ron's 2ft track pack","#",3,"","-391.842,-77.994,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_unswitched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_unswitched_1.mdl","Ron's 2ft track pack","#",2,"","-384,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_unswitched_1.mdl","Ron's 2ft track pack","#",3,"","-391.842,-77.994,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_switched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_switched.mdl","Ron's 2ft track pack","#",2,"","-384,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_switched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",2,"","-384,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_switched.mdl","Ron's 2ft track pack","#",2,"","-384,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",2,"","-384,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_n_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_n_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl","Ron's 2ft track pack","#",3,"","-124,704,6.016","0,90,0","r2ftp_junction_n_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_n_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_n_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl","Ron's 2ft track pack","#",3,"","124,704,6.016","0,90,0","r2ftp_junction_n_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/passenger_crossing.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/passenger_crossing.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_2_track.mdl","Ron's 2ft track pack","#",1,"","512,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_2_track.mdl","Ron's 2ft track pack","#",2,"","512,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_2_track.mdl","Ron's 2ft track pack","#",3,"","-512,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_2_track.mdl","Ron's 2ft track pack","#",4,"","-512,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","512,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","512,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-512,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-512,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_2_track.mdl","Ron's 2ft track pack","#",1,"","256,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_2_track.mdl","Ron's 2ft track pack","#",2,"","256,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_2_track.mdl","Ron's 2ft track pack","#",3,"","-256,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_2_track.mdl","Ron's 2ft track pack","#",4,"","-256,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","256,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","256,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-256,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-256,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_1.mdl","Ron's 2ft track pack","#",2,"","-1024,0,70.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-1024,0,70.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-1024,0,70.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 1024 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 1024 Embankment Sided Mirrored 1",2,"","-1024,0,70.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_1.mdl","Ron's 2ft track pack","#",2,"","-128,0,14.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-128,0,14.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-128,0,14.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 128 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 128 Embankment Sided Mirrored 1",2,"","-128,0,14.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_1.mdl","Ron's 2ft track pack","#",2,"","-256,0,22.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-256,0,22.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-256,0,22.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 256 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 256 Embankment Sided Mirrored 1",2,"","-256,0,22.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_1.mdl","Ron's 2ft track pack","#",2,"","-32,0,8.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-32,0,8.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-32,0,8.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 32 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 32 Embankment Sided Mirrored 1",2,"","-32,0,8.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_1.mdl","Ron's 2ft track pack","#",2,"","-512,0,38.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-512,0,38.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-512,0,38.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 512 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 512 Embankment Sided Mirrored 1",2,"","-512,0,38.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,10.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,10.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,10.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 64 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 64 Embankment Sided Mirrored 1",2,"","-64,0,10.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_1.mdl","Ron's 2ft track pack","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_1.mdl","Ron's 2ft track pack","#",2,"","0,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_1.mdl","Ron's 2ft track pack","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_1.mdl","Ron's 2ft track pack","#",2,"","0,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","0,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp End Embankment Sided Mirrored 1",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp End Embankment Sided Mirrored 1",2,"","0,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,9.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,9.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,9.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp Start Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp Start Embankment Sided Mirrored 1",2,"","-64,0,9.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/rerailer.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/rerailer.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_switched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_switched_1.mdl","Ron's 2ft track pack","#",2,"","-384,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_switched_1.mdl","Ron's 2ft track pack","#",3,"","-391.842,77.994,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_unswitched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_unswitched_1.mdl","Ron's 2ft track pack","#",2,"","-384,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_unswitched_1.mdl","Ron's 2ft track pack","#",3,"","-391.842,77.994,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing_middle.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing_middle.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing_side.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing_side.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/s_curve_left.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/s_curve_left.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/s_curve_right.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/s_curve_right.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_switched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_switched.mdl","Ron's 2ft track pack","#",2,"","-384,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_switched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_switched.mdl","Ron's 2ft track pack","#",4,"","-320,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",2,"","-384,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",4,"","-320,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_switched.mdl","Ron's 2ft track pack","#",2,"","-384,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_switched.mdl","Ron's 2ft track pack","#",4,"","-320,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",2,"","-384,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",4,"","-320,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_s_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_s_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl","Ron's 2ft track pack","#",3,"","-124,704,6.016","0,90,0","r2ftp_junction_s_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl","Ron's 2ft track pack","#",4,"","-124,320,6.016","0,-90,0","r2ftp_junction_s_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_s_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_s_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl","Ron's 2ft track pack","#",3,"","124,704,6.016","0,90,0","r2ftp_junction_s_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl","Ron's 2ft track pack","#",4,"","124,320,6.016","0,-90,0","r2ftp_junction_s_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/shed_open_both.mdl","Ron's 2ft track pack","#",1,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/shed_open_left.mdl","Ron's 2ft track pack","#",1,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/shed_open_right.mdl","Ron's 2ft track pack","#",1,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/shed.mdl","Ron's 2ft track pack","#",1,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32_2tracks.mdl","Ron's 2ft track pack","#",1,"","16,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32_2tracks.mdl","Ron's 2ft track pack","#",2,"","16,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32_2tracks.mdl","Ron's 2ft track pack","#",3,"","-16,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32_2tracks.mdl","Ron's 2ft track pack","#",4,"","-16,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_320_junction.mdl","Ron's 2ft track pack","#",1,"","160,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_320_junction.mdl","Ron's 2ft track pack","#",2,"","-160,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_64.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_64.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_barrier_closed.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_barrier_closed.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_barrier_opened.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_barrier_opened.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_damaged.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_damaged.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_1024_grass.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_1024_grass.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_1024_street.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_1024_street.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_128_grass.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_128_grass.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_128_street.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_128_street.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_256_grass.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_256_grass.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_256_street.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_256_street.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_32_grass.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_32_grass.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_32_street.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_32_street.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_512_grass.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_512_grass.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_512_street.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_512_street.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_64_grass.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_64_grass.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_64_street.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_64_street.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_buffer_grass.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_buffer_grass.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_buffer_street.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_buffer_street.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_1_grass.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_1_grass.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_1_street.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_1_street.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_2_grass.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_2_grass.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_2_street.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_2_street.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_grass_normal.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_grass_normal.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_grass_street.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_grass_street.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_switched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_switched.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_switched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_switched.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_normal_street.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_normal_street.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_switched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_switched.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_switched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_switched.mdl","Ron's 2ft track pack","#",4,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",4,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_switched.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_switched.mdl","Ron's 2ft track pack","#",4,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",4,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_station_grass_m.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_station_grass_m.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_station_grass.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_station_grass.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_switched.mdl","Ron's 2ft track pack","#",2,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_switched.mdl","Ron's 2ft track pack","#",4,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_unswitched.mdl","Ron's 2ft track pack","#",2,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_unswitched.mdl","Ron's 2ft track pack","#",4,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_big.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_big.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",1,"","96,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",2,"","0,96,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",3,"","-96,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",4,"","0,-96,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",5,"","32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",6,"","0,32,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",7,"","-32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",8,"","0,-32,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow.mdl","Ron's 2ft track pack","#",1,"","0,32,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow.mdl","Ron's 2ft track pack","#",2,"","0,-32,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",1,"","192,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",2,"","0,192,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",3,"","-192,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",4,"","0,-192,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",5,"","64,0,10.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",6,"","0,64,10.516","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",7,"","-64,0,10.516","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",8,"","0,-64,10.516","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small.mdl","Ron's 2ft track pack","#",1,"","64,0,10.516","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small.mdl","Ron's 2ft track pack","#",2,"","-64,0,10.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/viaduct/viaduct_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/viaduct/viaduct_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/viaduct/viaduct_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/viaduct/viaduct_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_switched.mdl","Ron's 2ft track pack","#",2,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_switched.mdl","Ron's 2ft track pack","#",4,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_unswitched.mdl","Ron's 2ft track pack","#",2,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_unswitched.mdl","Ron's 2ft track pack","#",4,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/x_junctions/x_junction.mdl","Ron's 2ft track pack","#",1,"","62,0,6.016","0,-90,0","r2ftp_junction_x"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/x_junctions/x_junction.mdl","Ron's 2ft track pack","#",2,"","62,704,6.016","0,90,0","r2ftp_junction_x"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/x_junctions/x_junction.mdl","Ron's 2ft track pack","#",3,"","-62,704,6.016","0,90,0","r2ftp_junction_x"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/x_junctions/x_junction.mdl","Ron's 2ft track pack","#",4,"","-62,0,6.016","0,-90,0","r2ftp_junction_x"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_switched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_switched_1.mdl","Ron's 2ft track pack","#",2,"","-391.763031,78.046341,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_switched_1.mdl","Ron's 2ft track pack","#",3,"","-391.812866,-77.926048,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_unswitched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_unswitched_1.mdl","Ron's 2ft track pack","#",2,"","-391.763031,78.046341,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_unswitched_1.mdl","Ron's 2ft track pack","#",3,"","-391.812866,-77.926048,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/y_junctions/y_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_y"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/y_junctions/y_junction.mdl","Ron's 2ft track pack","#",2,"","77.969124,391.794891,6.016","0,67.5,0","r2ftp_junction_y"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/y_junctions/y_junction.mdl","Ron's 2ft track pack","#",3,"","-77.969093,391.794952,6.016","0,112.5,0","r2ftp_junction_y"}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/1.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/1.mdl","Ron's Minitrain Props","#",2,"","-1,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/2.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/2.mdl","Ron's Minitrain Props","#",2,"","-2,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/4.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/4.mdl","Ron's Minitrain Props","#",2,"","-4,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/8.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/8.mdl","Ron's Minitrain Props","#",2,"","-8,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/bridge.mdl","Ron's Minitrain Props","#",1,"","0,64,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/bridge.mdl","Ron's Minitrain Props","#",2,"","0,-64,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_1024.mdl","Ron's Minitrain Props","#",1,"","0,512,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_1024.mdl","Ron's Minitrain Props","#",2,"","0,-512,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_128.mdl","Ron's Minitrain Props","#",1,"","0,64,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_128.mdl","Ron's Minitrain Props","#",2,"","0,-64,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_16.mdl","Ron's Minitrain Props","#",1,"","0,8,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_16.mdl","Ron's Minitrain Props","#",2,"","0,-8,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_1.mdl","Ron's Minitrain Props","#",1,"","0,0.5,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_1.mdl","Ron's Minitrain Props","#",2,"","0,-0.5,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_1.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_1.mdl","Ron's Minitrain Props","#",2,"","10.542684747187,53.001655382565,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_2.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_2.mdl","Ron's Minitrain Props","#",2,"","12.826298771848,64.482158353518,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_3.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_3.mdl","Ron's Minitrain Props","#",2,"","15.10991279651,75.96266132447,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_4.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_4.mdl","Ron's Minitrain Props","#",2,"","17.393526821171,87.443164295423,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_5.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_5.mdl","Ron's Minitrain Props","#",2,"","19.677140845832,98.923667266376,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_6.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_6.mdl","Ron's Minitrain Props","#",2,"","21.960754870494,110.40417023733,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_256.mdl","Ron's Minitrain Props","#",1,"","0,128,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_256.mdl","Ron's Minitrain Props","#",2,"","0,-128,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_2.mdl","Ron's Minitrain Props","#",1,"","0,1,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_2.mdl","Ron's Minitrain Props","#",2,"","0,-1,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_32.mdl","Ron's Minitrain Props","#",1,"","0,16,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_32.mdl","Ron's Minitrain Props","#",2,"","0,-16,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_1.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_1.mdl","Ron's Minitrain Props","#",2,"","40.565710805663,97.934289194337,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_2.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_2.mdl","Ron's Minitrain Props","#",2,"","49.352507370067,119.14749262993,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_3.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_3.mdl","Ron's Minitrain Props","#",2,"","58.13930393447,140.36069606553,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_4.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_4.mdl","Ron's Minitrain Props","#",2,"","66.926100498874,161.57389950113,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_5.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_5.mdl","Ron's Minitrain Props","#",2,"","75.712897063277,182.78710293672,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_6.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_6.mdl","Ron's Minitrain Props","#",2,"","84.499693627681,204.00030637232,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_4.mdl","Ron's Minitrain Props","#",1,"","0,2,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_4.mdl","Ron's Minitrain Props","#",2,"","0,-2,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_512.mdl","Ron's Minitrain Props","#",1,"","0,256,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_512.mdl","Ron's Minitrain Props","#",2,"","0,-256,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_64.mdl","Ron's Minitrain Props","#",1,"","0,32,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_64.mdl","Ron's Minitrain Props","#",2,"","0,-32,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_8.mdl","Ron's Minitrain Props","#",1,"","0,4,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_8.mdl","Ron's Minitrain Props","#",2,"","0,-4,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_1.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_1.mdl","Ron's Minitrain Props","#",2,"","138.5,138.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_2.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_2.mdl","Ron's Minitrain Props","#",2,"","168.5,168.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_3.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_3.mdl","Ron's Minitrain Props","#",2,"","198.5,198.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_4.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_4.mdl","Ron's Minitrain Props","#",2,"","228.5,228.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_5.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_5.mdl","Ron's Minitrain Props","#",2,"","258.5,258.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_6.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_6.mdl","Ron's Minitrain Props","#",2,"","288.5,288.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_128.mdl","Ron's Minitrain Props","#",1,"","0,0,1","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_128.mdl","Ron's Minitrain Props","#",2,"","0,144,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_256.mdl","Ron's Minitrain Props","#",1,"","0,0,1","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_256.mdl","Ron's Minitrain Props","#",2,"","0,272,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_512.mdl","Ron's Minitrain Props","#",1,"","0,0,1","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_512.mdl","Ron's Minitrain Props","#",2,"","0,528,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/scenery/tunnel_64.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/scenery/tunnel_64.mdl","Ron's Minitrain Props","#",2,"","-64,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h03.mdl","SProps","225 Down",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h03.mdl","SProps","225 Down",2,"","-1264.663,0,-247.177","@22.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h02.mdl","SProps","225 Up",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h02.mdl","SProps","225 Up",2,"","-1258.828,0,261.268","@-22.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h01.mdl","SProps","Ramp",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h01.mdl","SProps","Ramp",2,"","-2525.98,0,503.58","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/rerailer.mdl","SProps","#",1,"-1088.178,0,19.886","-1280.383,0,7.618","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s01.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s01.mdl","SProps","#",2,"","-162,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s02.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s02.mdl","SProps","#",2,"","-324,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s03.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s03.mdl","SProps","#",2,"","-486,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s04.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s04.mdl","SProps","#",2,"","-648,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s05.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s05.mdl","SProps","#",2,"","-1296.002,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s06.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s06.mdl","SProps","#",2,"","-2592.002,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_t90_01.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_t90_01.mdl","SProps","#",2,"","-825,825,7.624","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_t90_02.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_t90_02.mdl","SProps","#",2,"","-1650,1650.0009765625,7.624","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_bumper.mdl","Shinji85's Rails","Bumper",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_csfix.mdl","Shinji85's Rails","Counter Switch Fix",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_csfix.mdl","Shinji85's Rails","Counter Switch Fix",2,"","-115.18847,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cs.mdl","Shinji85's Rails","Counter Switch",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cs.mdl","Shinji85's Rails","Counter Switch",2,"","-908.81165,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cxfix.mdl","Shinji85's Rails","Counter X Fix",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cxfix.mdl","Shinji85's Rails","Counter X Fix",2,"","-149.48648,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cx.mdl","Shinji85's Rails","Counter X",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cx.mdl","Shinji85's Rails","Counter X",2,"","-362.51361,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cross_4x.mdl","Shinji85's Rails","Cross 4x",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cross_4x.mdl","Shinji85's Rails","Cross 4x",2,"","-512,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cross_4x.mdl","Shinji85's Rails","Cross 4x",3,"","-256,-256,7.346","0,270,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cross_4x.mdl","Shinji85's Rails","Cross 4x",4,"","-256,256,7.346","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_cc.mdl","Shinji85's Rails","Curve Cc",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_cc.mdl","Shinji85's Rails","Curve Cc",2,"","-966.40515,128,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r11.mdl","Shinji85's Rails","Curve R11",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r11.mdl","Shinji85's Rails","Curve R11",2,"","-1086.11584,449.88458,7.346","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r12.mdl","Shinji85's Rails","Curve R12",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r12.mdl","Shinji85's Rails","Curve R12",2,"","-905.09656,374.90414,7.346","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r13.mdl","Shinji85's Rails","Curve R13",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r13.mdl","Shinji85's Rails","Curve R13",2,"","-724.07727,299.92276,7.346","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r1.mdl","Shinji85's Rails","Curve R1",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r1.mdl","Shinji85's Rails","Curve R1",2,"","-1060.12341,139.56763,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r2.mdl","Shinji85's Rails","Curve R2",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r2.mdl","Shinji85's Rails","Curve R2",2,"","-993.86572,130.84471,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r3.mdl","Shinji85's Rails","Curve R3",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r3.mdl","Shinji85's Rails","Curve R3",2,"","-927.60797,122.1218,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_4x_crossing.mdl","Shinji85's Rails","Double 4x Crossing",1,"","0,128,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_4x_crossing.mdl","Shinji85's Rails","Double 4x Crossing",2,"","-512,128,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_4x_crossing.mdl","Shinji85's Rails","Double 4x Crossing",3,"","0,-128,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_4x_crossing.mdl","Shinji85's Rails","Double 4x Crossing",4,"","-512,-128,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_bumper.mdl","Shinji85's Rails","Double Bumper",1,"","0,128,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_bumper.mdl","Shinji85's Rails","Double Bumper",2,"","0,-128,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_l_switch.mdl","Shinji85's Rails","L Switch",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_l_switch.mdl","Shinji85's Rails","L Switch",2,"","-1024,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_l_switch.mdl","Shinji85's Rails","L Switch",3,"","-966.40515,-128,7.346","0,195,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_r_switch.mdl","Shinji85's Rails","R Switch",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_r_switch.mdl","Shinji85's Rails","R Switch",2,"","-1024,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_r_switch.mdl","Shinji85's Rails","R Switch",3,"","-966.40515,128,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_16x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_16x.mdl","Shinji85's Rails","#",2,"","-2048,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_1x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_1x.mdl","Shinji85's Rails","#",2,"","-128,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_2x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_2x.mdl","Shinji85's Rails","#",2,"","-256,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_4x_crossing.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_4x_crossing.mdl","Shinji85's Rails","#",2,"","-512,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_4x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_4x.mdl","Shinji85's Rails","#",2,"","-512,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_8x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_8x.mdl","Shinji85's Rails","#",2,"","-1024,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_x_junction.mdl","Shinji85's Rails","X Junction",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_x_junction.mdl","Shinji85's Rails","X Junction",2,"","-494.55,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_x_junction.mdl","Shinji85's Rails","X Junction",3,"","-33.129,-123.63866,7.346","0,-30,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_x_junction.mdl","Shinji85's Rails","X Junction",4,"","-461.42175,123.63649,7.346","0,150,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/sw_buffer_stop.mdl","SligWolf's Minis","Buffer Stop",1,"","9.43,-8.011,-1.001","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_22-5.mdl","SligWolf's Minis","#",2,"","-53.014,2.013,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_45.mdl","SligWolf's Minis","#",2,"","-97.956,32.044,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_90.mdl","SligWolf's Minis","#",2,"","-138.51,130,1","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_big.mdl","SligWolf's Minis","#",2,"","-277.01,268.511,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_medium.mdl","SligWolf's Minis","#",2,"","-195.966,72.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_small.mdl","SligWolf's Minis","#",2,"","-105.994,12.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_22-5.mdl","SligWolf's Minis","#",2,"","-64.492,4.307,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_45.mdl","SligWolf's Minis","#",2,"","-119.15,40.853,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_90.mdl","SligWolf's Minis","#",2,"","-168.51,160,0.996","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_big.mdl","SligWolf's Minis","#",2,"","-336.99,328.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_medium.mdl","SligWolf's Minis","#",2,"","-237.966,90.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_small.mdl","SligWolf's Minis","#",2,"","-128.994,17.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_22-5.mdl","SligWolf's Minis","#",2,"","-75.965,6.599,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_45.mdl","SligWolf's Minis","#",2,"","-140.368,49.631,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_90.mdl","SligWolf's Minis","#",2,"","-198.51,190,0.995","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_big.mdl","SligWolf's Minis","#",2,"","-397.033,388.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_medium.mdl","SligWolf's Minis","#",2,"","-280.966,107.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_small.mdl","SligWolf's Minis","#",2,"","-151.994,21.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_22-5.mdl","SligWolf's Minis","#",2,"","-87.437,8.904,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_45.mdl","SligWolf's Minis","#",2,"","-161.567,58.434,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_90.mdl","SligWolf's Minis","#",2,"","-228.51,220,0.994","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_big.mdl","SligWolf's Minis","#",2,"","-456.991,448.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_medium.mdl","SligWolf's Minis","#",2,"","-322.966,125.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_small.mdl","SligWolf's Minis","#",2,"","-174.994,26.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_22-5.mdl","SligWolf's Minis","#",2,"","-98.913,11.205,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_45.mdl","SligWolf's Minis","#",2,"","-182.769,67.232,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_90.mdl","SligWolf's Minis","#",2,"","-258.51,250,0.994","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_big.mdl","SligWolf's Minis","#",2,"","-516.985,508.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_medium.mdl","SligWolf's Minis","#",2,"","-365.991,142.507,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_small.mdl","SligWolf's Minis","#",2,"","-197.994,31.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_22-5.mdl","SligWolf's Minis","#",2,"","-110.405,13.455,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_45.mdl","SligWolf's Minis","#",2,"","-203.983,76.019,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_90.mdl","SligWolf's Minis","#",2,"","-288.51,280,0.993","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_big.mdl","SligWolf's Minis","#",2,"","-576.985,568.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_medium.mdl","SligWolf's Minis","#",2,"","-407.99,160.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_small.mdl","SligWolf's Minis","#",2,"","-220.994,35.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/rerailer.mdl","SligWolf's Minis","Rerailer Double",1,"","190,-0.005,1.02","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/rerailer.mdl","SligWolf's Minis","Rerailer Double",2,"","-190,-0.005,1.02","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_1024.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_1024.mdl","SligWolf's Minis","#",2,"","-1024,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_128.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_128.mdl","SligWolf's Minis","#",2,"","-128,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_16.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_16.mdl","SligWolf's Minis","#",2,"","-16,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_256.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_256.mdl","SligWolf's Minis","#",2,"","-256,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_32.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_32.mdl","SligWolf's Minis","#",2,"","-32,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_512.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_512.mdl","SligWolf's Minis","#",2,"","-512,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_64.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_64.mdl","SligWolf's Minis","#",2,"","-64,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_128.mdl","SligWolf's Minis","#",1,"","8,-8.508,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_128.mdl","SligWolf's Minis","#",2,"","-136,-8.506,33","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_256.mdl","SligWolf's Minis","#",1,"","8,-8.508,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_256.mdl","SligWolf's Minis","#",2,"","-264,-8.506,33","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_512.mdl","SligWolf's Minis","#",1,"","8,-8.508,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_512.mdl","SligWolf's Minis","#",2,"","-520,-8.506,33","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_left.mdl","SligWolf's Minis","#",1,"","16,21.512,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_left.mdl","SligWolf's Minis","#",2,"","-144,21.513,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_left.mdl","SligWolf's Minis","#",3,"","16,-8.515,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_left.mdl","SligWolf's Minis","#",4,"","-144,-8.514,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_right.mdl","SligWolf's Minis","#",1,"","16,21.512,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_right.mdl","SligWolf's Minis","#",2,"","-144,21.513,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_right.mdl","SligWolf's Minis","#",3,"","16,-8.515,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_right.mdl","SligWolf's Minis","#",4,"","-144,-8.514,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch.mdl","SligWolf's Minis","Switch Y",1,"","-128,-23.512,0.998","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch.mdl","SligWolf's Minis","Switch Y",2,"","0,-8.509,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch.mdl","SligWolf's Minis","Switch Y",3,"","-128,6.493,0.998","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_3.mdl","SligWolf's Rerailers","Long Double",1,"-258.249,-0.01,-0.002","219.415,0,-5.409","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_3.mdl","SligWolf's Rerailers","Long Double",2,"-3124.199,-0.01,2.997","-3601.869,-0.377,-5.416","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/sw_rerailer_3.mdl","SligWolf's Rerailers","Long Single",1,"-190.553,0,25.193","211.414,0.015,-5.395","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_2.mdl","SligWolf's Rerailers","Middle Double",1,"-265.554,0,3.031","219.412,0,-5.407","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_2.mdl","SligWolf's Rerailers","Middle Double",2,"-1882.106,0,3.031","-2367.072,0,-5.412","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/sw_rerailer_2.mdl","SligWolf's Rerailers","Middle Single",1,"-190.553,0,25.193","211.414,0.015,-5.395","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_1.mdl","SligWolf's Rerailers","Short Double",1,"-221.409,0,3.031","219.412,0,-5.411","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_1.mdl","SligWolf's Rerailers","Short Double",2,"-1103.05,0,0.009","-1543.871,0,-5.411","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/sw_rerailer_1.mdl","SligWolf's Rerailers","Short Single",1,"-190.553,0,25.193","211.414,0.015,-5.395","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrclooping.mdl","Sligwof's Railcar","Loop 180",1,"","810,-252.447,-0.005","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrclooping.mdl","Sligwof's Railcar","Loop 180",2,"","-809.999,136.997,-0.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcloopingspecial.mdl","Sligwof's Railcar","LoopSwitch 180",1,"","927.001,-194.403,-0.036","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcloopingspecial.mdl","Sligwof's Railcar","LoopSwitch 180",2,"","-809.999,137.003,350.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcloopingspecial.mdl","Sligwof's Railcar","LoopSwitch 180",3,"","-809.999,-527.972,350.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcramp.mdl","Sligwof's Railcar","Ramp 45",1,"","1000,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcramp.mdl","Sligwof's Railcar","Ramp 45",2,"","-641.92,0,269.672","@-45,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrctraffic_lights.mdl","Sligwof's Railcar","Start Lights",1,"","0,-152.532,0","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrctraffic_lights.mdl","Sligwof's Railcar","Start Lights",2,"","0,152.554,0","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrctraffic_lights.mdl","Sligwof's Railcar","Start Lights",3,"","0,0,0.042","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccross.mdl","Sligwof's Railcar","Switcher Cross",1,"","500,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccross.mdl","Sligwof's Railcar","Switcher Cross",2,"","-2673,0,0","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccurve001.mdl","Sligwof's Railcar","U-Turn",1,"","890,748.009,2.994","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccurve001.mdl","Sligwof's Railcar","U-Turn",2,"","890,451.998,2.994","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccurve001.mdl","Sligwof's Railcar","U-Turn",3,"","890,-452.001,2.974","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccurve001.mdl","Sligwof's Railcar","U-Turn",4,"","890,-748.027,2.974","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_i.mdl","Sligwolf's Mini hover tracks","#",1,"","157.982285,-19.999878,83.837341","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-27.427399,-19.999756,5.118835","@52.5,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_small_i.mdl","Sligwolf's Mini hover tracks","#",1,"","157.982788,27.999634,83.837219","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_small_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-27.439621,28.012085,5.100098","@52.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_small.mdl","Sligwolf's Mini hover tracks","#",1,"","157.982788,27.999634,83.837219","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_small.mdl","Sligwolf's Mini hover tracks","#",2,"","-27.439621,28.012085,5.100098","@52.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow.mdl","Sligwolf's Mini hover tracks","#",1,"","157.982285,-19.999878,83.837341","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow.mdl","Sligwolf's Mini hover tracks","#",2,"","-27.427399,-19.999756,5.118835","@52.5,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_i.mdl","Sligwolf's Mini hover tracks","#",1,"","0.000144,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_i.mdl","Sligwolf's Mini hover tracks","#",2,"","101.823288,53.82341,5.81","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_s_i.mdl","Sligwolf's Mini hover tracks","#",1,"","203.999725,12.000124,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_s_i.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000274,96.000008,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_s.mdl","Sligwolf's Mini hover tracks","#",1,"","203.999496,-12.000174,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_s.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000535,-95.999512,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45.mdl","Sligwolf's Mini hover tracks","#",1,"","0.000114,-95.999878,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45.mdl","Sligwolf's Mini hover tracks","#",2,"","101.823112,-53.823227,5.81","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_90_i.mdl","Sligwolf's Mini hover tracks","#",1,"","144,-47.999886,5.81","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_90_i.mdl","Sligwolf's Mini hover tracks","#",2,"","6.1e-005,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_90.mdl","Sligwolf's Mini hover tracks","#",1,"","144,47.999947,5.81","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_90.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000122,-95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_i.mdl","Sligwolf's Mini hover tracks","#",1,"","237.587646,-2.412163,5.81","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_i.mdl","Sligwolf's Mini hover tracks","#",2,"","6.1e-005,95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_s_i.mdl","Sligwolf's Mini hover tracks","#",1,"","475.999908,-99.999756,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_s_i.mdl","Sligwolf's Mini hover tracks","#",2,"","0.0001,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_s.mdl","Sligwolf's Mini hover tracks","#",1,"","475.999939,99.999634,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_s.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000108,-95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45.mdl","Sligwolf's Mini hover tracks","#",1,"","237.587524,2.412376,5.81","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000122,-95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_90_i.mdl","Sligwolf's Mini hover tracks","#",1,"","335.999756,-239.999954,5.81","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_90_i.mdl","Sligwolf's Mini hover tracks","#",2,"","6.9e-005,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_90.mdl","Sligwolf's Mini hover tracks","#",1,"","335.999756,239.999954,5.81","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_90.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000122,-95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_i.mdl","Sligwolf's Mini hover tracks","#",1,"","373.352448,-58.647461,5.81","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_i.mdl","Sligwolf's Mini hover tracks","#",2,"","9.2e-005,96,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_s_i.mdl","Sligwolf's Mini hover tracks","#",1,"","745.999939,-214,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_s_i.mdl","Sligwolf's Mini hover tracks","#",2,"","9.2e-005,96,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_s.mdl","Sligwolf's Mini hover tracks","#",1,"","745.999939,214.000244,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_s.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000107,-95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45.mdl","Sligwolf's Mini hover tracks","#",1,"","373.352264,58.647644,5.81","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000107,-95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_90_i.mdl","Sligwolf's Mini hover tracks","#",1,"","9.2e-005,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_90_i.mdl","Sligwolf's Mini hover tracks","#",2,"","527.999756,-431.999878,5.81","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_90.mdl","Sligwolf's Mini hover tracks","#",1,"","0.000107,-95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_90.mdl","Sligwolf's Mini hover tracks","#",2,"","528,431.999939,5.81","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop_quarter_i.mdl","Sligwolf's Mini hover tracks","#",1,"","-25.99988,-19.999998,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop_quarter_i.mdl","Sligwolf's Mini hover tracks","#",2,"","198.190018,-20,229.959763","@-90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop_quarter.mdl","Sligwolf's Mini hover tracks","#",1,"","-25.99988,-19.999998,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop_quarter.mdl","Sligwolf's Mini hover tracks","#",2,"","198.190018,-20,229.959763","@-90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop1i.mdl","Sligwolf's Mini hover tracks","#",1,"","103.999817,-136,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop1i.mdl","Sligwolf's Mini hover tracks","#",2,"","-103.999939,-32,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop1.mdl","Sligwolf's Mini hover tracks","#",1,"","104.00061,136.000061,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop1.mdl","Sligwolf's Mini hover tracks","#",2,"","-103.999908,32.000008,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop2i.mdl","Sligwolf's Mini hover tracks","#",1,"","103.999939,-227.999084,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop2i.mdl","Sligwolf's Mini hover tracks","#",2,"","-103.999878,-19.999634,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop2.mdl","Sligwolf's Mini hover tracks","#",1,"","103.999878,227.998291,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop2.mdl","Sligwolf's Mini hover tracks","#",2,"","-103.999939,19.998779,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_i.mdl","Sligwolf's Mini hover tracks","#",1,"","-26,-20,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_i.mdl","Sligwolf's Mini hover tracks","#",2,"","157.184906,-20,83.365128","@-52.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_small_i.mdl","Sligwolf's Mini hover tracks","#",1,"","-26,28,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_small_i.mdl","Sligwolf's Mini hover tracks","#",2,"","157.1996,28,83.378784","@-52.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_small.mdl","Sligwolf's Mini hover tracks","#",1,"","-26,28,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_small.mdl","Sligwolf's Mini hover tracks","#",2,"","157.1996,28,83.378784","@-52.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp.mdl","Sligwolf's Mini hover tracks","#",1,"","-26,-20,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp.mdl","Sligwolf's Mini hover tracks","#",2,"","157.184906,-20,83.365128","@-52.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_long.mdl","Sligwolf's Mini hover tracks","#",1,"","312,32,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_long.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,32,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_mid.mdl","Sligwolf's Mini hover tracks","#",1,"","208,32,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_mid.mdl","Sligwolf's Mini hover tracks","#",2,"","-208,32,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_small.mdl","Sligwolf's Mini hover tracks","#",1,"","104,32,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_small.mdl","Sligwolf's Mini hover tracks","#",2,"","-104,32,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_long.mdl","Sligwolf's Mini hover tracks","#",1,"","312,-16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_long.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,-16,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_mid.mdl","Sligwolf's Mini hover tracks","#",1,"","208,-16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_mid.mdl","Sligwolf's Mini hover tracks","#",2,"","-208,-16,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_small.mdl","Sligwolf's Mini hover tracks","#",1,"","104,-16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_small.mdl","Sligwolf's Mini hover tracks","#",2,"","-104,-16,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter_i.mdl","Sligwolf's Mini hover tracks","#",1,"","104,-80,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,-30,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter_i.mdl","Sligwolf's Mini hover tracks","#",3,"","-312,-130,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter.mdl","Sligwolf's Mini hover tracks","#",1,"","-104,80,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter.mdl","Sligwolf's Mini hover tracks","#",2,"","312,30,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter.mdl","Sligwolf's Mini hover tracks","#",3,"","312,130,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_to_x4_i.mdl","Sligwolf's Mini hover tracks","#",1,"","104,16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_to_x4_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,16,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_to_x4.mdl","Sligwolf's Mini hover tracks","#",1,"","104,16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_to_x4.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,16,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x4_i.mdl","Sligwolf's Mini hover tracks","#",1,"","52,32,1.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x4_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-52,32,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x4.mdl","Sligwolf's Mini hover tracks","#",1,"","52,32,1.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x4.mdl","Sligwolf's Mini hover tracks","#",2,"","-52,32,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x8_i.mdl","Sligwolf's Mini hover tracks","#",1,"","52,-16,1.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x8_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-52,-16,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x8.mdl","Sligwolf's Mini hover tracks","#",1,"","52,-16,1.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x8.mdl","Sligwolf's Mini hover tracks","#",2,"","-52,-16,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_0apartments_0.mdl","StephenTechno's Buildings","Apartments 0",1,"","-268,612.001,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_0apartments_0.mdl","StephenTechno's Buildings","Apartments 0",2,"","-268,-612,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_1apartments_1.mdl","StephenTechno's Buildings","Apartments 1",1,"","-268,1248,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_1apartments_1.mdl","StephenTechno's Buildings","Apartments 1",2,"","-268,-1200,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_3apartments_3.mdl","StephenTechno's Buildings","Apartments 3",1,"","-268.008,574.913,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_3apartments_3.mdl","StephenTechno's Buildings","Apartments 3",2,"","-268,-577,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_4bank.mdl","StephenTechno's Buildings","Bank",1,"","-268,504,2.031232","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_4bank.mdl","StephenTechno's Buildings","Bank",2,"","-268,-504,2.031232","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/recreational/5_1club_lgbt.mdl","StephenTechno's Buildings","Club Lgbt",1,"","-268,720,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/recreational/5_1club_lgbt.mdl","StephenTechno's Buildings","Club Lgbt",2,"","-268,-720,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/schultz/stores/4_1garage.mdl","StephenTechno's Buildings","Garage",1,"","-268,698,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/schultz/stores/4_1garage.mdl","StephenTechno's Buildings","Garage",2,"","-268,-598,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_1gas_station_a.mdl","StephenTechno's Buildings","Gas Station A",1,"","-268,604,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_1gas_station_a.mdl","StephenTechno's Buildings","Gas Station A",2,"","-268,-620,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_1gas_station_b.mdl","StephenTechno's Buildings","Gas Station B",1,"","-268,612,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_1gas_station_b.mdl","StephenTechno's Buildings","Gas Station B",2,"","-268,-612,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_3gunshop.mdl","StephenTechno's Buildings","Gunshop",1,"","-268,504.001,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_3gunshop.mdl","StephenTechno's Buildings","Gunshop",2,"","-268,-504,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot16x16fence.mdl","StephenTechno's Buildings","#",1,"","-268,575,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot16x16fence.mdl","StephenTechno's Buildings","#",2,"","-268,-577.002,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot16x16.mdl","StephenTechno's Buildings","#",1,"","-268,575,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot16x16.mdl","StephenTechno's Buildings","#",2,"","-268,-577.002,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot32x32fence.mdl","StephenTechno's Buildings","#",1,"","-268,1152.002,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot32x32fence.mdl","StephenTechno's Buildings","#",2,"","-267.999,-1151.292,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot32x32.mdl","StephenTechno's Buildings","#",1,"","-268,1152.002,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot32x32.mdl","StephenTechno's Buildings","#",2,"","-267.999,-1151.292,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot8x8fence.mdl","StephenTechno's Buildings","#",1,"","-268,288,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot8x8fence.mdl","StephenTechno's Buildings","#",2,"","-268,-287.996,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot8x8.mdl","StephenTechno's Buildings","#",1,"","-268,288,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot8x8.mdl","StephenTechno's Buildings","#",2,"","-268,-287.996,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/schultz/stores/4_0office.mdl","StephenTechno's Buildings","Office",1,"","-267.986,616.053,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/schultz/stores/4_0office.mdl","StephenTechno's Buildings","Office",2,"","-268,-608,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_2pcshop.mdl","StephenTechno's Buildings","Pcshop",1,"","-268,432,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_2pcshop.mdl","StephenTechno's Buildings","Pcshop",2,"","-268,-432,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_1road_dl_sdw_1x1.mdl","StephenTechno's Buildings","Road Dl Sdw 1x1",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_1road_dl_sdw_1x1.mdl","StephenTechno's Buildings","Road Dl Sdw 1x1",2,"","-72,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_2road_dl_sdw_1x2.mdl","StephenTechno's Buildings","Road Dl Sdw 1x2",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_2road_dl_sdw_1x2.mdl","StephenTechno's Buildings","Road Dl Sdw 1x2",2,"","-144,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_10road_dl_sdw_1x32.mdl","StephenTechno's Buildings","Road Dl Sdw 1x32",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_10road_dl_sdw_1x32.mdl","StephenTechno's Buildings","Road Dl Sdw 1x32",2,"","-2304,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_3road_dl_sdw_1x3.mdl","StephenTechno's Buildings","Road Dl Sdw 1x3",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_3road_dl_sdw_1x3.mdl","StephenTechno's Buildings","Road Dl Sdw 1x3",2,"","-216,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_4road_dl_sdw_1x4.mdl","StephenTechno's Buildings","Road Dl Sdw 1x4",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_4road_dl_sdw_1x4.mdl","StephenTechno's Buildings","Road Dl Sdw 1x4",2,"","-288,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_5road_dl_sdw_1x5.mdl","StephenTechno's Buildings","Road Dl Sdw 1x5",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_5road_dl_sdw_1x5.mdl","StephenTechno's Buildings","Road Dl Sdw 1x5",2,"","-360,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_13road_intersection_2w.mdl","StephenTechno's Buildings","Road Intersection 2w",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_13road_intersection_2w.mdl","StephenTechno's Buildings","Road Intersection 2w",2,"","-340,-340,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl","StephenTechno's Buildings","Road Intersection 3w",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl","StephenTechno's Buildings","Road Intersection 3w",2,"","-340,340,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl","StephenTechno's Buildings","Road Intersection 3w",3,"","-340,-340,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl","StephenTechno's Buildings","Road Intersection 4w",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl","StephenTechno's Buildings","Road Intersection 4w",2,"","-340,340,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl","StephenTechno's Buildings","Road Intersection 4w",3,"","-680,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl","StephenTechno's Buildings","Road Intersection 4w",4,"","-340,-340,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_14road_intersection_deadend.mdl","StephenTechno's Buildings","Road Intersection Deadend",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_15road_intersection_turn1.mdl","StephenTechno's Buildings","Road Intersection Turn1",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_15road_intersection_turn1.mdl","StephenTechno's Buildings","Road Intersection Turn1",2,"","-340,-340,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_16road_intersection_turn2_16.mdl","StephenTechno's Buildings","Road Intersection Turn",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_16road_intersection_turn2_16.mdl","StephenTechno's Buildings","Road Intersection Turn",2,"","-1564,1564,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",2,"","-1632,1152,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",3,"","-2304,1152,315.031616","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",4,"","-2976,1152,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",5,"","-2976.007,-1151.975,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",6,"","-2304,-1152,315.031616","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",7,"","-1632,-1152,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",8,"","-4608,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 2",1,"","0,-671.994,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 2",2,"","0,0,315.031616","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 2",3,"","0,671.995,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 2",4,"","-4608,0,315.031616","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp Stop",1,"","0,-671.994,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp Stop",2,"","0,0,315.031616","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp Stop",3,"","0,671.995,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp Stop",4,"","-4160,0,15.202","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_7roadsdwhwy_turn1.mdl","StephenTechno's Buildings","Roadsdwhwy Turn1",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_7roadsdwhwy_turn1.mdl","StephenTechno's Buildings","Roadsdwhwy Turn1",2,"","-1692,1692,316.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_4roadsdwhwy1x16.mdl","StephenTechno's Buildings","Roadsdwhwy1x16",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_4roadsdwhwy1x16.mdl","StephenTechno's Buildings","Roadsdwhwy1x16",2,"","-1152,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy1x1.mdl","StephenTechno's Buildings","Roadsdwhwy1x1",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy1x1.mdl","StephenTechno's Buildings","Roadsdwhwy1x1",2,"","-72,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_5roadsdwhwy1x32.mdl","StephenTechno's Buildings","Roadsdwhwy1x32",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_5roadsdwhwy1x32.mdl","StephenTechno's Buildings","Roadsdwhwy1x32",2,"","-2304,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_2roadsdwhwy1x4.mdl","StephenTechno's Buildings","Roadsdwhwy1x4",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_2roadsdwhwy1x4.mdl","StephenTechno's Buildings","Roadsdwhwy1x4",2,"","-288,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_6roadsdwhwy1x64.mdl","StephenTechno's Buildings","Roadsdwhwy1x64",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_6roadsdwhwy1x64.mdl","StephenTechno's Buildings","Roadsdwhwy1x64",2,"","-4608,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_3roadsdwhwy1x8.mdl","StephenTechno's Buildings","Roadsdwhwy1x8",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_3roadsdwhwy1x8.mdl","StephenTechno's Buildings","Roadsdwhwy1x8",2,"","-576,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_10roadsdwhwybridge1x16.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x16",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_10roadsdwhwybridge1x16.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x16",2,"","-1152,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_11roadsdwhwybridge1x32.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x32",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_11roadsdwhwybridge1x32.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x32",2,"","-2304,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_8roadsdwhwybridge1x4.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x4",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_8roadsdwhwybridge1x4.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x4",2,"","-288,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_12roadsdwhwybridge1x64.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x64",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_12roadsdwhwybridge1x64.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x64",2,"","-4608,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_9roadsdwhwybridge1x8.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x8",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_9roadsdwhwybridge1x8.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x8",2,"","-576,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_13roadsdwsidewalk_int_2way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 2way",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_13roadsdwsidewalk_int_2way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 2way",2,"","-540,540,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 3way",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 3way",2,"","-540,540,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 3way",3,"","-540,-540,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 4way",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 4way",2,"","-540,540,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 4way",3,"","-1080,0,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 4way",4,"","-540,-540,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_14roadsdwsidewalk_turn_1.mdl","StephenTechno's Buildings","Roadsdwsidewalk Turn 1",1,"","0,-4,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_14roadsdwsidewalk_turn_1.mdl","StephenTechno's Buildings","Roadsdwsidewalk Turn 1",2,"","-540,-544,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_15roadsdwsidewalk_turn_2.mdl","StephenTechno's Buildings","Roadsdwsidewalk Turn 2",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_15roadsdwsidewalk_turn_2.mdl","StephenTechno's Buildings","Roadsdwsidewalk Turn 2",2,"","-1692,1692,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_9roadsdwsidewalk1x16.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x16",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_9roadsdwsidewalk1x16.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x16",2,"","-1152,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_1roadsdwsidewalk1x1.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x1",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_1roadsdwsidewalk1x1.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x1",2,"","-72,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_2roadsdwsidewalk1x2.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x2",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_2roadsdwsidewalk1x2.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x2",2,"","-144,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_10roadsdwsidewalk1x32.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x32",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_10roadsdwsidewalk1x32.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x32",2,"","-2304,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_3roadsdwsidewalk1x3.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x3",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_3roadsdwsidewalk1x3.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x3",2,"","-216,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_4roadsdwsidewalk1x4.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x4",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_4roadsdwsidewalk1x4.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x4",2,"","-288,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_5roadsdwsidewalk1x5.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x5",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_5roadsdwsidewalk1x5.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x5",2,"","-360,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_6roadsdwsidewalk1x6.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x6",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_6roadsdwsidewalk1x6.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x6",2,"","-432,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_7roadsdwsidewalk1x7.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x7",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_7roadsdwsidewalk1x7.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x7",2,"","-504,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_8roadsdwsidewalk1x8.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x8",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_8roadsdwsidewalk1x8.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x8",2,"","-576,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_0roadsdwsidewalktransfer.mdl","StephenTechno's Buildings","Roadsdwsidewalktransfer",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_0roadsdwsidewalktransfer.mdl","StephenTechno's Buildings","Roadsdwsidewalktransfer",2,"","-376,0,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",1,"","0,-916,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",2,"","0,916,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",3,"","-340,1256,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",4,"","-2172,1256,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",5,"","-2512,916,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",6,"","-2512,-916,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",7,"","-2172,-1256,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",8,"","-340,-1256,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",1,"","0,-916,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",2,"","0,916,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",3,"","-340,1256,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",4,"","-2172,1256,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",5,"","-2512,916,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",6,"","-2512,-916,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",7,"","-2172,-1256,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",8,"","-340,-1256,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",1,"","0,-1492,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",2,"","0,1492,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",3,"","-340,1832,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",4,"","-2172,1832,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",5,"","-2512,1492,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",6,"","-2512,-1492,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",7,"","-2172,-1832,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",8,"","-340,-1832,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/recreational/5_2stripclub.mdl","StephenTechno's Buildings","Stripclub",1,"","-268,736,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/recreational/5_2stripclub.mdl","StephenTechno's Buildings","Stripclub",2,"","-268,-736,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_1024_support.mdl","Transrapid","#",1,"","512,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_1024_support.mdl","Transrapid","#",2,"","-512,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_1024.mdl","Transrapid","#",1,"","512,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_1024.mdl","Transrapid","#",2,"","-512,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_128.mdl","Transrapid","#",1,"","64,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_128.mdl","Transrapid","#",2,"","-64,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_2048_support.mdl","Transrapid","#",1,"","1024,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_2048_support.mdl","Transrapid","#",2,"","-1024,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_2048.mdl","Transrapid","#",1,"","1024,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_2048.mdl","Transrapid","#",2,"","-1024,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_256.mdl","Transrapid","#",1,"","128,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_256.mdl","Transrapid","#",2,"","-128,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_4096_support.mdl","Transrapid","#",1,"","2048,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_4096_support.mdl","Transrapid","#",2,"","-2048,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_4096.mdl","Transrapid","#",1,"","2048,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_4096.mdl","Transrapid","#",2,"","-2048,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_512.mdl","Transrapid","#",1,"","256,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_512.mdl","Transrapid","#",2,"","-256,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/support/support_a.mdl","Transrapid","#",1,"","0,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/funnel.mdl","XQM Ball Rails","#",1,"","2.206,0.003,4.282","@90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/loop_left.mdl","XQM Ball Rails","#",1,"","13.7315,41.726,-0.968","0,22.5,-2.2585",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/loop_left.mdl","XQM Ball Rails","#",2,"","-13.7315,-41.726,-0.968","0,-157.5,-2.2585",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/loop_right.mdl","XQM Ball Rails","#",1,"","13.864,-41.787,-0.953","0,-22.5,2.433",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/loop_right.mdl","XQM Ball Rails","#",2,"","-13.562,41.789,-0.952","0,157.5,2.433",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_15.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_15.mdl","XQM Ball Rails","#",2,"","-20.245,-0.018,-4.13","@15,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_30.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_30.mdl","XQM Ball Rails","#",2,"","-32.078,0.022,-9.114","@30,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_45.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_45.mdl","XQM Ball Rails","#",2,"","-42.144,-0.011,-16.998","@45,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_90.mdl","XQM Ball Rails","#",1,"","38,0.019,30.42","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_90.mdl","XQM Ball Rails","#",2,"","-30.418,-0.009,-37.98","@90,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_15.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_15.mdl","XQM Ball Rails","#",2,"","-15.521,0.014,-1.009","@-15,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_30.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_30.mdl","XQM Ball Rails","#",2,"","-22.871,-0.019,2.152","@-30,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_45.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_45.mdl","XQM Ball Rails","#",2,"","-29.149,0.006,7.109","@-45,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_90.mdl","XQM Ball Rails","#",1,"","6.004,0.005,15.322","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_90.mdl","XQM Ball Rails","#",2,"","-44.066,-0.011,65.001","@-90,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_16.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_16.mdl","XQM Ball Rails","#",2,"","-186,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_1.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_1.mdl","XQM Ball Rails","#",2,"","-6,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_2.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_2.mdl","XQM Ball Rails","#",2,"","-18,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_4.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_4.mdl","XQM Ball Rails","#",2,"","-42,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_8.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_8.mdl","XQM Ball Rails","#",2,"","-90,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_16.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_16.mdl","XQM Ball Rails","#",2,"","-186,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_1.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_1.mdl","XQM Ball Rails","#",2,"","-6,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_2.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_2.mdl","XQM Ball Rails","#",2,"","-18,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_4.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_4.mdl","XQM Ball Rails","#",2,"","-42,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_8.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_8.mdl","XQM Ball Rails","#",2,"","-90,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_15.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_15.mdl","XQM Ball Rails","#",2,"","-17.591,3.105,-2.25","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_180.mdl","XQM Ball Rails","#",1,"","52.789,44.753,-2.273","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_180.mdl","XQM Ball Rails","#",2,"","-52.808,44.743,-2.238","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_30.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_30.mdl","XQM Ball Rails","#",2,"","-28.676,7.705,-2.252","0,150,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_45.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_45.mdl","XQM Ball Rails","#",2,"","-38.2,15.001,-2.261","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_90.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_90.mdl","XQM Ball Rails","#",2,"","-58.848,56.855,-2.255","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_45_left.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_45_left.mdl","XQM Ball Rails","#",2,"","-90,0,-2.25","0,180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_45_right.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_45_right.mdl","XQM Ball Rails","#",2,"","-90,0,-2.25","0,180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_90_left.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_90_left.mdl","XQM Ball Rails","#",2,"","-186,0,-2.25","0,180,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_90_right.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_90_right.mdl","XQM Ball Rails","#",2,"","-186,0,-2.25","0,180,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_1.mdl","XQM Coaster","#",1,"","150.199,0.032,4.885","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_1.mdl","XQM Coaster","#",2,"","-150.168,-0.014,4.881","0,180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_2.mdl","XQM Coaster","#",1,"","300.199,-0.011,4.895","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_2.mdl","XQM Coaster","#",2,"","-300.198,0.032,4.914","0,180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_3.mdl","XQM Coaster","#",1,"","449.378,-0.025,4.893","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_3.mdl","XQM Coaster","#",2,"","-449.801,0.018,4.896","0,180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_4.mdl","XQM Coaster","#",1,"","599.802,-0.013,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_4.mdl","XQM Coaster","#",2,"","-600.198,-0.015,4.902","0,-180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_1.mdl","XQM Coaster","#",1,"","149.7,-0.005,4.88","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_1.mdl","XQM Coaster","#",2,"","-149.7,0.024,4.865","0,180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_2.mdl","XQM Coaster","#",1,"","299.79,-0.021,4.885","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_2.mdl","XQM Coaster","#",2,"","-299.79,0.007,4.862","0,180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_3.mdl","XQM Coaster","#",1,"","449.8,-0.018,4.896","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_3.mdl","XQM Coaster","#",2,"","-449.802,-0.003,4.853","0,-180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_4.mdl","XQM Coaster","#",1,"","600.194,-0.017,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_4.mdl","XQM Coaster","#",2,"","-600.199,0.025,4.872","0,180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_1.mdl","XQM Coaster","#",1,"","73.8,14.45,4.887","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_1.mdl","XQM Coaster","#",2,"","73.46,-372.816,4.902","0,0,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_2.mdl","XQM Coaster","#",1,"","146.8,28.715,4.888","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_2.mdl","XQM Coaster","#",2,"","147.376,-737.938,4.911","0,0,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_3.mdl","XQM Coaster","#",1,"","220.191,43.001,4.907","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_3.mdl","XQM Coaster","#",2,"","220.813,-1105.46,4.883","0,0,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_4.mdl","XQM Coaster","#",1,"","293.308,-1472.996,4.916","0,0,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_4.mdl","XQM Coaster","#",2,"","292.8,57.26,4.89","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_1.mdl","XQM Coaster","#",1,"","74.199,14.457,4.888","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_1.mdl","XQM Coaster","#",2,"","-63.081,-42.297,4.912","0,-135,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_2.mdl","XQM Coaster","#",1,"","147.199,28.717,4.886","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_2.mdl","XQM Coaster","#",2,"","-124.087,-83.935,4.901","0,-135,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_3.mdl","XQM Coaster","#",1,"","219.8,42.98,4.887","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_3.mdl","XQM Coaster","#",2,"","-185.808,-125.258,4.908","0,-135,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_4.mdl","XQM Coaster","#",1,"","292.799,57.249,4.89","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_4.mdl","XQM Coaster","#",2,"","-247.727,-166.794,4.908","0,-135,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_1.mdl","XQM Coaster","#",1,"","73.8,14.448,4.895","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_1.mdl","XQM Coaster","#",2,"","-119.757,-178.862,4.909","0,-90,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_2.mdl","XQM Coaster","#",1,"","147.2,28.719,4.887","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_2.mdl","XQM Coaster","#",2,"","-235.985,-355.128,4.904","0,-90,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_3.mdl","XQM Coaster","#",1,"","220.199,42.985,4.89","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_3.mdl","XQM Coaster","#",2,"","-353.929,-531.719,4.91","0,-90,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_4.mdl","XQM Coaster","#",1,"","292.79,57.259,4.881","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_4.mdl","XQM Coaster","#",2,"","-471.864,-707.923,4.91","0,-90,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_1.mdl","XQM Coaster","#",1,"","75.79,-0.013,-2.414","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_1.mdl","XQM Coaster","#",2,"","-70.806,0,26.58","@-22.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_2.mdl","XQM Coaster","#",1,"","149.8,-0.013,-9.62","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_2.mdl","XQM Coaster","#",2,"","-141.814,0.004,48.442","@-22.5,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_3.mdl","XQM Coaster","#",1,"","225.199,-0.016,-16.814","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_3.mdl","XQM Coaster","#",2,"","-214.187,0.006,70.463","@-22.5,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_4.mdl","XQM Coaster","#",1,"","298.8,-0.013,-24.02","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_4.mdl","XQM Coaster","#",2,"","-285.799,0.019,92.158","@-22.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_1.mdl","XQM Coaster","#",1,"","-73.8,-0.013,11.999","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_1.mdl","XQM Coaster","#",2,"","72.814,-0.013,-16.992","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_2.mdl","XQM Coaster","#",1,"","-148.626,-0.013,19.51","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_2.mdl","XQM Coaster","#",2,"","134.806,-0.011,-36.762","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_3.mdl","XQM Coaster","#",1,"","-224.899,0.01,25.763","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_3.mdl","XQM Coaster","#",2,"","202.547,-0.014,-57.473","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_4.mdl","XQM Coaster","#",1,"","-300.319,0.017,32.11","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_4.mdl","XQM Coaster","#",2,"","268.6,0.052,-77.783","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_1.mdl","XQM Coaster","#",1,"","74.8,-0.013,-9.758","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_1.mdl","XQM Coaster","#",2,"","-59.846,0.021,45.855","@-45,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_2.mdl","XQM Coaster","#",1,"","-148.199,0.021,-24.085","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_2.mdl","XQM Coaster","#",2,"","121.828,-0.004,88.131","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_3.mdl","XQM Coaster","#",1,"","-221.204,0.005,-38.364","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_3.mdl","XQM Coaster","#",2,"","183.612,-0.018,129.084","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_4.mdl","XQM Coaster","#",1,"","-293.8,-0.013,-52.661","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_4.mdl","XQM Coaster","#",2,"","245.168,-0.007,170.857","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_1.mdl","XQM Coaster","#",1,"","-71.199,-0.013,18.809","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_1.mdl","XQM Coaster","#",2,"","63.815,-0.021,-37.126","@45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_2.mdl","XQM Coaster","#",1,"","-144.8,-0.013,33.103","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_2.mdl","XQM Coaster","#",2,"","125.217,-0.014,-78.778","@45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_3.mdl","XQM Coaster","#",1,"","217.199,-0.013,47.332","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_3.mdl","XQM Coaster","#",2,"","-187.587,0.003,-120.127","@45,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_4.mdl","XQM Coaster","#",1,"","290.79,-0.013,61.604","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_4.mdl","XQM Coaster","#",2,"","-249.142,0.017,-161.855","@45,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_1.mdl","XQM Coaster","#",1,"","75,-0.016,-9.757","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_1.mdl","XQM Coaster","#",2,"","-115.988,0.017,181.075","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_2.mdl","XQM Coaster","#",1,"","-148.198,-0.013,-24.085","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_2.mdl","XQM Coaster","#",2,"","233.158,0.013,358.192","@-90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_3.mdl","XQM Coaster","#",1,"","-221.1,-0.013,-38.366","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_3.mdl","XQM Coaster","#",2,"","351.2,-0.013,533.582","@-90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_4.mdl","XQM Coaster","#",1,"","-293.701,-0.013,-52.661","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_4.mdl","XQM Coaster","#",2,"","468.482,-0.013,710.225","@-90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_1.mdl","XQM Coaster","#",1,"","-70.793,-0.038,18.807","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_1.mdl","XQM Coaster","#",2,"","119.415,-0.013,-171.482","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_2.mdl","XQM Coaster","#",1,"","-144.804,-0.013,33.103","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_2.mdl","XQM Coaster","#",2,"","237.418,-0.013,-349.306","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_3.mdl","XQM Coaster","#",1,"","217.199,-0.013,47.332","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_3.mdl","XQM Coaster","#",2,"","-355.101,0.01,-524.496","@90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_4.mdl","XQM Coaster","#",1,"","290.8,-0.013,61.604","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_4.mdl","XQM Coaster","#",2,"","-473.228,-0.013,-701.956","@90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_1.mdl","XQM Coaster","#",1,"","149.695,-0.02,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_1.mdl","XQM Coaster","#",2,"","-2249.721,0.014,4.888","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_2.mdl","XQM Coaster","#",1,"","1350.218,0.029,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_2.mdl","XQM Coaster","#",2,"","-3450.199,-0.009,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_3.mdl","XQM Coaster","#",1,"","2550,-0.013,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_3.mdl","XQM Coaster","#",2,"","-4650.203,0.023,4.886","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_4.mdl","XQM Coaster","#",1,"","3749.804,-0.001,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_4.mdl","XQM Coaster","#",2,"","-5849.8,0.036,4.888","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_1.mdl","XQM Coaster","#",1,"","150,-0.013,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_1.mdl","XQM Coaster","#",2,"","-2250,-0.013,4.886","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_3.mdl","XQM Coaster","#",1,"","2550.2,-0.012,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_3.mdl","XQM Coaster","#",2,"","-4650.14,-0.013,4.886","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_4.mdl","XQM Coaster","#",1,"","3749.79,-0.019,4.879","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_4.mdl","XQM Coaster","#",2,"","-5849.795,0.008,4.884","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_loop_3.mdl","XQM Coaster","#",1,"","14.2,67.584,-279.931","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_loop_3.mdl","XQM Coaster","#",2,"","-0.172,-67.619,-279.937","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_loop_4.mdl","XQM Coaster","#",1,"","2.16,89.53,-307.495","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_loop_4.mdl","XQM Coaster","#",2,"","-18.191,-72.398,-307.642","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_1.mdl","XQM Coaster","#",1,"","150.079,-0.009,4.878","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_1.mdl","XQM Coaster","#",2,"","-1050.198,-0.036,4.877","0,180,-180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_2.mdl","XQM Coaster","#",1,"","299.8,-0.013,4.884","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_2.mdl","XQM Coaster","#",2,"","-2099.8,-0.013,4.883","0,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_3.mdl","XQM Coaster","#",1,"","449.801,-0.014,4.882","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_3.mdl","XQM Coaster","#",2,"","-3149.802,-0.028,4.871","0,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_4.mdl","XQM Coaster","#",1,"","599.801,-0.014,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_4.mdl","XQM Coaster","#",2,"","-4199.8,-0.013,4.881","0,-180,-180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_1.mdl","XQM Coaster","#",1,"","150.199,0.013,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_1.mdl","XQM Coaster","#",2,"","-1050.199,-0.01,4.886","0,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_2.mdl","XQM Coaster","#",1,"","1126.907,-0.013,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_2.mdl","XQM Coaster","#",2,"","-1272.492,-0.164,4.883","0,-180,-180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_3.mdl","XQM Coaster","#",1,"","1349.823,-0.012,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_3.mdl","XQM Coaster","#",2,"","-2249.7,-0.013,4.884","0,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_4.mdl","XQM Coaster","#",1,"","1950.199,-0.017,4.889","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_4.mdl","XQM Coaster","#",2,"","-2850.199,-0.047,4.88","0,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_2.mdl","XQM Coaster","#",1,"","189.277,59.435,41.118","0,90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_2.mdl","XQM Coaster","#",2,"","-192.302,46.789,-17.492","@22.5,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_3.mdl","XQM Coaster","#",1,"","-285.755,-96.647,32.538","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_3.mdl","XQM Coaster","#",2,"","281.393,-79.204,-55.216","@22.5,-90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_4.mdl","XQM Coaster","#",1,"","322.424,-72.015,15.907","0,-90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_4.mdl","XQM Coaster","#",2,"","-419.735,-44.894,132.706","@-22.5,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_2.mdl","XQM Coaster","#",1,"","-207.841,30.414,100.219","@-22.5,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_2.mdl","XQM Coaster","#",2,"","-207.993,7.31,-17.474","@22.5,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_3.mdl","XQM Coaster","#",1,"","281.359,-6.612,120.391","@-22.5,90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_3.mdl","XQM Coaster","#",2,"","281.371,28.004,-55.354","@22.5,-90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_4.mdl","XQM Coaster","#",1,"","322.609,52.146,251.028","0,90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_4.mdl","XQM Coaster","#",2,"","322.431,5.79,15.895","0,-90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_station.mdl","XQM Coaster","#",1,"","150.194,-0.045,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_station.mdl","XQM Coaster","#",2,"","-150.184,-0.045,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_2.mdl","XQM Coaster","#",1,"","149.8,36.553,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_2.mdl","XQM Coaster","#",2,"","-149.8,-36.54,4.886","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_3.mdl","XQM Coaster","#",1,"","225.159,36.552,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_3.mdl","XQM Coaster","#",2,"","-225.2,-36.559,4.886","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_4.mdl","XQM Coaster","#",1,"","299.8,36.623,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_4.mdl","XQM Coaster","#",2,"","-299.8,-36.6,4.886","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_2.mdl","XQM Coaster","#",1,"","150.189,-36.538,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_2.mdl","XQM Coaster","#",2,"","-150.199,36.554,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_3.mdl","XQM Coaster","#",1,"","225.199,-36.549,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_3.mdl","XQM Coaster","#",2,"","-225.099,36.55,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_4.mdl","XQM Coaster","#",1,"","300.2,-36.649,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_4.mdl","XQM Coaster","#",2,"","-300.195,36.561,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_1.mdl","XQM Coaster","#",1,"","74.802,-0.013,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_1.mdl","XQM Coaster","#",2,"","-74.803,-0.013,4.886","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_2.mdl","XQM Coaster","#",1,"","149.805,-0.013,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_2.mdl","XQM Coaster","#",2,"","-149.805,-0.013,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_3.mdl","XQM Coaster","#",1,"","225.206,-0.013,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_3.mdl","XQM Coaster","#",2,"","-225.196,-0.013,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_4.mdl","XQM Coaster","#",1,"","300.164,-0.013,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_4.mdl","XQM Coaster","#",2,"","-300.189,-0.013,4.887","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_1.mdl","XQM Coaster","#",1,"","72.8,367.527,4.894","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_1.mdl","XQM Coaster","#",2,"","72.8,-14.286,4.894","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_2.mdl","XQM Coaster","#",1,"","146.198,-28.561,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_2.mdl","XQM Coaster","#",2,"","146.041,735.053,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_3.mdl","XQM Coaster","#",1,"","218.767,-42.833,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_3.mdl","XQM Coaster","#",2,"","218.767,1100.169,4.91","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_4.mdl","XQM Coaster","#",1,"","292.283,-57.102,4.896","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_4.mdl","XQM Coaster","#",2,"","292.283,1468.9,4.896","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_2.mdl","XQM Coaster","#",1,"","93.769,96.842,4.9","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_2.mdl","XQM Coaster","#",2,"","-93.912,96.841,4.9","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_3.mdl","XQM Coaster","#",1,"","138.58,144.2,4.906","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_3.mdl","XQM Coaster","#",2,"","-142.846,144.192,4.888","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_4.mdl","XQM Coaster","#",1,"","184.588,191.8,4.905","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_4.mdl","XQM Coaster","#",2,"","-190.323,191.8,4.905","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_1.mdl","XQM Coaster","#",1,"","73.232,-14.287,4.894","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_1.mdl","XQM Coaster","#",2,"","-62.119,41.771,4.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_2.mdl","XQM Coaster","#",1,"","145.801,-28.557,4.893","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_2.mdl","XQM Coaster","#",2,"","-123.848,83.091,4.921","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_3.mdl","XQM Coaster","#",1,"","218.8,-42.829,4.899","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_3.mdl","XQM Coaster","#",2,"","-184.844,124.707,4.88","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_4.mdl","XQM Coaster","#",1,"","292.197,-57.102,4.896","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_4.mdl","XQM Coaster","#",2,"","-246.823,166.305,4.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_1.mdl","XQM Coaster","#",1,"","73.199,-14.286,4.894","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_1.mdl","XQM Coaster","#",2,"","-117.904,176.785,4.888","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_2.mdl","XQM Coaster","#",1,"","145.748,-28.566,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_2.mdl","XQM Coaster","#",2,"","-235.851,352.965,4.883","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_3.mdl","XQM Coaster","#",1,"","219.199,-42.829,4.9","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_3.mdl","XQM Coaster","#",2,"","-352.072,529.25,4.888","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_4.mdl","XQM Coaster","#",1,"","292.695,-57.102,4.897","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_4.mdl","XQM Coaster","#",2,"","-470.379,706.175,4.887","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_1.mdl","XQM Coaster","#",1,"","68.201,-27.47,4.907","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_1.mdl","XQM Coaster","#",2,"","-27.469,68.408,4.907","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_2.mdl","XQM Coaster","#",1,"","134.784,-54.932,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_2.mdl","XQM Coaster","#",2,"","-54.9,134.79,4.908","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_3.mdl","XQM Coaster","#",1,"","203.169,-82.386,4.885","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_3.mdl","XQM Coaster","#",2,"","-82.342,203.198,4.884","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_4.mdl","XQM Coaster","#",1,"","270.8,-109.856,4.889","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_4.mdl","XQM Coaster","#",2,"","-109.812,270.799,4.89","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_1.mdl","XQM Coaster","#",1,"","61.949,-171.786,-85.113","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_1.mdl","XQM Coaster","#",2,"","61.849,210.026,94.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_2.mdl","XQM Coaster","#",1,"","145.79,-377.307,-51.364","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_2.mdl","XQM Coaster","#",2,"","145.64,386.277,128.636","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_3.mdl","XQM Coaster","#",1,"","219.186,-560.329,-73.863","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_3.mdl","XQM Coaster","#",2,"","219.938,582.673,106.137","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_4.mdl","XQM Coaster","#",1,"","292.682,-57.062,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_4.mdl","XQM Coaster","#",2,"","292.882,1468.926,184.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_1.mdl","XQM Coaster","#",1,"","73.214,-14.287,4.889","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_1.mdl","XQM Coaster","#",2,"","-62.103,41.809,49.893","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_2.mdl","XQM Coaster","#",1,"","145.789,-28.557,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_2.mdl","XQM Coaster","#",2,"","-123.816,83.09,49.885","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_3.mdl","XQM Coaster","#",1,"","218.817,-42.829,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_3.mdl","XQM Coaster","#",2,"","-184.823,124.712,49.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_4.mdl","XQM Coaster","#",1,"","292.295,-57.102,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_4.mdl","XQM Coaster","#",2,"","-246.825,166.303,49.887","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_1.mdl","XQM Coaster","#",1,"","151.949,-115.536,-28.863","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_1.mdl","XQM Coaster","#",2,"","-39.186,75.539,61.137","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_2.mdl","XQM Coaster","#",1,"","247.052,-129.807,-17.611","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_2.mdl","XQM Coaster","#",2,"","-134.631,251.731,72.387","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_3.mdl","XQM Coaster","#",1,"","342.55,-166.589,-6.356","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_3.mdl","XQM Coaster","#",2,"","-228.353,405.104,83.627","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_4.mdl","XQM Coaster","#",1,"","461.445,-180.852,-6.363","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_4.mdl","XQM Coaster","#",2,"","-301.622,582.445,83.635","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_1.mdl","XQM Coaster","#",1,"","73.2,-149.286,128.637","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_1.mdl","XQM Coaster","#",2,"","73.099,232.527,-51.363","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_2.mdl","XQM Coaster","#",1,"","145.8,-287.306,117.387","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_2.mdl","XQM Coaster","#",2,"","145.6,476.307,-62.612","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_3.mdl","XQM Coaster","#",1,"","219.196,-391.579,117.387","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_3.mdl","XQM Coaster","#",2,"","219.948,751.399,-62.61","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_4.mdl","XQM Coaster","#",1,"","292.681,-630.852,117.391","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_4.mdl","XQM Coaster","#",2,"","292.833,895.14,-62.613","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_1.mdl","XQM Coaster","#",1,"","73.199,-14.286,49.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_1.mdl","XQM Coaster","#",2,"","-62.097,41.783,4.886","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_2.mdl","XQM Coaster","#",1,"","145.79,-28.558,49.879","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_2.mdl","XQM Coaster","#",2,"","-123.833,83.088,4.892","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_3.mdl","XQM Coaster","#",1,"","219.197,-42.829,49.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_3.mdl","XQM Coaster","#",2,"","-185.095,124.99,4.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_4.mdl","XQM Coaster","#",1,"","292.695,-57.102,49.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_4.mdl","XQM Coaster","#",2,"","-247.123,166.602,4.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_1.mdl","XQM Coaster","#",1,"","128.858,-14.281,72.387","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_1.mdl","XQM Coaster","#",2,"","-61.682,176.749,-17.61","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_2.mdl","XQM Coaster","#",1,"","179.55,-28.557,61.136","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_2.mdl","XQM Coaster","#",2,"","-202.131,352.976,-28.864","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_3.mdl","XQM Coaster","#",1,"","241.3,-42.829,61.136","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_3.mdl","XQM Coaster","#",2,"","-329.578,528.859,-28.864","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_4.mdl","XQM Coaster","#",1,"","292.296,-57.102,94.89","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_4.mdl","XQM Coaster","#",2,"","-470.372,705.791,4.886","0,90,0",""}) diff --git a/data/trackassembly/exp/cl_trackassembly_additions.txt b/data/trackassembly/exp/cl_trackassembly_additions.txt new file mode 100644 index 00000000..4658e82e --- /dev/null +++ b/data/trackassembly/exp/cl_trackassembly_additions.txt @@ -0,0 +1,8 @@ +#1 ExportDSV:(cl_@ADDITIONS) 24-10-30 22:25:29 [ LUA ] +#2 ADDITIONS:( MODELBASE MODELADD ENTCLASS LINEID POSOFF ANGOFF MOVETYPE PHYSINIT DRSHADOW PHMOTION PHYSLEEP SETSOLID) +TRACKASSEMBLY_ADDITIONS models/shinji85/train/rail_l_switch.mdl "models/shinji85/train/sw_lever.mdl" "buttonswitch" 1 "-100,-125,0" "0,180,0" -1 -1 -1 0 -1 -1 +TRACKASSEMBLY_ADDITIONS models/shinji85/train/rail_l_switch.mdl "models/shinji85/train/rail_l_switcher1.mdl" "prop_dynamic" 2 "NULL" "NULL" 6 6 -1 -1 1 6 +TRACKASSEMBLY_ADDITIONS models/shinji85/train/rail_l_switch.mdl "models/shinji85/train/rail_l_switcher2.mdl" "prop_dynamic" 3 "NULL" "NULL" 6 6 -1 0 -1 0 +TRACKASSEMBLY_ADDITIONS models/shinji85/train/rail_r_switch.mdl "models/shinji85/train/sw_lever.mdl" "buttonswitch" 1 "-100,125,0" "NULL" -1 -1 -1 0 -1 -1 +TRACKASSEMBLY_ADDITIONS models/shinji85/train/rail_r_switch.mdl "models/shinji85/train/rail_r_switcher1.mdl" "prop_dynamic" 2 "NULL" "NULL" 6 6 -1 -1 1 6 +TRACKASSEMBLY_ADDITIONS models/shinji85/train/rail_r_switch.mdl "models/shinji85/train/rail_r_switcher2.mdl" "prop_dynamic" 3 "NULL" "NULL" 6 6 -1 0 -1 0 diff --git a/data/trackassembly/exp/cl_trackassembly_category.txt b/data/trackassembly/exp/cl_trackassembly_category.txt new file mode 100644 index 00000000..7283c783 --- /dev/null +++ b/data/trackassembly/exp/cl_trackassembly_category.txt @@ -0,0 +1,203 @@ +# ExportCategory:(3@cl_) 24-10-30 22:25:29 [ LUA ] +[===[SligWolf's Modelpack===function(m) local s, c; s = _G.SligWolf_Addons; c = s and s.CallFunctionOnAddon("modelpack", "TrackAssamblerCategory", m); return c; end]===] +[===[Portal 2 Walkway UG===function(m) + local g = m:gsub("models/props_underground/", "") return g:match("%w+") end]===] +[===[Battleship's abandoned rails===function(m) + local g = m:gsub("models/craptrax/","") + local r = g:match(".+/"):sub(1, -2) + local n = g:match("[\\/]([^\\/]+)$"):gsub("%.mdl","") + if(r:find("straight")) then r = "straight" + elseif(r:find("curve")) then r = "curve" + elseif(r:find("switch")) then r = "switch" end + local t = n:match(r.."_") + if(t) then n = n:gsub(t,"") end; return r, n; end]===] +[===[Ron's 2ft track pack===function(m) +local function conv(x) return " "..x:sub(2,2):upper() end +local r = m:gsub("models/ron/2ft/","") +local s, o, n = r:find("/") +local g = s and r:sub(1,s-1) or "other" +if(g == "luajunctions") then +o = {g}; local e +n = m:gsub("models/ron/2ft/luajunctions/","") +n = n:gsub("/junction.mdl",""):gsub("junctions/","junction_") +e = n:find("/"); n = e and n:sub(1,e-1) or n +elseif(g == "straight") then +n, o = r:sub(s+1,-1):gsub("straight_",""):gsub("%.mdl",""), {g} +elseif(g == "embankment") then +local e = r:sub(s+1,-1):gsub("embankment_","") +local s = e:find("%A") +n, o = e:gsub("%.mdl",""), {g,((s > 1) and (e:sub(1,s-1)) or nil)} +elseif(g == "ramps") then +n, o = r:sub(s+1,-1):gsub("ramp_",""):gsub("%.mdl",""), {g} +elseif(g == "tram") then +n, o = r:sub(s+1,-1):gsub("tram_",""):gsub("%.mdl",""), {g} +elseif(g == "turntable") then +n, o = r:sub(s+1,-1):gsub("turntable_",""):gsub("%.mdl",""), {g} +elseif(g == "viaduct") then +n, o = r:sub(s+1,-1):gsub("viaduct_",""):gsub("%.mdl",""), {g} +elseif(g == "road_crossings") then +n, o = r:sub(s+1,-1):gsub("road_",""):gsub("%.mdl",""), {g} +elseif(g == "curves") then +n, o = r:sub(s+1,-1):gsub("curve_",""):gsub("%.mdl",""), {g} +else o = {g} end; n = n and ("_"..n):gsub("_%w",conv):sub(2,-1) +for i = 1, #o do o[i] = ("_"..o[i]):gsub("_%w", conv):sub(2,-1) end; return o, n end]===] +[===[SligWolf's Mini Trains===function(m) local s, c; s = _G.SligWolf_Addons; c = s and s.CallFunctionOnAddon("minitrains", "TrackAssamblerCategory", m); return c; end]===] +[===[Magnum's Rails===function(m) + local g = m:gsub("models/magtrains1ga/",""):gsub("/","_") + local r = g:match(".-_"):sub(1, -2); g = g:gsub(r.."_", "") + local t, n = g:match(".-_"), g:gsub("%.mdl","") + if(t) then t = t:sub(1, -2); g = g:gsub(r.."_", "") + if(r:find(t)) then n = n:gsub(t.."_", "") end + end; if(r:find("switchbase")) then r = "switch" end; return r, n end]===] +[===[Ron's G Scale Track pack===function(m) +local function conv(x) return " "..x:sub(2,2):upper() end +local r = m:gsub("models/ron/gscale/",""):gsub("_","/") +local s = r:find("/"); r = (s and r:sub(1,s-1):gsub("^%l", string.upper) or nil); +return r and {r} or nil end]===] +[===[AlexCookie's 2ft track pack===function(m) + local g = m:gsub("models/alexcookie/2ft/","") + local r = g:match(".+/"):sub(1, -2) + local n = g:match("[\\/]([^\\/]+)$"):gsub("%.mdl","") + local t = n:match(r.."_"); if(t) then n = n:gsub(t,"") end; return r, n; end]===] +[===[Ron's Minitrain Props===function(m) + local g = m:gsub("models/ron/minitrains/","") + local r = g:match(".-/"):sub(1, -2) + if(r == "elevations") then + local s = g:gsub(r.."/", ""):gsub("/.+$", "") + local n = g:match("[\\/]([^/\\]+)$"):gsub("%.mdl","") + local p = n:match(".-_") + if(p) then p = p:sub(1, -2) + if(r:find(p)) then n = n:gsub(p, ""):sub(2,-1) end + end; return {r, s}, n; end; return r; end]===] +[===[SligWolf's Suspension Train===function(m) local s, c; s = _G.SligWolf_Addons; c = s and s.CallFunctionOnAddon("wpsuspensiontrain", "TrackAssamblerCategory", m); return c; end]===] +[===[StevenTechno's Buildings 2.0===function(m) + local g = m:gsub("models/","") + local r = g:match(".+/"):sub(1, -2) + local n = g:match("[\\/]([^\\/]+)$"):gsub("%.mdl","") + local t = r:find("/") + if(t) then r, g = r:sub(1, t-1), r:sub(t+1, -1) + if(r:find("road")) then r = "roads" + elseif(r:find("building")) then r = "buildings" end + return {r, g}, n end; return r, n; end]===] +[===[Shinji85's Rails===function(m) local c +local r = m:gsub("models/shinji85/train/rail_", "") +if(r:find("cross")) then c = "crossing" +elseif(r:find("switch")) then c = "switch" +elseif(r:find("curve")) then c = "curve" +elseif(r:find("bumper")) then c = "bumper" +elseif(r:find("junction")) then c = "junction" +elseif(r:find("%dx")) then c = "straight" end; return c end]===] +[===[StevenTechno's Buildings 1.0===function(m) + local r = m:gsub("models/buildingspack/",""):gsub("%W.+$","") + if (r:find("emptylots")) then r = "empty_lots" + elseif(r:find("roadsdw")) then r = r:gsub("roadsdw","double_") + elseif(r:find("roadsw" )) then r = r:gsub("roadsw" ,"single_") end; return r; end]===] +[===[PHX Tubes Miscellaneous===function(m) + local g = m:gsub("models/props_phx/construct/",""):gsub("/","_") + local r = g:match(".-_"):sub(1, -2); g = g:gsub(r.."_", "") + local t, n = g:match(".-_"), g:gsub("%.mdl","") + if(t) then t = t:sub(1, -2); g = g:gsub(r.."_", "") + if(r:find(t)) then n = n:gsub(t.."_", "") end + end; return r, n; end]===] +[===[XQM Ball Rails===function(m) + local g = m:gsub("models/xqm/rails/",""):gsub("/","_") + local r = g:match(".-_"):sub(1, -2); g = g:gsub(r.."_", "") + local t, n = g:match(".-_"), g:gsub("%.mdl","") + if(t) then t = t:sub(1, -2); g = g:gsub(r.."_", "") + if(r:find(t)) then n = n:gsub(t.."_", "") + end; end; return r, n; end]===] +[===[PHX Tubes Plastic===function(m) + local g = m:gsub("models/hunter/",""):gsub("/","_") + local r = g:match(".-_"):sub(1, -2); return r end]===] +[===[SProps===function(m) + local r = m:gsub("models/sprops/trans/train/",""):gsub("track_",""):sub(1,1) + if(r == "s") then return "straight" elseif(r == "t") then return "turn" + elseif(r == "h") then return "ramp" else return nil end end]===] +[===[Modular City Street===function(m) + local o = {} + function setBranch(v, p, b, q) + if(v:find(p)) then + local e = v:gsub("%W*"..p.."%W*", "_") + if(b and o.M) then return e end + if(b and not o.M) then o.M = true end + table.insert(o, (q or p)); return e + end; return v + end +local r = m:gsub("models/propper/dingles_modular_streets/",""):gsub("%.mdl$",""); +r = setBranch(r, "highway", true, nil) +r = setBranch(r, "street", true, nil) +r = setBranch(r, "endcap", false, nil) +r = setBranch(r, "turn", false, nil) +r = setBranch(r, "ramp", false, nil) +r = setBranch(r, "connector", false, nil) +r = setBranch(r, "tjunction", false, nil) +r = setBranch(r, "intersection", false, nil) +r = setBranch(r, "elevated", false, nil) +o.M = nil; return o, r:gsub("^_+", ""):gsub("_+$", ""):gsub("_+", "_") end]===] +[===[Anyone's Horrible Trackpack===function(m) local c +local r = m:gsub("anytracks/", "") +if(r:find("straight")) then c = "straight" +elseif(r:find("curve")) then c = "curve" +elseif(r:find("%dx")) then c = "straight" +end; c = (c and c:gsub("^%l", string.upper) or nil) return c end]===] +[===[RockMan's Fortification===function(m) + local r = m:gsub(".+/", ""):gsub("_.*",""); return r end]===] +[===[XQM Coaster===function(m) + local g = m:gsub("models/xqm/coastertrack/",""):gsub("%.mdl","") + local r = g:match(".-_"):sub(1,-2) + local n = g:gsub(r.."_", ""); return r, n; end]===] +[===[Portal 2 High Walkway===function(m) + local g = m:gsub("^.*walkway",""):gsub("%.mdl$", "") + if(g:find("%d")) then return "straight" + elseif(g:find("%a+_*")) then local s = g:match("%a+_*") + if(s:len() <= 2) then return "turns" else return "special" end + else return nil end end]===] +[===[Transrapid===function(m) + local g = m:gsub("models/ron/maglev/",""):gsub("/","_") + g = g:gsub("[\\/]([^\\/]+)$",""):gsub("%.mdl","") + local r = g:match(".-_"):sub(1, -2) + if(r == "track") then g = g:gsub(r.."_", "") + r = g:match(".-_"):sub(1, -2) else return nil end + local t, n = g:match(".-_"), g:gsub(r.."_", "") + if(t) then t = t:sub(1, -2); g = g:gsub(t.."_", "") + if(r:find(t)) then n = n:gsub(t.."_", "") end + end; return r, n; end]===] +[===[Joe's track pack===function(m) + local g = m:gsub("models/joe/jtp/","") + local r = g:match(".+/"):sub(1, -2) + local n = g:match("[\\/]([^\\/]+)$"):gsub("%.mdl","") + local t = r:find("/") + if(t) then return {r:sub(1, t-1), r:sub(t+1, -1)}, n end; return r, n; end]===] +[===[Mr.Train's G-Gauge===function(m) + local r = m:gsub("models/props/g_gauge/track/g_gauge_track_","") + local n = r:gsub("%.mdl",""); r = r:gsub("%W.+$","") + n = n:gsub(r.."_", ""); if(r == "s") then r = "curves" end; return r, n end]===] +[===[Modular Canals===function(m) + local n = m:gsub("models/props_d47_canals/interior_","") + local r = n:match("%a+"); n = n:gsub("%.mdl",""); return r, n; end]===] +[===[SligWolf's Tiny Hover Racer===function(m) local s, c; s = _G.SligWolf_Addons; c = s and s.CallFunctionOnAddon("tinyhoverracer", "TrackAssamblerCategory", m); return c; end]===] +[===[Trackmania United Props===function(m) + local g = m:gsub("models/nokillnando/trackmania/ground/", "") + local r = g:match(".+/"):sub(1,-2); return r; end]===] +[===[Bobster's two feet rails===function(m) local o = {} + local n = m:gsub("models/bobsters_trains/rails/2ft/","") + local r = n:match("^%a+"); n = n:gsub("%.mdl","") + for w in n:gmatch("%a+") do + if(r:find(w)) then n = n:gsub(w.."%W+", "") end + end table.insert(o, r); local f = n:match("^%a+") + if(f) then table.insert(o, f); n = n:gsub(f.."%W+", "") end; return o, n; end]===] +[===[Mr.Train's M-Gauge===function(m) + local r = m:gsub("models/props/m_gauge/track/m_gauge_","") + local n = r:gsub("%.mdl", ""); r = r:gsub("%W.+$","") + if(tonumber(r:sub(1,1))) then r = "straight" else n = n:gsub(r.."_", "") end; return r, n; end]===] +[===[G Scale Track Pack===function(m) + local g = m:gsub("models/gscale/","") + local r = g:match(".-/"):sub(1, -2) + if (r == "j") then r = "j switcher" + elseif(r == "s") then r = "s switcher" + elseif(r == "c0512") then r = "curve 512" + elseif(r == "ibeam") then r = "iron beam" + elseif(r == "ramp313") then r = "ramp 313" end; return r; end]===] +[===[CAP Walkway===function(m) + local g = m:gsub("models/boba_fett/catwalk_build/", "") + local p = g:match("%w+_"); return (p and p:sub(1,-2) or "other") end]===] diff --git a/data/trackassembly/exp/cl_trackassembly_physproperties.txt b/data/trackassembly/exp/cl_trackassembly_physproperties.txt new file mode 100644 index 00000000..81b0601e --- /dev/null +++ b/data/trackassembly/exp/cl_trackassembly_physproperties.txt @@ -0,0 +1,91 @@ +#1 ExportDSV:(cl_@PHYSPROPERTIES) 24-10-30 22:25:29 [ LUA ] +#2 PHYSPROPERTIES:( TYPE LINEID NAME) +TRACKASSEMBLY_PHYSPROPERTIES "Special" 1 "default" +TRACKASSEMBLY_PHYSPROPERTIES "Special" 2 "default_silent" +TRACKASSEMBLY_PHYSPROPERTIES "Special" 3 "floatingstandable" +TRACKASSEMBLY_PHYSPROPERTIES "Special" 4 "item" +TRACKASSEMBLY_PHYSPROPERTIES "Special" 5 "ladder" +TRACKASSEMBLY_PHYSPROPERTIES "Special" 6 "no_decal" +TRACKASSEMBLY_PHYSPROPERTIES "Special" 7 "player" +TRACKASSEMBLY_PHYSPROPERTIES "Special" 8 "player_control_clip" +TRACKASSEMBLY_PHYSPROPERTIES "Concrete" 1 "brick" +TRACKASSEMBLY_PHYSPROPERTIES "Concrete" 2 "concrete" +TRACKASSEMBLY_PHYSPROPERTIES "Concrete" 3 "concrete_block" +TRACKASSEMBLY_PHYSPROPERTIES "Concrete" 4 "gravel" +TRACKASSEMBLY_PHYSPROPERTIES "Concrete" 5 "rock" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 1 "canister" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 2 "chain" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 3 "chainlink" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 4 "combine_metal" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 5 "crowbar" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 6 "floating_metal_barrel" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 7 "grenade" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 8 "gunship" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 9 "metal" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 10 "metal_barrel" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 11 "metal_bouncy" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 12 "Metal_Box" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 13 "metal_seafloorcar" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 14 "metalgrate" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 15 "metalpanel" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 16 "metalvent" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 17 "metalvehicle" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 18 "paintcan" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 19 "popcan" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 20 "roller" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 21 "slipperymetal" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 22 "solidmetal" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 23 "strider" +TRACKASSEMBLY_PHYSPROPERTIES "Metal" 24 "weapon" +TRACKASSEMBLY_PHYSPROPERTIES "Wood" 1 "wood" +TRACKASSEMBLY_PHYSPROPERTIES "Wood" 2 "Wood_Box" +TRACKASSEMBLY_PHYSPROPERTIES "Wood" 3 "Wood_Furniture" +TRACKASSEMBLY_PHYSPROPERTIES "Wood" 4 "Wood_Plank" +TRACKASSEMBLY_PHYSPROPERTIES "Wood" 5 "Wood_Panel" +TRACKASSEMBLY_PHYSPROPERTIES "Wood" 6 "Wood_Solid" +TRACKASSEMBLY_PHYSPROPERTIES "Terrain" 1 "dirt" +TRACKASSEMBLY_PHYSPROPERTIES "Terrain" 2 "grass" +TRACKASSEMBLY_PHYSPROPERTIES "Terrain" 3 "gravel" +TRACKASSEMBLY_PHYSPROPERTIES "Terrain" 4 "mud" +TRACKASSEMBLY_PHYSPROPERTIES "Terrain" 5 "quicksand" +TRACKASSEMBLY_PHYSPROPERTIES "Terrain" 6 "sand" +TRACKASSEMBLY_PHYSPROPERTIES "Terrain" 7 "slipperyslime" +TRACKASSEMBLY_PHYSPROPERTIES "Terrain" 8 "antlionsand" +TRACKASSEMBLY_PHYSPROPERTIES "Liquid" 1 "slime" +TRACKASSEMBLY_PHYSPROPERTIES "Liquid" 2 "water" +TRACKASSEMBLY_PHYSPROPERTIES "Liquid" 3 "wade" +TRACKASSEMBLY_PHYSPROPERTIES "Frozen" 1 "snow" +TRACKASSEMBLY_PHYSPROPERTIES "Frozen" 2 "ice" +TRACKASSEMBLY_PHYSPROPERTIES "Frozen" 3 "gmod_ice" +TRACKASSEMBLY_PHYSPROPERTIES "Miscellaneous" 1 "carpet" +TRACKASSEMBLY_PHYSPROPERTIES "Miscellaneous" 2 "ceiling_tile" +TRACKASSEMBLY_PHYSPROPERTIES "Miscellaneous" 3 "computer" +TRACKASSEMBLY_PHYSPROPERTIES "Miscellaneous" 4 "pottery" +TRACKASSEMBLY_PHYSPROPERTIES "Organic" 1 "alienflesh" +TRACKASSEMBLY_PHYSPROPERTIES "Organic" 2 "antlion" +TRACKASSEMBLY_PHYSPROPERTIES "Organic" 3 "armorflesh" +TRACKASSEMBLY_PHYSPROPERTIES "Organic" 4 "bloodyflesh" +TRACKASSEMBLY_PHYSPROPERTIES "Organic" 5 "flesh" +TRACKASSEMBLY_PHYSPROPERTIES "Organic" 6 "foliage" +TRACKASSEMBLY_PHYSPROPERTIES "Organic" 7 "watermelon" +TRACKASSEMBLY_PHYSPROPERTIES "Organic" 8 "zombieflesh" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 1 "jeeptire" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 2 "jalopytire" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 3 "rubber" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 4 "rubbertire" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 5 "slidingrubbertire" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 6 "slidingrubbertire_front" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 7 "slidingrubbertire_rear" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 8 "brakingrubbertire" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 9 "tile" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 10 "paper" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 11 "papercup" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 12 "cardboard" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 13 "plaster" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 14 "plastic_barrel" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 15 "plastic_barrel_buoyant" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 16 "Plastic_Box" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 17 "plastic" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 18 "glass" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 19 "glassbottle" +TRACKASSEMBLY_PHYSPROPERTIES "Manufactured" 20 "combine_glass" diff --git a/data/trackassembly/exp/cl_trackassembly_pieces.txt b/data/trackassembly/exp/cl_trackassembly_pieces.txt new file mode 100644 index 00000000..660dfac4 --- /dev/null +++ b/data/trackassembly/exp/cl_trackassembly_pieces.txt @@ -0,0 +1,4228 @@ +#1 ExportDSV:(cl_@PIECES) 24-10-30 22:25:29 [ LUA ] +#2 PIECES:( MODEL TYPE NAME LINEID POINT ORIGIN ANGLE CLASS) +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/curve/curve_90_512.mdl" "AlexCookie's 2ft track pack" "Curve 90 512" 1 "NULL" "0,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/curve/curve_90_512.mdl" "AlexCookie's 2ft track pack" "Curve 90 512" 2 "NULL" "-480,-480,13.04688" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/misc/end1.mdl" "AlexCookie's 2ft track pack" "End1" 1 "NULL" "0,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_1024.mdl" "AlexCookie's 2ft track pack" "Straight 1024" 1 "NULL" "1024,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_1024.mdl" "AlexCookie's 2ft track pack" "Straight 1024" 2 "NULL" "0 ,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_128.mdl" "AlexCookie's 2ft track pack" "Straight 128" 1 "NULL" "128,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_128.mdl" "AlexCookie's 2ft track pack" "Straight 128" 2 "NULL" "0 ,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_256.mdl" "AlexCookie's 2ft track pack" "Straight 256" 1 "NULL" "256,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_256.mdl" "AlexCookie's 2ft track pack" "Straight 256" 2 "NULL" "0 ,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_32.mdl" "AlexCookie's 2ft track pack" "Straight 32" 1 "NULL" "32,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_32.mdl" "AlexCookie's 2ft track pack" "Straight 32" 2 "NULL" "0 ,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_512.mdl" "AlexCookie's 2ft track pack" "Straight 512" 1 "NULL" "512,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_512.mdl" "AlexCookie's 2ft track pack" "Straight 512" 2 "NULL" "0 ,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_64.mdl" "AlexCookie's 2ft track pack" "Straight 64" 1 "NULL" "64,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/straight/straight_64.mdl" "AlexCookie's 2ft track pack" "Straight 64" 2 "NULL" "0 ,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_left_0.mdl" "AlexCookie's 2ft track pack" "Switch 90 Left 0" 1 "NULL" "0,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_left_0.mdl" "AlexCookie's 2ft track pack" "Switch 90 Left 0" 2 "NULL" "-512,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_left_0.mdl" "AlexCookie's 2ft track pack" "Switch 90 Left 0" 3 "NULL" "-480,-480,13.04688" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_left_1.mdl" "AlexCookie's 2ft track pack" "Switch 90 Left 1" 1 "NULL" "0,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_left_1.mdl" "AlexCookie's 2ft track pack" "Switch 90 Left 1" 2 "NULL" "-512,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_left_1.mdl" "AlexCookie's 2ft track pack" "Switch 90 Left 1" 3 "NULL" "-480,-480,13.04688" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_right_0.mdl" "AlexCookie's 2ft track pack" "Switch 90 Right 0" 1 "NULL" "0,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_right_0.mdl" "AlexCookie's 2ft track pack" "Switch 90 Right 0" 2 "NULL" "-512,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_right_0.mdl" "AlexCookie's 2ft track pack" "Switch 90 Right 0" 3 "NULL" "-480,480,13.04688" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_right_1.mdl" "AlexCookie's 2ft track pack" "Switch 90 Right 1" 1 "NULL" "0,0,13.04688" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_right_1.mdl" "AlexCookie's 2ft track pack" "Switch 90 Right 1" 2 "NULL" "-512,0,13.04688" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/alexcookie/2ft/switch/switch_90_right_1.mdl" "AlexCookie's 2ft track pack" "Switch 90 Right 1" 3 "NULL" "-480,480,13.04688" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_1024.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 1024" 1 "NULL" "0,512,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_1024.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 1024" 2 "NULL" "0,-512,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_128.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 128" 1 "NULL" "0,64,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_128.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 128" 2 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_2048.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 2048" 1 "NULL" "0,1024,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_2048.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 2048" 2 "NULL" "0,-1024,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_256.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 256" 1 "NULL" "0,128,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_256.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 256" 2 "NULL" "0,-128,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_512.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 512" 1 "NULL" "0,256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_512.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 512" 2 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_64.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 64" 1 "NULL" "0,32,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/hs_64.mdl" "Anyone's Horrible Trackpack" "Horrible Straight 64" 2 "NULL" "0,-32,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_1024.mdl" "Anyone's Horrible Trackpack" "Straight 1024" 1 "NULL" "0,512,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_1024.mdl" "Anyone's Horrible Trackpack" "Straight 1024" 2 "NULL" "0,-512,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_128.mdl" "Anyone's Horrible Trackpack" "Straight 128" 1 "NULL" "0,64,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_128.mdl" "Anyone's Horrible Trackpack" "Straight 128" 2 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_2048.mdl" "Anyone's Horrible Trackpack" "Straight 2048" 1 "NULL" "0,1024,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_2048.mdl" "Anyone's Horrible Trackpack" "Straight 2048" 2 "NULL" "0,-1024,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_256.mdl" "Anyone's Horrible Trackpack" "Straight 256" 1 "NULL" "0,128,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_256.mdl" "Anyone's Horrible Trackpack" "Straight 256" 2 "NULL" "0,-128,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_32.mdl" "Anyone's Horrible Trackpack" "Straight 32" 1 "NULL" "0,16,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_32.mdl" "Anyone's Horrible Trackpack" "Straight 32" 2 "NULL" "0,-16,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_4096.mdl" "Anyone's Horrible Trackpack" "Straight 4096" 1 "NULL" "0,2048,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_4096.mdl" "Anyone's Horrible Trackpack" "Straight 4096" 2 "NULL" "0,-2048,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_512.mdl" "Anyone's Horrible Trackpack" "Straight 512" 1 "NULL" "0,256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_512.mdl" "Anyone's Horrible Trackpack" "Straight 512" 2 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_64.mdl" "Anyone's Horrible Trackpack" "Straight 64" 1 "NULL" "0,32,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/anytracks/straight/s_64.mdl" "Anyone's Horrible Trackpack" "Straight 64" 2 "NULL" "0,-32,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curve_cs_std/curve_cs_std_damaged.mdl" "Battleship's abandoned rails" "Curve Cs Std Damaged" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curve_cs_std/curve_cs_std_damaged.mdl" "Battleship's abandoned rails" "Curve Cs Std Damaged" 2 "NULL" "-966.40771,127.97242,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curve_cs_std/curve_cs_std_nodamage.mdl" "Battleship's abandoned rails" "Curve Cs Std Nodamage" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curve_cs_std/curve_cs_std_nodamage.mdl" "Battleship's abandoned rails" "Curve Cs Std Nodamage" 2 "NULL" "-966.40771,127.97242,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver1/curve_r1_damaged.mdl" "Battleship's abandoned rails" "Curve R1 Damaged" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver1/curve_r1_damaged.mdl" "Battleship's abandoned rails" "Curve R1 Damaged" 2 "NULL" "-1060.13232,139.53517,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver1/curve_r1_nodamage.mdl" "Battleship's abandoned rails" "Curve R1 Nodamage" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver1/curve_r1_nodamage.mdl" "Battleship's abandoned rails" "Curve R1 Nodamage" 2 "NULL" "-1060.13232,139.53517,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver11/curve_r11_damaged.mdl" "Battleship's abandoned rails" "Curve R11 Damaged" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver11/curve_r11_damaged.mdl" "Battleship's abandoned rails" "Curve R11 Damaged" 2 "NULL" "-1086.07532,450.1528,-16.110403" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver11/curve_r11_nodamage.mdl" "Battleship's abandoned rails" "Curve R11 Nodamage" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver11/curve_r11_nodamage.mdl" "Battleship's abandoned rails" "Curve R11 Nodamage" 2 "NULL" "-1086.07532,450.1528,-16.110403" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver2/curve_r2_damaged.mdl" "Battleship's abandoned rails" "Curve R2 Damaged" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver2/curve_r2_damaged.mdl" "Battleship's abandoned rails" "Curve R2 Damaged" 2 "NULL" "-993.86975,130.8159,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver2/curve_r2_nodamage.mdl" "Battleship's abandoned rails" "Curve R2 Nodamage" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver2/curve_r2_nodamage.mdl" "Battleship's abandoned rails" "Curve R2 Nodamage" 2 "NULL" "-993.86975,130.8159,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver3/curve_r3_damaged.mdl" "Battleship's abandoned rails" "Curve R3 Damaged" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver3/curve_r3_damaged.mdl" "Battleship's abandoned rails" "Curve R3 Damaged" 2 "NULL" "-927.61951,122.07793,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver3/curve_r3_nodamage.mdl" "Battleship's abandoned rails" "Curve R3 Nodamage" 1 "NULL" "0,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/curver3/curve_r3_nodamage.mdl" "Battleship's abandoned rails" "Curve R3 Nodamage" 2 "NULL" "-927.61951,122.07793,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight1x/straight_1x_damaged.mdl" "Battleship's abandoned rails" "Straight 1x Damaged" 1 "NULL" " 64,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight1x/straight_1x_damaged.mdl" "Battleship's abandoned rails" "Straight 1x Damaged" 2 "NULL" "-64,0,-16.110403" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight1x/straight_1x_nodamage.mdl" "Battleship's abandoned rails" "Straight 1x Nodamage" 1 "NULL" " 64,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight1x/straight_1x_nodamage.mdl" "Battleship's abandoned rails" "Straight 1x Nodamage" 2 "NULL" "-64,0,-16.110403" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight2x/straight_2x_damaged.mdl" "Battleship's abandoned rails" "Straight 2x Damaged" 1 "NULL" " 128,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight2x/straight_2x_damaged.mdl" "Battleship's abandoned rails" "Straight 2x Damaged" 2 "NULL" "-128,0,-16.110403" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight2x/straight_2x_nodamage.mdl" "Battleship's abandoned rails" "Straight 2x Nodamage" 1 "NULL" " 128,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight2x/straight_2x_nodamage.mdl" "Battleship's abandoned rails" "Straight 2x Nodamage" 2 "NULL" "-128,0,-16.110403" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight3x/straight_3x_damaged.mdl" "Battleship's abandoned rails" "Straight 3x Damaged" 1 "NULL" " 192,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight3x/straight_3x_damaged.mdl" "Battleship's abandoned rails" "Straight 3x Damaged" 2 "NULL" "-192,0,-16.110403" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight3x/straight_3x_nodamage.mdl" "Battleship's abandoned rails" "Straight 3x Nodamage" 1 "NULL" " 192,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight3x/straight_3x_nodamage.mdl" "Battleship's abandoned rails" "Straight 3x Nodamage" 2 "NULL" "-192,0,-16.110403" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight4x/straight_4x_damaged.mdl" "Battleship's abandoned rails" "Straight 4x Damaged" 1 "NULL" " 256,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight4x/straight_4x_damaged.mdl" "Battleship's abandoned rails" "Straight 4x Damaged" 2 "NULL" "-256,0,-16.110403" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight4x/straight_4x_nodamage.mdl" "Battleship's abandoned rails" "Straight 4x Nodamage" 1 "NULL" " 256,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight4x/straight_4x_nodamage.mdl" "Battleship's abandoned rails" "Straight 4x Nodamage" 2 "NULL" "-256,0,-16.110403" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight8x/straight_8x_damaged.mdl" "Battleship's abandoned rails" "Straight 8x Damaged" 1 "NULL" " 512,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight8x/straight_8x_damaged.mdl" "Battleship's abandoned rails" "Straight 8x Damaged" 2 "NULL" "-512,0,-16.110403" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight8x/straight_8x_nodamage.mdl" "Battleship's abandoned rails" "Straight 8x Nodamage" 1 "NULL" " 512,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight8x/straight_8x_nodamage.mdl" "Battleship's abandoned rails" "Straight 8x Nodamage" 2 "NULL" "-512,0,-16.110403" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight_cs_std/straight_cs_std_damaged.mdl" "Battleship's abandoned rails" "Straight Cs Std Damaged" 1 "NULL" "454.40574,0.01251,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight_cs_std/straight_cs_std_damaged.mdl" "Battleship's abandoned rails" "Straight Cs Std Damaged" 2 "NULL" "-454.40574,0.01248,-16.110403" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight_cs_std/straight_cs_std_nodamage.mdl" "Battleship's abandoned rails" "Straight Cs Std Nodamage" 1 "NULL" "454.40574,0.01251,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/straight_cs_std/straight_cs_std_nodamage.mdl" "Battleship's abandoned rails" "Straight Cs Std Nodamage" 2 "NULL" "-454.40574,0.01248,-16.110403" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/switch_left_std/switch_left_base_std.mdl" "Battleship's abandoned rails" "Switch Left Base Std" 1 "NULL" " 512,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/switch_left_std/switch_left_base_std.mdl" "Battleship's abandoned rails" "Switch Left Base Std" 2 "NULL" "-512,0,-16.110403" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/switch_left_std/switch_left_base_std.mdl" "Battleship's abandoned rails" "Switch Left Base Std" 3 "NULL" "-454.49805,-128.04355,-16.110403" "0,-165,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/switch_right_std/switch_right_base_std.mdl" "Battleship's abandoned rails" "Switch Right Base Std" 1 "NULL" " 512,0,-16.110403" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/switch_right_std/switch_right_base_std.mdl" "Battleship's abandoned rails" "Switch Right Base Std" 2 "NULL" "-512,0,-16.110403" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/craptrax/switch_right_std/switch_right_base_std.mdl" "Battleship's abandoned rails" "Switch Right Base Std" 3 "NULL" "-454.48437,128.0936,-16.110403" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_left_1024.mdl" "Bobster's two feet rails" "Curve 225 Left 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_left_1024.mdl" "Bobster's two feet rails" "Curve 225 Left 1024" 2 "NULL" "249.471,49.621,3.016" "0,22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_left_2048.mdl" "Bobster's two feet rails" "Curve 225 Left 2048" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_left_2048.mdl" "Bobster's two feet rails" "Curve 225 Left 2048" 2 "NULL" "498.941,99.246,3.016" "0,22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_left_512.mdl" "Bobster's two feet rails" "Curve 225 Left 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_left_512.mdl" "Bobster's two feet rails" "Curve 225 Left 512" 2 "NULL" "124.735,24.812,3.016" "0,22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_right_1024.mdl" "Bobster's two feet rails" "Curve 225 Right 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_right_1024.mdl" "Bobster's two feet rails" "Curve 225 Right 1024" 2 "NULL" "249.471,-49.623,3.016" "0,-22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_right_2048.mdl" "Bobster's two feet rails" "Curve 225 Right 2048" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_right_2048.mdl" "Bobster's two feet rails" "Curve 225 Right 2048" 2 "NULL" "498.945,-99.237,3.016" "0,-22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_right_512.mdl" "Bobster's two feet rails" "Curve 225 Right 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_225_right_512.mdl" "Bobster's two feet rails" "Curve 225 Right 512" 2 "NULL" "124.736,-24.811,3.016" "0,-22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_left_1024.mdl" "Bobster's two feet rails" "Curve 45 Left 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_left_1024.mdl" "Bobster's two feet rails" "Curve 45 Left 1024" 2 "NULL" "460.962,190.936,3.016" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_left_2048.mdl" "Bobster's two feet rails" "Curve 45 Left 2048" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_left_2048.mdl" "Bobster's two feet rails" "Curve 45 Left 2048" 2 "NULL" "921.925,381.872,3.016" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_left_512.mdl" "Bobster's two feet rails" "Curve 45 Left 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_left_512.mdl" "Bobster's two feet rails" "Curve 45 Left 512" 2 "NULL" "230.481,95.468,3.016" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_right_1024.mdl" "Bobster's two feet rails" "Curve 45 Right 1024" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_right_1024.mdl" "Bobster's two feet rails" "Curve 45 Right 1024" 2 "NULL" "460.963,-190.936,3.016" "0,-45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_right_2048.mdl" "Bobster's two feet rails" "Curve 45 Right 2048" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_right_2048.mdl" "Bobster's two feet rails" "Curve 45 Right 2048" 2 "NULL" "921.925,-381.872,3.016" "0,-45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_right_512.mdl" "Bobster's two feet rails" "Curve 45 Right 512" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_45_right_512.mdl" "Bobster's two feet rails" "Curve 45 Right 512" 2 "NULL" "230.481,-95.469,3.016" "0,-45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_left_1024.mdl" "Bobster's two feet rails" "Curve 90 Left 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_left_1024.mdl" "Bobster's two feet rails" "Curve 90 Left 1024" 2 "NULL" "651.898,651.898,3.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_left_2048.mdl" "Bobster's two feet rails" "Curve 90 Left 2048" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_left_2048.mdl" "Bobster's two feet rails" "Curve 90 Left 2048" 2 "NULL" "1303.797,1303.797,3.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_left_512.mdl" "Bobster's two feet rails" "Curve 90 Left 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_left_512.mdl" "Bobster's two feet rails" "Curve 90 Left 512" 2 "NULL" "325.949,325.95,3.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_right_1024.mdl" "Bobster's two feet rails" "Curve 90 Right 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_right_1024.mdl" "Bobster's two feet rails" "Curve 90 Right 1024" 2 "NULL" "651.898,-651.899,3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_right_2048.mdl" "Bobster's two feet rails" "Curve 90 Right 2048" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_right_2048.mdl" "Bobster's two feet rails" "Curve 90 Right 2048" 2 "NULL" "1303.797,-1303.797,3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_right_512.mdl" "Bobster's two feet rails" "Curve 90 Right 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_90_right_512.mdl" "Bobster's two feet rails" "Curve 90 Right 512" 2 "NULL" "325.949,-325.949,3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_1024.mdl" "Bobster's two feet rails" "Curve Bank 90 Left 1024" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_1024.mdl" "Bobster's two feet rails" "Curve Bank 90 Left 1024" 2 "NULL" "651.899,651.898,3.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_2048.mdl" "Bobster's two feet rails" "Curve Bank 90 Left 2048" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_2048.mdl" "Bobster's two feet rails" "Curve Bank 90 Left 2048" 2 "NULL" "1303.797,1303.797,3.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_512.mdl" "Bobster's two feet rails" "Curve Bank 90 Left 512" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_512.mdl" "Bobster's two feet rails" "Curve Bank 90 Left 512" 2 "NULL" "325.949,325.949,3.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_1024.mdl" "Bobster's two feet rails" "Curve Bank 90 Right 1024" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_1024.mdl" "Bobster's two feet rails" "Curve Bank 90 Right 1024" 2 "NULL" "651.926,-651.874,3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_2048.mdl" "Bobster's two feet rails" "Curve Bank 90 Right 2048" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_2048.mdl" "Bobster's two feet rails" "Curve Bank 90 Right 2048" 2 "NULL" "1303.798,-1303.797,3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_512.mdl" "Bobster's two feet rails" "Curve Bank 90 Right 512" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_512.mdl" "Bobster's two feet rails" "Curve Bank 90 Right 512" 2 "NULL" "325.949,-325.949,3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_1024.mdl" "Bobster's two feet rails" "Curve Rack 225 Left 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_1024.mdl" "Bobster's two feet rails" "Curve Rack 225 Left 1024" 2 "NULL" "249.471,49.621,3.016" "0,22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_512.mdl" "Bobster's two feet rails" "Curve Rack 225 Left 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_512.mdl" "Bobster's two feet rails" "Curve Rack 225 Left 512" 2 "NULL" "124.735,24.812,3.016" "0,22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_1024.mdl" "Bobster's two feet rails" "Curve Rack 225 Right 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_1024.mdl" "Bobster's two feet rails" "Curve Rack 225 Right 1024" 2 "NULL" "249.471,-49.623,3.016" "0,-22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_512.mdl" "Bobster's two feet rails" "Curve Rack 225 Right 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_512.mdl" "Bobster's two feet rails" "Curve Rack 225 Right 512" 2 "NULL" "124.736,-24.811,3.016" "0,-22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_1024.mdl" "Bobster's two feet rails" "Curve Rack 45 Left 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_1024.mdl" "Bobster's two feet rails" "Curve Rack 45 Left 1024" 2 "NULL" "460.962,190.936,3.016" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_512.mdl" "Bobster's two feet rails" "Curve Rack 45 Left 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_512.mdl" "Bobster's two feet rails" "Curve Rack 45 Left 512" 2 "NULL" "230.481,95.468,3.016" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_1024.mdl" "Bobster's two feet rails" "Curve Rack 45 Right 1024" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_1024.mdl" "Bobster's two feet rails" "Curve Rack 45 Right 1024" 2 "NULL" "460.963,-190.936,3.016" "0,-45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_512.mdl" "Bobster's two feet rails" "Curve Rack 45 Right 512" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_512.mdl" "Bobster's two feet rails" "Curve Rack 45 Right 512" 2 "NULL" "230.481,-95.469,3.016" "0,-45,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_1024.mdl" "Bobster's two feet rails" "Curve Rack 90 Left 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_1024.mdl" "Bobster's two feet rails" "Curve Rack 90 Left 1024" 2 "NULL" "651.898,651.898,3.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_512.mdl" "Bobster's two feet rails" "Curve Rack 90 Left 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_512.mdl" "Bobster's two feet rails" "Curve Rack 90 Left 512" 2 "NULL" "325.949,325.95,3.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_1024.mdl" "Bobster's two feet rails" "Curve Rack 90 Right 1024" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_1024.mdl" "Bobster's two feet rails" "Curve Rack 90 Right 1024" 2 "NULL" "651.898,-651.899,3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_512.mdl" "Bobster's two feet rails" "Curve Rack 90 Right 512" 1 "NULL" "0,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_512.mdl" "Bobster's two feet rails" "Curve Rack 90 Right 512" 2 "NULL" "325.949,-325.949,3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/misc/cross.mdl" "Bobster's two feet rails" "Cross" 1 "NULL" "83,0,3.015" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/misc/cross.mdl" "Bobster's two feet rails" "Cross" 2 "NULL" "0.003,83,3.015" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/misc/cross.mdl" "Bobster's two feet rails" "Cross" 3 "NULL" "-83,0.003,3.015" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/misc/cross.mdl" "Bobster's two feet rails" "Cross" 4 "NULL" "0,-83,3.015" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_1024.mdl" "Bobster's two feet rails" "Straight 1024" 1 "NULL" "512,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_1024.mdl" "Bobster's two feet rails" "Straight 1024" 2 "NULL" "-512,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_128.mdl" "Bobster's two feet rails" "Straight 128" 1 "NULL" "64,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_128.mdl" "Bobster's two feet rails" "Straight 128" 2 "NULL" "-64,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_16.mdl" "Bobster's two feet rails" "Straight 16" 1 "0,-32,1.5" "8,0,3.017" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_16.mdl" "Bobster's two feet rails" "Straight 16" 2 "0,32,1.5" "-8,0,3.017" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_2048.mdl" "Bobster's two feet rails" "Straight 2048" 1 "NULL" " 1024,0,3.017" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_2048.mdl" "Bobster's two feet rails" "Straight 2048" 2 "NULL" "-1024,0,3.017" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_256.mdl" "Bobster's two feet rails" "Straight 256" 1 "NULL" "128,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_256.mdl" "Bobster's two feet rails" "Straight 256" 2 "NULL" "-128,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_32.mdl" "Bobster's two feet rails" "Straight 32" 1 "0,-32,1.5" "16,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_32.mdl" "Bobster's two feet rails" "Straight 32" 2 "0,32,1.5" "-16,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_4096.mdl" "Bobster's two feet rails" "Straight 4096" 1 "NULL" " 2048,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_4096.mdl" "Bobster's two feet rails" "Straight 4096" 2 "NULL" "-2048,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_512.mdl" "Bobster's two feet rails" "Straight 512" 1 "NULL" "256,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_512.mdl" "Bobster's two feet rails" "Straight 512" 2 "NULL" "-256,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_64.mdl" "Bobster's two feet rails" "Straight 64" 1 "NULL" "32,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_64.mdl" "Bobster's two feet rails" "Straight 64" 2 "NULL" "-32,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_bank_left.mdl" "Bobster's two feet rails" "Straight Bank Left" 1 "NULL" " 128,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_bank_left.mdl" "Bobster's two feet rails" "Straight Bank Left" 2 "NULL" "-128,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_bank_right.mdl" "Bobster's two feet rails" "Straight Bank Right" 1 "NULL" " 128,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_bank_right.mdl" "Bobster's two feet rails" "Straight Bank Right" 2 "NULL" "-128,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_1024.mdl" "Bobster's two feet rails" "Straight Rack 1024" 1 "NULL" "512,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_1024.mdl" "Bobster's two feet rails" "Straight Rack 1024" 2 "NULL" "-512,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_128.mdl" "Bobster's two feet rails" "Straight Rack 128" 1 "NULL" "64,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_128.mdl" "Bobster's two feet rails" "Straight Rack 128" 2 "NULL" "-64,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_16.mdl" "Bobster's two feet rails" "Straight Rack 16" 1 "0,-32,1.5" "8,0,3.017" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_16.mdl" "Bobster's two feet rails" "Straight Rack 16" 2 "0,32,1.5" "-8,0,3.017" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_256.mdl" "Bobster's two feet rails" "Straight Rack 256" 1 "NULL" "128,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_256.mdl" "Bobster's two feet rails" "Straight Rack 256" 2 "NULL" "-128,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_32.mdl" "Bobster's two feet rails" "Straight Rack 32" 1 "0,-32,1.5" "16,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_32.mdl" "Bobster's two feet rails" "Straight Rack 32" 2 "0,32,1.5" "-16,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_512.mdl" "Bobster's two feet rails" "Straight Rack 512" 1 "NULL" "256,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_512.mdl" "Bobster's two feet rails" "Straight Rack 512" 2 "NULL" "-256,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_64.mdl" "Bobster's two feet rails" "Straight Rack 64" 1 "NULL" "32,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/straight_rack_64.mdl" "Bobster's two feet rails" "Straight Rack 64" 2 "NULL" "-32,0,3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl" "Bobster's two feet rails" "Switch Left Switched" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl" "Bobster's two feet rails" "Switch Left Switched" 2 "NULL" "256,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl" "Bobster's two feet rails" "Switch Left Switched" 3 "NULL" "262.471,49.622,3.016" "0,22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl" "Bobster's two feet rails" "Switch Left Unswitched" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl" "Bobster's two feet rails" "Switch Left Unswitched" 2 "NULL" "256,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl" "Bobster's two feet rails" "Switch Left Unswitched" 3 "NULL" "262.471,49.622,3.016" "0,22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl" "Bobster's two feet rails" "Switch Right Switched" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl" "Bobster's two feet rails" "Switch Right Switched" 2 "NULL" "256,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl" "Bobster's two feet rails" "Switch Right Switched" 3 "NULL" "262.472,-49.622,3.016" "0,-22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl" "Bobster's two feet rails" "Switch Right Unswitched" 1 "NULL" "0,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl" "Bobster's two feet rails" "Switch Right Unswitched" 2 "NULL" "256,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl" "Bobster's two feet rails" "Switch Right Unswitched" 3 "NULL" "262.472,-49.622,3.016" "0,-22.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_corner.mdl" "CAP Walkway" "Corner" 1 "NULL" "-137.4472,37.11516,-12.7" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_corner.mdl" "CAP Walkway" "Corner" 2 "NULL" "37.11516,-137.4472,-12.7" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_end.mdl" "CAP Walkway" "End" 1 "NULL" "-137.24675,0,-12.7" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_long.mdl" "CAP Walkway" "Long" 1 "NULL" " 337.7742,0,-12.7" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_long.mdl" "CAP Walkway" "Long" 2 "NULL" "-337.7742,0,-12.7" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_med.mdl" "CAP Walkway" "Med" 1 "NULL" " 172.23691,0,-12.7" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_med.mdl" "CAP Walkway" "Med" 2 "NULL" "-172.23691,0,-12.7" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_short.mdl" "CAP Walkway" "Short" 1 "NULL" " 89.0125,0,-12.7" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_short.mdl" "CAP Walkway" "Short" 2 "NULL" "-89.0125,0,-12.7" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_t.mdl" "CAP Walkway" "T" 1 "NULL" "-137.44797,0,-12.7" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_t.mdl" "CAP Walkway" "T" 2 "NULL" "37.12806,-174.55254,-12.7" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_t.mdl" "CAP Walkway" "T" 3 "NULL" "37.12806,174.55254,-12.7" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_x.mdl" "CAP Walkway" "X" 1 "NULL" "174.55254,0,-12.7" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_x.mdl" "CAP Walkway" "X" 2 "NULL" "0,174.55254,-12.7" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_x.mdl" "CAP Walkway" "X" 3 "NULL" "-174.55254,0,-12.7" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_x.mdl" "CAP Walkway" "X" 4 "NULL" "0,-174.55254,-12.7" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_x_big.mdl" "CAP Walkway" "X Big" 1 "NULL" "234.58699,0,-12.7" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_x_big.mdl" "CAP Walkway" "X Big" 2 "NULL" "0.31703,234.26997,-12.7" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_x_big.mdl" "CAP Walkway" "X Big" 3 "NULL" "-233.95296,0,-12.7" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/catwalk_x_big.mdl" "CAP Walkway" "X Big" 4 "NULL" "0.31701,-234.26991,-12.7" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/gate_platform.mdl" "CAP Walkway" "Platform" 1 "NULL" "330,0,3.3" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/gate_platform.mdl" "CAP Walkway" "Platform" 2 "NULL" "0,330,3.3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/gate_platform.mdl" "CAP Walkway" "Platform" 3 "NULL" "-330,0,3.3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/gate_platform.mdl" "CAP Walkway" "Platform" 4 "NULL" "0,-330,3.3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/landing_platform.mdl" "CAP Walkway" "Platform" 1 "NULL" "-755.98682,-348.96243,42.80078" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/landing_platform.mdl" "CAP Walkway" "Platform" 2 "NULL" "-755.98682,349.68161,42.80078" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/nanog_end.mdl" "CAP Walkway" "End" 1 "NULL" "-286.09482,-0.0823,3.74512" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/nanog_mid.mdl" "CAP Walkway" "Mid" 1 "NULL" "-304.15,0,3.755" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/nanog_mid.mdl" "CAP Walkway" "Mid" 2 "NULL" "236.8,-197,3.755" "0,-40,0" "NULL" +TRACKASSEMBLY_PIECES "models/boba_fett/catwalk_build/nanog_mid.mdl" "CAP Walkway" "Mid" 3 "NULL" "236.8,197,3.755" "0,40,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/225l.mdl" "G Scale Track Pack" "225l" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/225l.mdl" "G Scale Track Pack" "225l" 2 "NULL" "-196.060471,-39.081982,1.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/225r.mdl" "G Scale Track Pack" "225r" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/225r.mdl" "G Scale Track Pack" "225r" 2 "NULL" "-196.060471, 39.081982,1.016" "0, 157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/45l.mdl" "G Scale Track Pack" "45l" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/45l.mdl" "G Scale Track Pack" "45l" 2 "NULL" "-362,-150,1.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/45r.mdl" "G Scale Track Pack" "45r" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/45r.mdl" "G Scale Track Pack" "45r" 2 "NULL" "-362,150,1.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/90l.mdl" "G Scale Track Pack" "90l" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/90l.mdl" "G Scale Track Pack" "90l" 2 "NULL" "-512,-512,1.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/90r.mdl" "G Scale Track Pack" "90r" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/90r.mdl" "G Scale Track Pack" "90r" 2 "NULL" "-512, 512,1.016" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/s225l.mdl" "G Scale Track Pack" "S225l" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/s225l.mdl" "G Scale Track Pack" "S225l" 2 "NULL" "-392,-78.125595,1.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/s225r.mdl" "G Scale Track Pack" "S225r" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/c0512/s225r.mdl" "G Scale Track Pack" "S225r" 2 "NULL" "-392, 78.125595,1.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0032.mdl" "G Scale Track Pack" "S0032" 1 "NULL" " 0,0,25.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0032.mdl" "G Scale Track Pack" "S0032" 2 "NULL" " -32,0,25.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0064.mdl" "G Scale Track Pack" "S0064" 1 "NULL" " 0,0,25.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0064.mdl" "G Scale Track Pack" "S0064" 2 "NULL" " -64,0,25.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0128.mdl" "G Scale Track Pack" "S0128" 1 "NULL" " 0,0,25.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0128.mdl" "G Scale Track Pack" "S0128" 2 "NULL" " -128,0,25.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0256.mdl" "G Scale Track Pack" "S0256" 1 "NULL" " 0,0,25.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0256.mdl" "G Scale Track Pack" "S0256" 2 "NULL" " -256,0,25.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0512.mdl" "G Scale Track Pack" "S0512" 1 "NULL" " 0,0,25.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s0512.mdl" "G Scale Track Pack" "S0512" 2 "NULL" " -512,0,25.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s1024.mdl" "G Scale Track Pack" "S1024" 1 "NULL" " 0,0,25.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ibeam/s1024.mdl" "G Scale Track Pack" "S1024" 2 "NULL" "-1024,0,25.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/l225_s.mdl" "G Scale Track Pack" "L225 S" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/l225_s.mdl" "G Scale Track Pack" "L225 S" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/l225_s.mdl" "G Scale Track Pack" "L225 S" 3 "NULL" "-196.060471,-39.081982,1.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/l225_t.mdl" "G Scale Track Pack" "L225 T" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/l225_t.mdl" "G Scale Track Pack" "L225 T" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/l225_t.mdl" "G Scale Track Pack" "L225 T" 3 "NULL" "-196.060471,-39.081982,1.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/r225_s.mdl" "G Scale Track Pack" "R225 S" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/r225_s.mdl" "G Scale Track Pack" "R225 S" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/r225_s.mdl" "G Scale Track Pack" "R225 S" 3 "NULL" "-196.060471, 39.081982,1.016" "0, 157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/r225_t.mdl" "G Scale Track Pack" "R225 T" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/r225_t.mdl" "G Scale Track Pack" "R225 T" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/j/r225_t.mdl" "G Scale Track Pack" "R225 T" 3 "NULL" "-196.060471, 39.081982,1.016" "0, 157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0032.mdl" "G Scale Track Pack" "R0032" 1 "NULL" " 32,0,2.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0032.mdl" "G Scale Track Pack" "R0032" 2 "NULL" " 0,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0064.mdl" "G Scale Track Pack" "R0064" 1 "NULL" " 64,0,3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0064.mdl" "G Scale Track Pack" "R0064" 2 "NULL" " 0,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0128.mdl" "G Scale Track Pack" "R0128" 1 "NULL" " 128,0,5.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0128.mdl" "G Scale Track Pack" "R0128" 2 "NULL" " 0,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0256.mdl" "G Scale Track Pack" "R0256" 1 "NULL" " 256,0,9.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0256.mdl" "G Scale Track Pack" "R0256" 2 "NULL" " 0,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0512.mdl" "G Scale Track Pack" "R0512" 1 "NULL" " 512,0,17.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r0512.mdl" "G Scale Track Pack" "R0512" 2 "NULL" " 0,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r1024.mdl" "G Scale Track Pack" "R1024" 1 "NULL" "1024,0,33.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/ramp313/r1024.mdl" "G Scale Track Pack" "R1024" 2 "NULL" " 0,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/l225_s.mdl" "G Scale Track Pack" "L225 S" 1 "NULL" " 0, 0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/l225_s.mdl" "G Scale Track Pack" "L225 S" 2 "NULL" "-256, 0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/l225_s.mdl" "G Scale Track Pack" "L225 S" 3 "NULL" "-392,-78,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/l225_s.mdl" "G Scale Track Pack" "L225 S" 4 "NULL" "-136,-78,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/l225_t.mdl" "G Scale Track Pack" "L225 T" 1 "NULL" " 0, 0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/l225_t.mdl" "G Scale Track Pack" "L225 T" 2 "NULL" "-256, 0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/l225_t.mdl" "G Scale Track Pack" "L225 T" 3 "NULL" "-392,-78,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/l225_t.mdl" "G Scale Track Pack" "L225 T" 4 "NULL" "-136,-78,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/r225_s.mdl" "G Scale Track Pack" "R225 S" 1 "NULL" " 0, 0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/r225_s.mdl" "G Scale Track Pack" "R225 S" 2 "NULL" "-256, 0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/r225_s.mdl" "G Scale Track Pack" "R225 S" 3 "NULL" "-392, 78,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/r225_s.mdl" "G Scale Track Pack" "R225 S" 4 "NULL" "-136, 78,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/r225_t.mdl" "G Scale Track Pack" "R225 T" 1 "NULL" " 0, 0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/r225_t.mdl" "G Scale Track Pack" "R225 T" 2 "NULL" "-256, 0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/r225_t.mdl" "G Scale Track Pack" "R225 T" 3 "NULL" "-392, 78,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/s/r225_t.mdl" "G Scale Track Pack" "R225 T" 4 "NULL" "-136, 78,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/l225_s.mdl" "G Scale Track Pack" "L225 S" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/l225_s.mdl" "G Scale Track Pack" "L225 S" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/l225_s.mdl" "G Scale Track Pack" "L225 S" 3 "NULL" "-392,-78,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/l225_t.mdl" "G Scale Track Pack" "L225 T" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/l225_t.mdl" "G Scale Track Pack" "L225 T" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/l225_t.mdl" "G Scale Track Pack" "L225 T" 3 "NULL" "-392,-78,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/r225_s.mdl" "G Scale Track Pack" "R225 S" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/r225_s.mdl" "G Scale Track Pack" "R225 S" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/r225_s.mdl" "G Scale Track Pack" "R225 S" 3 "NULL" "-392,78,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/r225_t.mdl" "G Scale Track Pack" "R225 T" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/r225_t.mdl" "G Scale Track Pack" "R225 T" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/siding/r225_t.mdl" "G Scale Track Pack" "R225 T" 3 "NULL" "-392,78,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0008.mdl" "G Scale Track Pack" "S0008" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0008.mdl" "G Scale Track Pack" "S0008" 2 "NULL" " -8,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0016.mdl" "G Scale Track Pack" "S0016" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0016.mdl" "G Scale Track Pack" "S0016" 2 "NULL" " -16,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0032.mdl" "G Scale Track Pack" "S0032" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0032.mdl" "G Scale Track Pack" "S0032" 2 "NULL" " -32,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0064.mdl" "G Scale Track Pack" "S0064" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0064.mdl" "G Scale Track Pack" "S0064" 2 "NULL" " -64,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0128.mdl" "G Scale Track Pack" "S0128" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0128.mdl" "G Scale Track Pack" "S0128" 2 "NULL" "-128,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0256.mdl" "G Scale Track Pack" "S0256" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0256.mdl" "G Scale Track Pack" "S0256" 2 "NULL" "-256,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0512.mdl" "G Scale Track Pack" "S0512" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s0512.mdl" "G Scale Track Pack" "S0512" 2 "NULL" "-512,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s1024.mdl" "G Scale Track Pack" "S1024" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/straight/s1024.mdl" "G Scale Track Pack" "S1024" 2 "NULL" "-1024,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/transition/t0032_q_s_1.mdl" "G Scale Track Pack" "T0032 Q S 1" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/transition/t0032_q_s_1.mdl" "G Scale Track Pack" "T0032 Q S 1" 2 "NULL" " -32,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/transition/t0032_q_s_2.mdl" "G Scale Track Pack" "T0032 Q S 2" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/transition/t0032_q_s_2.mdl" "G Scale Track Pack" "T0032 Q S 2" 2 "NULL" " -32,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/transition/t0032_q_t.mdl" "G Scale Track Pack" "T0032 Q T" 1 "NULL" " 0,0,1.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/gscale/transition/t0032_q_t.mdl" "G Scale Track Pack" "T0032 Q T" 2 "NULL" " -32,0,1.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/1536.mdl" "Joe's track pack" "1536" 1 "NULL" "0,0,6.56348" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/1536.mdl" "Joe's track pack" "1536" 2 "NULL" "-1536,1536,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/2048_90.mdl" "Joe's track pack" "2048 90" 1 "NULL" "0,0,6.5625" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/2048_90.mdl" "Joe's track pack" "2048 90" 2 "NULL" "1769,-1769,6.5625" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/2304_90.mdl" "Joe's track pack" "2304 90" 1 "NULL" "0,0,6.5625" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/2304_90.mdl" "Joe's track pack" "2304 90" 2 "NULL" "-2005,2005,6.5625" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/3072_90.mdl" "Joe's track pack" "3072 90" 1 "NULL" "0,0,6.5625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/3072_90.mdl" "Joe's track pack" "3072 90" 2 "NULL" "-3072,3072,6.5625" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/4096_90.mdl" "Joe's track pack" "4096 90" 1 "NULL" "0,0,6.5625" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/curve/4096_90.mdl" "Joe's track pack" "4096 90" 2 "NULL" "-4096,4096,6.5625" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/1024_16.mdl" "Joe's track pack" "1024 16" 1 "NULL" "0,0,6.5625" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/1024_16.mdl" "Joe's track pack" "1024 16" 2 "NULL" "0,-1024,22.5625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/1024_32.mdl" "Joe's track pack" "1024 32" 1 "NULL" "0,512,-9.43457" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/1024_32.mdl" "Joe's track pack" "1024 32" 2 "NULL" "0,-512,22.56836" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/2048_32.mdl" "Joe's track pack" "2048 32" 1 "NULL" "0,0,6.56152" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/2048_32.mdl" "Joe's track pack" "2048 32" 2 "NULL" "0,2048,38.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/2048_64.mdl" "Joe's track pack" "2048 64" 1 "NULL" "0,0,6.56152" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/2048_64.mdl" "Joe's track pack" "2048 64" 2 "NULL" "0,2048,70.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/3072_48.mdl" "Joe's track pack" "3072 48" 1 "NULL" "0,0,6.56152" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/3072_48.mdl" "Joe's track pack" "3072 48" 2 "NULL" "0,3072,54.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/3072_96.mdl" "Joe's track pack" "3072 96" 1 "NULL" "0,0,6.56152" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/3072_96.mdl" "Joe's track pack" "3072 96" 2 "NULL" "0,3072,102.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/4096_128.mdl" "Joe's track pack" "4096 128" 1 "NULL" "0,0,6.56152" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/4096_128.mdl" "Joe's track pack" "4096 128" 2 "NULL" "0,4096,134.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/4096_64.mdl" "Joe's track pack" "4096 64" 1 "NULL" "0,0,6.56152" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/4096_64.mdl" "Joe's track pack" "4096 64" 2 "NULL" "0,4096,70.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/512_16.mdl" "Joe's track pack" "512 16" 1 "NULL" "0,-256,-1.43457" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/512_16.mdl" "Joe's track pack" "512 16" 2 "NULL" "0, 256,14.56738" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/512_32.mdl" "Joe's track pack" "512 32" 1 "NULL" "0,0,6.56152" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/512_32.mdl" "Joe's track pack" "512 32" 2 "NULL" "0,512,38.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/3072_48_left.mdl" "Joe's track pack" "3072 48 Left" 1 "NULL" "0,0,6.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/3072_48_left.mdl" "Joe's track pack" "3072 48 Left" 2 "NULL" "3072,-3072,54.56152" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/4096_48.mdl" "Joe's track pack" "4096 48" 1 "NULL" "0,0,6.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/4096_48.mdl" "Joe's track pack" "4096 48" 2 "NULL" "-4096,-4096,54.56152" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/4096_48_left.mdl" "Joe's track pack" "4096 48 Left" 1 "NULL" "0,0,6.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/4096_48_left.mdl" "Joe's track pack" "4096 48 Left" 2 "NULL" "3072,-3072,54.56152" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/4096_64_right.mdl" "Joe's track pack" "4096 64 Right" 1 "NULL" "0,0,6.56152" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/4096_64_right.mdl" "Joe's track pack" "4096 64 Right" 2 "NULL" "-4096,-4096,70.56152" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/4096_96_left.mdl" "Joe's track pack" "4096 96 Left" 1 "NULL" "0,0,6.5625" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/grades/curve/4096_96_left.mdl" "Joe's track pack" "4096 96 Left" 2 "NULL" "4096,-4096,102.5625" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/misc/damaged_track_1.mdl" "Joe's track pack" "Damaged Track 1" 1 "NULL" "0,106,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/misc/damaged_track_1.mdl" "Joe's track pack" "Damaged Track 1" 2 "NULL" "0,-107,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/misc/diamond_90.mdl" "Joe's track pack" "Diamond 90" 1 "NULL" "105,0,6.56348" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/misc/diamond_90.mdl" "Joe's track pack" "Diamond 90" 2 "NULL" "0,-105,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/misc/diamond_90.mdl" "Joe's track pack" "Diamond 90" 3 "NULL" "-105,0,6.56348" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/misc/diamond_90.mdl" "Joe's track pack" "Diamond 90" 4 "NULL" "0,105,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/misc/end_track_1.mdl" "Joe's track pack" "End Track 1" 1 "NULL" "0, 32,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/misc/end_track_1.mdl" "Joe's track pack" "End Track 1" 2 "NULL" "0,-32,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/1024.mdl" "Joe's track pack" "1024" 1 "NULL" "0, 512,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/1024.mdl" "Joe's track pack" "1024" 2 "NULL" "0,-512,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/128.mdl" "Joe's track pack" "128" 1 "NULL" "0, 64 ,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/128.mdl" "Joe's track pack" "128" 2 "NULL" "0,-64 ,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/2048.mdl" "Joe's track pack" "2048" 1 "NULL" "0, 1024,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/2048.mdl" "Joe's track pack" "2048" 2 "NULL" "0,-1024,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/256.mdl" "Joe's track pack" "256" 1 "NULL" "0, 128,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/256.mdl" "Joe's track pack" "256" 2 "NULL" "0,-128,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/3072.mdl" "Joe's track pack" "3072" 1 "NULL" "0, 1536,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/3072.mdl" "Joe's track pack" "3072" 2 "NULL" "0,-1536,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/32.mdl" "Joe's track pack" "32" 1 "NULL" "0, 16 ,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/32.mdl" "Joe's track pack" "32" 2 "NULL" "0,-16 ,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/4096.mdl" "Joe's track pack" "4096" 1 "NULL" "0, 2048,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/4096.mdl" "Joe's track pack" "4096" 2 "NULL" "0,-2048,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/512.mdl" "Joe's track pack" "512" 1 "NULL" "0, 256,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/512.mdl" "Joe's track pack" "512" 2 "NULL" "0,-256,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/64.mdl" "Joe's track pack" "64" 1 "NULL" "0, 32 ,6.56348" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/64.mdl" "Joe's track pack" "64" 2 "NULL" "0,-32 ,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/custom_1.mdl" "Joe's track pack" "Custom 1" 1 "NULL" "301,-7.00836,6.56348" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/custom_1.mdl" "Joe's track pack" "Custom 1" 2 "NULL" "-301,7.00464,6.56348" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/siding_straight.mdl" "Joe's track pack" "Siding Straight" 1 "NULL" "0,332,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/straight/siding_straight.mdl" "Joe's track pack" "Siding Straight" 2 "NULL" "0,-331,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_left_switch.mdl" "Joe's track pack" "225 Left Switch" 1 "NULL" "0,0,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_left_switch.mdl" "Joe's track pack" "225 Left Switch" 2 "NULL" "0,-512,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_left_switch.mdl" "Joe's track pack" "225 Left Switch" 3 "NULL" "117,-588,6.56348" "0,-67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_left_unswitched.mdl" "Joe's track pack" "225 Left Unswitched" 1 "NULL" "0,0,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_left_unswitched.mdl" "Joe's track pack" "225 Left Unswitched" 2 "NULL" "0,-512,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_left_unswitched.mdl" "Joe's track pack" "225 Left Unswitched" 3 "NULL" "117,-588,6.56348" "0,-67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_right_switch.mdl" "Joe's track pack" "225 Right Switch" 1 "NULL" "0,0,6.56348" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_right_switch.mdl" "Joe's track pack" "225 Right Switch" 2 "NULL" "-512,0,6.56348" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_right_switch.mdl" "Joe's track pack" "225 Right Switch" 3 "NULL" "-588,117,6.56348" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_right_unswitched.mdl" "Joe's track pack" "225 Right Unswitched" 1 "NULL" "0,0,6.56348" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_right_unswitched.mdl" "Joe's track pack" "225 Right Unswitched" 2 "NULL" "-512,0,6.56348" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_right_unswitched.mdl" "Joe's track pack" "225 Right Unswitched" 3 "NULL" "-588,117,6.56348" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_left_switched.mdl" "Joe's track pack" "225 Yard Left Switched" 1 "NULL" "117,588.00024,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_left_switched.mdl" "Joe's track pack" "225 Yard Left Switched" 2 "NULL" "195.92734,473.3591,6.56348" "0,67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_left_switched.mdl" "Joe's track pack" "225 Yard Left Switched" 3 "NULL" "-0.10242,0.34741,6.56348" "0,-112.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_left_unswitched.mdl" "Joe's track pack" "225 Yard Left Unswitched" 1 "NULL" "117,588.00024,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_left_unswitched.mdl" "Joe's track pack" "225 Yard Left Unswitched" 2 "NULL" "195.92734,473.3591,6.56348" "0,67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_left_unswitched.mdl" "Joe's track pack" "225 Yard Left Unswitched" 3 "NULL" "-0.10242,0.34741,6.56348" "0,-112.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_right_switched.mdl" "Joe's track pack" "225 Yard Right Switched" 1 "NULL" "-117,588,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_right_switched.mdl" "Joe's track pack" "225 Yard Right Switched" 2 "NULL" "-195.92795,473.35934,6.56348" "0,112.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_right_switched.mdl" "Joe's track pack" "225 Yard Right Switched" 3 "NULL" "0.09927,0.34661,6.56348" "0,-67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_right_unswitched.mdl" "Joe's track pack" "225 Yard Right Unswitched" 1 "NULL" "-117,588,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_right_unswitched.mdl" "Joe's track pack" "225 Yard Right Unswitched" 2 "NULL" "-195.92795,473.35934,6.56348" "0,112.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/225_yard_right_unswitched.mdl" "Joe's track pack" "225 Yard Right Unswitched" 3 "NULL" "0.09927,0.34661,6.56348" "0,-67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_left_switch.mdl" "Joe's track pack" "45 Left Switch" 1 "NULL" "0,0,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_left_switch.mdl" "Joe's track pack" "45 Left Switch" 2 "NULL" "0,-512,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_left_switch.mdl" "Joe's track pack" "45 Left Switch" 3 "NULL" "450,-1086.01062,6.56348" "0,-45,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_left_unswitched.mdl" "Joe's track pack" "45 Left Unswitched" 1 "NULL" "0,0,6.56348" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_left_unswitched.mdl" "Joe's track pack" "45 Left Unswitched" 2 "NULL" "0,-512,6.56348" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_left_unswitched.mdl" "Joe's track pack" "45 Left Unswitched" 3 "NULL" "450,-1086.01062,6.56348" "0,-45,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_right_switched.mdl" "Joe's track pack" "45 Right Switched" 1 "NULL" "0,0,6.56248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_right_switched.mdl" "Joe's track pack" "45 Right Switched" 2 "NULL" "-512,0,6.5625" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_right_switched.mdl" "Joe's track pack" "45 Right Switched" 3 "NULL" "-1086.0105,450,6.60476" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_right_unswitched.mdl" "Joe's track pack" "45 Right Unswitched" 1 "NULL" "0,0,6.56248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_right_unswitched.mdl" "Joe's track pack" "45 Right Unswitched" 2 "NULL" "-512,0,6.5625" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/switch/1536/45_right_unswitched.mdl" "Joe's track pack" "45 Right Unswitched" 3 "NULL" "-1086.0105,450,6.60476" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/throw/harpstand_2_pos.mdl" "Joe's track pack" "Harpstand 2 Pos" 1 "NULL" "0, -86.5, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/trestle/trestle_1.mdl" "Joe's track pack" "Trestle 1" 1 "NULL" "0,0,249" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/trestle/trestle_2.mdl" "Joe's track pack" "Trestle 2" 1 "NULL" "0,0,249" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/trestle/trestle_3.mdl" "Joe's track pack" "Trestle 3" 1 "NULL" "0,0,249" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/trestle/trestle_4.mdl" "Joe's track pack" "Trestle 4" 1 "NULL" "0,0,249" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/turntable/base_1.mdl" "Joe's track pack" "Base 1" 1 "NULL" " 450,0,2.59372" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/turntable/base_1.mdl" "Joe's track pack" "Base 1" 2 "NULL" "-450,0,2.59372" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/turntable/turntable.mdl" "Joe's track pack" "Turntable" 1 "NULL" "0, 450,14.59378" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/turntable/turntable.mdl" "Joe's track pack" "Turntable" 2 "NULL" "0,-450,14.59378" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/turntable/turntable2.mdl" "Joe's track pack" "Turntable2" 1 "NULL" "0, 450,14.59378" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/joe/jtp/turntable/turntable2.mdl" "Joe's track pack" "Turntable2" 2 "NULL" "0,-450,14.59378" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/curve_225.mdl" "Magnum's Rails" "Curve 225" 1 "NULL" "-0.01, 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/curve_225.mdl" "Magnum's Rails" "Curve 225" 2 "NULL" "-587.955, -117.702, 3.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/curve_45.mdl" "Magnum's Rails" "Curve 45" 1 "NULL" "-0.012, 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/curve_45.mdl" "Magnum's Rails" "Curve 45" 2 "NULL" "-1087.089, -451.055, 3.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/curve_90.mdl" "Magnum's Rails" "Curve 90" 1 "NULL" " 1086.58, 450.079, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/curve_90.mdl" "Magnum's Rails" "Curve 90" 2 "NULL" "-449.475,-1085.92, 3.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0032.mdl" "Magnum's Rails" "Straight 0032" 1 "NULL" " 16 , 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0032.mdl" "Magnum's Rails" "Straight 0032" 2 "NULL" "-16 , 0, 3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0064.mdl" "Magnum's Rails" "Straight 0064" 1 "NULL" " 32 , 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0064.mdl" "Magnum's Rails" "Straight 0064" 2 "NULL" "-32 , 0, 3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0128.mdl" "Magnum's Rails" "Straight 0128" 1 "NULL" " 64 , 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0128.mdl" "Magnum's Rails" "Straight 0128" 2 "NULL" "-64 , 0, 3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0256.mdl" "Magnum's Rails" "Straight 0256" 1 "NULL" " 128 , 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0256.mdl" "Magnum's Rails" "Straight 0256" 2 "NULL" "-128 , 0, 3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0512.mdl" "Magnum's Rails" "Straight 0512" 1 "NULL" " 256 , 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_0512.mdl" "Magnum's Rails" "Straight 0512" 2 "NULL" "-256 , 0, 3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_1024.mdl" "Magnum's Rails" "Straight 1024" 1 "NULL" " 512 , 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_1024.mdl" "Magnum's Rails" "Straight 1024" 2 "NULL" "-512 , 0, 3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_2048.mdl" "Magnum's Rails" "Straight 2048" 1 "NULL" " 1024, 0, 3.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/straight_2048.mdl" "Magnum's Rails" "Straight 2048" 2 "NULL" "-1024, 0, 3.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switch_curve.mdl" "Magnum's Rails" "Switch Curve" 1 "NULL" "0,0,0.01563" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switch_curve.mdl" "Magnum's Rails" "Switch Curve" 2 "NULL" "-373.42453,-45.55976,0.01562" "0,-166.08,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switch_straight.mdl" "Magnum's Rails" "Switch Straight" 1 "NULL" "0,0,0.01599" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switch_straight.mdl" "Magnum's Rails" "Switch Straight" 2 "NULL" "-384,0,0.01599" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switchbase_left.mdl" "Magnum's Rails" "Switchbase Left" 1 "NULL" "0,0,0.01599" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switchbase_left.mdl" "Magnum's Rails" "Switchbase Left" 2 "NULL" "-512,0,0.01599" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switchbase_left.mdl" "Magnum's Rails" "Switchbase Left" 3 "NULL" "-587.75598,-117.69751,0.01599" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switchbase_right.mdl" "Magnum's Rails" "Switchbase Right" 1 "NULL" "0,0,0.01599" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switchbase_right.mdl" "Magnum's Rails" "Switchbase Right" 2 "NULL" "-512,0,0.01599" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/magtrains1ga/switchbase_right.mdl" "Magnum's Rails" "Switchbase Right" 3 "NULL" "-587.75598,117.69751,0.01599" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_connector1.mdl" "Modular Canals" "Interior Connector1" 1 "NULL" "128,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_connector1.mdl" "Modular Canals" "Interior Connector1" 2 "NULL" "-128,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_connector2.mdl" "Modular Canals" "Interior Connector2" 1 "NULL" "128,64,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_connector2.mdl" "Modular Canals" "Interior Connector2" 2 "NULL" "-128,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_connector3.mdl" "Modular Canals" "Interior Connector3" 1 "NULL" "128,-64,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_connector3.mdl" "Modular Canals" "Interior Connector3" 2 "NULL" "-128,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_128.mdl" "Modular Canals" "Interior Narrow 128" 1 "NULL" "64,64,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_128.mdl" "Modular Canals" "Interior Narrow 128" 2 "NULL" "-64,64,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_256.mdl" "Modular Canals" "Interior Narrow 256" 1 "NULL" "128,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_256.mdl" "Modular Canals" "Interior Narrow 256" 2 "NULL" "-128,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_corner.mdl" "Modular Canals" "Interior Narrow Corner" 1 "NULL" "56,-136,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_corner.mdl" "Modular Canals" "Interior Narrow Corner" 2 "NULL" "-136,56,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_corner2.mdl" "Modular Canals" "Interior Narrow Corner2" 1 "NULL" "136,56,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_corner2.mdl" "Modular Canals" "Interior Narrow Corner2" 2 "NULL" "-56,-136,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_stairs.mdl" "Modular Canals" "Interior Narrow Stairs" 1 "NULL" "256,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_stairs.mdl" "Modular Canals" "Interior Narrow Stairs" 2 "NULL" "-256,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_stairs_mirrored.mdl" "Modular Canals" "Interior Narrow Stairs Mirrored" 1 "NULL" "256,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_stairs_mirrored.mdl" "Modular Canals" "Interior Narrow Stairs Mirrored" 2 "NULL" "-256,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_tjunc.mdl" "Modular Canals" "Interior Narrow Tjunc" 1 "NULL" "56,248,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_tjunc.mdl" "Modular Canals" "Interior Narrow Tjunc" 2 "NULL" "-136,56,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_tjunc.mdl" "Modular Canals" "Interior Narrow Tjunc" 3 "NULL" "56,-136,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_xjunc.mdl" "Modular Canals" "Interior Narrow Xjunc" 1 "NULL" "192,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_xjunc.mdl" "Modular Canals" "Interior Narrow Xjunc" 2 "NULL" "0,192,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_xjunc.mdl" "Modular Canals" "Interior Narrow Xjunc" 3 "NULL" "-192,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_narrow_xjunc.mdl" "Modular Canals" "Interior Narrow Xjunc" 4 "NULL" "0,-192,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_128.mdl" "Modular Canals" "Interior Wide 128" 1 "NULL" "64,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_128.mdl" "Modular Canals" "Interior Wide 128" 2 "NULL" "-64,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_256.mdl" "Modular Canals" "Interior Wide 256" 1 "NULL" "128,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_256.mdl" "Modular Canals" "Interior Wide 256" 2 "NULL" "-128,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_corner.mdl" "Modular Canals" "Interior Wide Corner" 1 "NULL" "-200,56,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_corner.mdl" "Modular Canals" "Interior Wide Corner" 2 "NULL" "56,-200,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_corner2.mdl" "Modular Canals" "Interior Wide Corner2" 1 "NULL" "56,200,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_corner2.mdl" "Modular Canals" "Interior Wide Corner2" 2 "NULL" "-200,-56,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_stairs.mdl" "Modular Canals" "Interior Wide Stairs" 1 "NULL" "256,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_stairs.mdl" "Modular Canals" "Interior Wide Stairs" 2 "NULL" "-256,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_stairs_mirrored.mdl" "Modular Canals" "Interior Wide Stairs Mirrored" 1 "NULL" "256,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_stairs_mirrored.mdl" "Modular Canals" "Interior Wide Stairs Mirrored" 2 "NULL" "-256,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_tjunc_narrow.mdl" "Modular Canals" "Interior Wide Tjunc Narrow" 1 "NULL" "0,-144,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_tjunc_narrow.mdl" "Modular Canals" "Interior Wide Tjunc Narrow" 2 "NULL" "128,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_tjunc_narrow.mdl" "Modular Canals" "Interior Wide Tjunc Narrow" 3 "NULL" "-128,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_xjunc.mdl" "Modular Canals" "Interior Wide Xjunc" 1 "NULL" "256,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_xjunc.mdl" "Modular Canals" "Interior Wide Xjunc" 2 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_xjunc.mdl" "Modular Canals" "Interior Wide Xjunc" 3 "NULL" "-256,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_xjunc.mdl" "Modular Canals" "Interior Wide Xjunc" 4 "NULL" "0,256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_xjunc_narrow.mdl" "Modular Canals" "Interior Wide Xjunc Narrow" 1 "NULL" "128,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_xjunc_narrow.mdl" "Modular Canals" "Interior Wide Xjunc Narrow" 2 "NULL" "0,-144,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_xjunc_narrow.mdl" "Modular Canals" "Interior Wide Xjunc Narrow" 3 "NULL" "-128,0,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_d47_canals/interior_wide_xjunc_narrow.mdl" "Modular Canals" "Interior Wide Xjunc Narrow" 4 "NULL" "0,144,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_ramp_street1024x768.mdl" "Modular City Street" "Highway Ramp Street1024x768" 1 "NULL" "0, 512, 120" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_ramp_street1024x768.mdl" "Modular City Street" "Highway Ramp Street1024x768" 2 "NULL" "0,-512,-120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_ramp_street2048x768_tall.mdl" "Modular City Street" "Highway Ramp Street2048x768 Tall" 1 "NULL" "0, 1024, 248" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_ramp_street2048x768_tall.mdl" "Modular City Street" "Highway Ramp Street2048x768 Tall" 2 "NULL" "0,-1024,-248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_ramp_street768_short_tall_connector.mdl" "Modular City Street" "Highway Ramp Street768 Short Tall Connector" 1 "NULL" " 512,0,-8" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_ramp_street768_short_tall_connector.mdl" "Modular City Street" "Highway Ramp Street768 Short Tall Connector" 2 "NULL" "-512,0,248" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street1024x768.mdl" "Modular City Street" "Highway Street1024x768" 1 "NULL" "0,512,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street1024x768.mdl" "Modular City Street" "Highway Street1024x768" 2 "NULL" "0,-512,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street1024x768_overpass.mdl" "Modular City Street" "Highway Street1024x768 Overpass" 1 "NULL" "0,512,40" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street1024x768_overpass.mdl" "Modular City Street" "Highway Street1024x768 Overpass" 2 "NULL" "0,-512,40" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street1024x768_tall.mdl" "Modular City Street" "Highway Street1024x768 Tall" 1 "NULL" "0,512,248" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street1024x768_tall.mdl" "Modular City Street" "Highway Street1024x768 Tall" 2 "NULL" "0,-512,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street2048x768.mdl" "Modular City Street" "Highway Street2048x768" 1 "NULL" "0,1024,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street2048x768.mdl" "Modular City Street" "Highway Street2048x768" 2 "NULL" "0,-1024,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street2048x768_overpass.mdl" "Modular City Street" "Highway Street2048x768 Overpass" 1 "NULL" "0,1024,40" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street2048x768_overpass.mdl" "Modular City Street" "Highway Street2048x768 Overpass" 2 "NULL" "0,-1024,40" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street2048x768_tall.mdl" "Modular City Street" "Highway Street2048x768 Tall" 1 "NULL" "0,1024,248" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street2048x768_tall.mdl" "Modular City Street" "Highway Street2048x768 Tall" 2 "NULL" "0,-1024,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street256x768.mdl" "Modular City Street" "Highway Street256x768" 1 "NULL" "0,64,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street256x768.mdl" "Modular City Street" "Highway Street256x768" 2 "NULL" "0,-64,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street256x768_overpass.mdl" "Modular City Street" "Highway Street256x768 Overpass" 1 "NULL" "0,64,40" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street256x768_overpass.mdl" "Modular City Street" "Highway Street256x768 Overpass" 2 "NULL" "0,-64,40" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street256x768_tall.mdl" "Modular City Street" "Highway Street256x768 Tall" 1 "NULL" "0,64,248" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street256x768_tall.mdl" "Modular City Street" "Highway Street256x768 Tall" 2 "NULL" "0,-64,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street512x768.mdl" "Modular City Street" "Highway Street512x768" 1 "NULL" "0,256,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street512x768.mdl" "Modular City Street" "Highway Street512x768" 2 "NULL" "0,-256,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street512x768_overpass.mdl" "Modular City Street" "Highway Street512x768 Overpass" 1 "NULL" "0,256,40" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street512x768_overpass.mdl" "Modular City Street" "Highway Street512x768 Overpass" 2 "NULL" "0,-256,40" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street512x768_tall.mdl" "Modular City Street" "Highway Street512x768 Tall" 1 "NULL" "0,256,248" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street512x768_tall.mdl" "Modular City Street" "Highway Street512x768 Tall" 2 "NULL" "0,-256,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street768x768.mdl" "Modular City Street" "Highway Street768x768" 1 "NULL" "0,384,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street768x768.mdl" "Modular City Street" "Highway Street768x768" 2 "NULL" "0,-384,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street768x768_overpass.mdl" "Modular City Street" "Highway Street768x768 Overpass" 1 "NULL" "0,384,40" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street768x768_overpass.mdl" "Modular City Street" "Highway Street768x768 Overpass" 2 "NULL" "0,-384,40" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street768x768_tall.mdl" "Modular City Street" "Highway Street768x768 Tall" 1 "NULL" "0,384,248" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street768x768_tall.mdl" "Modular City Street" "Highway Street768x768 Tall" 2 "NULL" "0,-384,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_1024turn.mdl" "Modular City Street" "Highway Street 1024turn" 1 "NULL" "1024,512,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_1024turn.mdl" "Modular City Street" "Highway Street 1024turn" 2 "NULL" "-512,-1024,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_1024turn_tall.mdl" "Modular City Street" "Highway Street 1024turn Tall" 1 "NULL" "1024,512,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_1024turn_tall.mdl" "Modular City Street" "Highway Street 1024turn Tall" 2 "NULL" "-512,-1024,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_256turn.mdl" "Modular City Street" "Highway Street 256turn" 1 "NULL" "256,128,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_256turn.mdl" "Modular City Street" "Highway Street 256turn" 2 "NULL" "-128,-256,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_256turn_tall.mdl" "Modular City Street" "Highway Street 256turn Tall" 1 "NULL" "256,128,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_256turn_tall.mdl" "Modular City Street" "Highway Street 256turn Tall" 2 "NULL" "-128,-256,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_512turn.mdl" "Modular City Street" "Highway Street 512turn" 1 "NULL" "512,256,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_512turn.mdl" "Modular City Street" "Highway Street 512turn" 2 "NULL" "-256,-512,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_512turn_tall.mdl" "Modular City Street" "Highway Street 512turn Tall" 1 "NULL" "512,256,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_512turn_tall.mdl" "Modular City Street" "Highway Street 512turn Tall" 2 "NULL" "-256,-512,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector.mdl" "Modular City Street" "Highway Street 768rampconnector" 1 "NULL" " 384,-384,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector.mdl" "Modular City Street" "Highway Street 768rampconnector" 2 "NULL" "-384, 384,120" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector.mdl" "Modular City Street" "Highway Street 768rampconnector" 3 "NULL" "-384,-384,120" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_double.mdl" "Modular City Street" "Highway Street 768rampconnector Double" 1 "NULL" " 384,-384,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_double.mdl" "Modular City Street" "Highway Street 768rampconnector Double" 2 "NULL" " 384, 384,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_double.mdl" "Modular City Street" "Highway Street 768rampconnector Double" 3 "NULL" "-384, 384,120" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_double.mdl" "Modular City Street" "Highway Street 768rampconnector Double" 4 "NULL" "-384,-384,120" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_double_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Double Tall" 1 "NULL" " 384,-384,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_double_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Double Tall" 2 "NULL" " 384, 384,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_double_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Double Tall" 3 "NULL" "-384, 384,248" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_double_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Double Tall" 4 "NULL" "-384,-384,248" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored.mdl" "Modular City Street" "Highway Street 768rampconnector Mirrored" 1 "NULL" " 384,-384,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored.mdl" "Modular City Street" "Highway Street 768rampconnector Mirrored" 2 "NULL" " 384, 384,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored.mdl" "Modular City Street" "Highway Street 768rampconnector Mirrored" 3 "NULL" "-384,-384,120" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Mirrored Tall" 1 "NULL" " 384,-384,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Mirrored Tall" 2 "NULL" " 384, 384,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_mirrored_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Mirrored Tall" 3 "NULL" "-384,-384,248" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Tall" 1 "NULL" " 384,-384,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Tall" 2 "NULL" "-384, 384,248" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768rampconnector_tall.mdl" "Modular City Street" "Highway Street 768rampconnector Tall" 3 "NULL" "-384,-384,248" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768turn.mdl" "Modular City Street" "Highway Street 768turn" 1 "NULL" "768,384,120" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768turn.mdl" "Modular City Street" "Highway Street 768turn" 2 "NULL" "-384,-768,120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768turn_tall.mdl" "Modular City Street" "Highway Street 768turn Tall" 1 "NULL" "768,384,248" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/highway_street_768turn_tall.mdl" "Modular City Street" "Highway Street 768turn Tall" 2 "NULL" "-384,-768,248" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512.mdl" "Modular City Street" "Street1024x512" 1 "NULL" "0,-512,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512.mdl" "Modular City Street" "Street1024x512" 2 "NULL" "0, 512,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512_elevated128high.mdl" "Modular City Street" "Street1024x512 Elevated128high" 1 "NULL" "0,512,56" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512_elevated128high.mdl" "Modular City Street" "Street1024x512 Elevated128high" 2 "NULL" "0,-512,-56" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512_elevated192high.mdl" "Modular City Street" "Street1024x512 Elevated192high" 1 "NULL" "0,512,88" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512_elevated192high.mdl" "Modular City Street" "Street1024x512 Elevated192high" 2 "NULL" "0,-512,-88" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512_elevated256high.mdl" "Modular City Street" "Street1024x512 Elevated256high" 1 "NULL" "0,512,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512_elevated256high.mdl" "Modular City Street" "Street1024x512 Elevated256high" 2 "NULL" "0,-512,-120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512_elevated64high.mdl" "Modular City Street" "Street1024x512 Elevated64high" 1 "NULL" "0,512,24" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x512_elevated64high.mdl" "Modular City Street" "Street1024x512 Elevated64high" 2 "NULL" "0,-512,-24" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768.mdl" "Modular City Street" "Street1024x768" 1 "NULL" "0,-512,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768.mdl" "Modular City Street" "Street1024x768" 2 "NULL" "0, 512,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768_elevated128high.mdl" "Modular City Street" "Street1024x768 Elevated128high" 1 "NULL" "0,512,56" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768_elevated128high.mdl" "Modular City Street" "Street1024x768 Elevated128high" 2 "NULL" "0,-512,-56" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768_elevated192high.mdl" "Modular City Street" "Street1024x768 Elevated192high" 1 "NULL" "0,512,88" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768_elevated192high.mdl" "Modular City Street" "Street1024x768 Elevated192high" 2 "NULL" "0,-512,-88" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768_elevated256high.mdl" "Modular City Street" "Street1024x768 Elevated256high" 1 "NULL" "0,512,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768_elevated256high.mdl" "Modular City Street" "Street1024x768 Elevated256high" 2 "NULL" "0,-512,-120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768_elevated64high.mdl" "Modular City Street" "Street1024x768 Elevated64high" 1 "NULL" "0,512,24" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street1024x768_elevated64high.mdl" "Modular City Street" "Street1024x768 Elevated64high" 2 "NULL" "0,-512,-24" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street128x512.mdl" "Modular City Street" "Street128x512" 1 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street128x512.mdl" "Modular City Street" "Street128x512" 2 "NULL" "0, 64,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street128x512_crosswalk.mdl" "Modular City Street" "Street128x512 Crosswalk" 1 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street128x512_crosswalk.mdl" "Modular City Street" "Street128x512 Crosswalk" 2 "NULL" "0, 64,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street128x768.mdl" "Modular City Street" "Street128x768" 1 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street128x768.mdl" "Modular City Street" "Street128x768" 2 "NULL" "0, 64,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street128x768_crosswalk.mdl" "Modular City Street" "Street128x768 Crosswalk" 1 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street128x768_crosswalk.mdl" "Modular City Street" "Street128x768 Crosswalk" 2 "NULL" "0, 64,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street2048x512.mdl" "Modular City Street" "Street2048x512" 1 "NULL" "0,-1024,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street2048x512.mdl" "Modular City Street" "Street2048x512" 2 "NULL" "0, 1024,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street2048x768.mdl" "Modular City Street" "Street2048x768" 1 "NULL" "0,-1024,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street2048x768.mdl" "Modular City Street" "Street2048x768" 2 "NULL" "0, 1024,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street256x512.mdl" "Modular City Street" "Street256x512" 1 "NULL" "0,-128,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street256x512.mdl" "Modular City Street" "Street256x512" 2 "NULL" "0, 128,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street256x768.mdl" "Modular City Street" "Street256x768" 1 "NULL" "0,-128,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street256x768.mdl" "Modular City Street" "Street256x768" 2 "NULL" "0, 128,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512_endcap_fancy1.mdl" "Modular City Street" "Street512 Endcap Fancy1" 1 "NULL" "0,-128,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512_endcap_fancy2.mdl" "Modular City Street" "Street512 Endcap Fancy2" 1 "NULL" "0,-128,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512_endcap_simple1.mdl" "Modular City Street" "Street512 Endcap Simple1" 1 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512_endcap_simple2.mdl" "Modular City Street" "Street512 Endcap Simple2" 1 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512.mdl" "Modular City Street" "Street512x512" 1 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512.mdl" "Modular City Street" "Street512x512" 2 "NULL" "0, 256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector1.mdl" "Modular City Street" "Street512x512 Concrete To Stone Connector1" 1 "NULL" "0, 256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector1.mdl" "Modular City Street" "Street512x512 Concrete To Stone Connector1" 2 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector1.mdl" "Modular City Street" "Street512x512 Concrete To Stone Connector1" 3 "NULL" "256,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector2.mdl" "Modular City Street" "Street512x512 Concrete To Stone Connector2" 1 "NULL" "0, 256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector2.mdl" "Modular City Street" "Street512x512 Concrete To Stone Connector2" 2 "NULL" "-256,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector2.mdl" "Modular City Street" "Street512x512 Concrete To Stone Connector2" 3 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_concrete_to_stone_connector2.mdl" "Modular City Street" "Street512x512 Concrete To Stone Connector2" 4 "NULL" "256,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_elevated128high.mdl" "Modular City Street" "Street512x512 Elevated128high" 1 "NULL" "0,256,56" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_elevated128high.mdl" "Modular City Street" "Street512x512 Elevated128high" 2 "NULL" "0,-256,-56" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_elevated192high.mdl" "Modular City Street" "Street512x512 Elevated192high" 1 "NULL" "0,256,88" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_elevated192high.mdl" "Modular City Street" "Street512x512 Elevated192high" 2 "NULL" "0,-256,-88" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_elevated256high.mdl" "Modular City Street" "Street512x512 Elevated256high" 1 "NULL" "0,256,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_elevated256high.mdl" "Modular City Street" "Street512x512 Elevated256high" 2 "NULL" "0,-256,-120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_elevated64high.mdl" "Modular City Street" "Street512x512 Elevated64high" 1 "NULL" "0,256,24" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x512_elevated64high.mdl" "Modular City Street" "Street512x512 Elevated64high" 2 "NULL" "0,-256,-24" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768.mdl" "Modular City Street" "Street512x768" 1 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768.mdl" "Modular City Street" "Street512x768" 2 "NULL" "0, 256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768_elevated128high.mdl" "Modular City Street" "Street512x768 Elevated128high" 1 "NULL" "0,256,56" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768_elevated128high.mdl" "Modular City Street" "Street512x768 Elevated128high" 2 "NULL" "0,-256,-56" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768_elevated192high.mdl" "Modular City Street" "Street512x768 Elevated192high" 1 "NULL" "0,256,88" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768_elevated192high.mdl" "Modular City Street" "Street512x768 Elevated192high" 2 "NULL" "0,-256,-88" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768_elevated256high.mdl" "Modular City Street" "Street512x768 Elevated256high" 1 "NULL" "0,256,120" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768_elevated256high.mdl" "Modular City Street" "Street512x768 Elevated256high" 2 "NULL" "0,-256,-120" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768_elevated64high.mdl" "Modular City Street" "Street512x768 Elevated64high" 1 "NULL" "0,256,24" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street512x768_elevated64high.mdl" "Modular City Street" "Street512x768 Elevated64high" 2 "NULL" "0,-256,-24" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street64x512.mdl" "Modular City Street" "Street64x512" 1 "NULL" "0,-32,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street64x512.mdl" "Modular City Street" "Street64x512" 2 "NULL" "0, 32,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street64x768.mdl" "Modular City Street" "Street64x768" 1 "NULL" "0,-32,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street64x768.mdl" "Modular City Street" "Street64x768" 2 "NULL" "0, 32,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768_endcap_fancy1.mdl" "Modular City Street" "Street768 Endcap Fancy1" 1 "NULL" "0,-192,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768_endcap_fancy2.mdl" "Modular City Street" "Street768 Endcap Fancy2" 1 "NULL" "0,-192,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768_endcap_simple1.mdl" "Modular City Street" "Street768 Endcap Simple1" 1 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768_endcap_simple2.mdl" "Modular City Street" "Street768 Endcap Simple2" 1 "NULL" "0,-64,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768_fork.mdl" "Modular City Street" "Street768 Fork" 1 "NULL" "0,-655,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768_fork.mdl" "Modular City Street" "Street768 Fork" 2 "NULL" " 994,655,-0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768_fork.mdl" "Modular City Street" "Street768 Fork" 3 "NULL" "-994,655,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x512.mdl" "Modular City Street" "Street768x512" 1 "NULL" "0,-384,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x512.mdl" "Modular City Street" "Street768x512" 2 "NULL" "0, 384,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768.mdl" "Modular City Street" "Street768x768" 1 "NULL" "0,-384,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768.mdl" "Modular City Street" "Street768x768" 2 "NULL" "0, 384,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector1.mdl" "Modular City Street" "Street768x768 Concrete To Stone Connector1" 1 "NULL" "0, 384,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector1.mdl" "Modular City Street" "Street768x768 Concrete To Stone Connector1" 2 "NULL" "0,-384,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector1.mdl" "Modular City Street" "Street768x768 Concrete To Stone Connector1" 3 "NULL" "384,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector2.mdl" "Modular City Street" "Street768x768 Concrete To Stone Connector2" 1 "NULL" "0, 384,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector2.mdl" "Modular City Street" "Street768x768 Concrete To Stone Connector2" 2 "NULL" "-384,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector2.mdl" "Modular City Street" "Street768x768 Concrete To Stone Connector2" 3 "NULL" "0,-384,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street768x768_concrete_to_stone_connector2.mdl" "Modular City Street" "Street768x768 Concrete To Stone Connector2" 4 "NULL" "384,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_4wayintersection512x512.mdl" "Modular City Street" "Street 4wayintersection512x512" 1 "NULL" "0, 256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_4wayintersection512x512.mdl" "Modular City Street" "Street 4wayintersection512x512" 2 "NULL" "-256,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_4wayintersection512x512.mdl" "Modular City Street" "Street 4wayintersection512x512" 3 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_4wayintersection512x512.mdl" "Modular City Street" "Street 4wayintersection512x512" 4 "NULL" "256,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_4wayintersection768x768.mdl" "Modular City Street" "Street 4wayintersection768x768" 1 "NULL" "0, 384,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_4wayintersection768x768.mdl" "Modular City Street" "Street 4wayintersection768x768" 2 "NULL" "-384,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_4wayintersection768x768.mdl" "Modular City Street" "Street 4wayintersection768x768" 3 "NULL" "0,-384,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_4wayintersection768x768.mdl" "Modular City Street" "Street 4wayintersection768x768" 4 "NULL" "384,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_512_to_768_connector1.mdl" "Modular City Street" "Street 512 To 768 Connector1" 1 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_512_to_768_connector1.mdl" "Modular City Street" "Street 512 To 768 Connector1" 2 "NULL" "384, 0, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_512_to_768_connector1.mdl" "Modular City Street" "Street 512 To 768 Connector1" 3 "NULL" "0, 256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_512_to_768_connector2.mdl" "Modular City Street" "Street 512 To 768 Connector2" 1 "NULL" "0, 256,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_512_to_768_connector2.mdl" "Modular City Street" "Street 512 To 768 Connector2" 2 "NULL" "-384,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_512_to_768_connector2.mdl" "Modular City Street" "Street 512 To 768 Connector2" 3 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_512_to_768_connector2.mdl" "Modular City Street" "Street 512 To 768 Connector2" 4 "NULL" "384,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_tjunction512x512.mdl" "Modular City Street" "Street Tjunction512x512" 1 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_tjunction512x512.mdl" "Modular City Street" "Street Tjunction512x512" 2 "NULL" "256, 0, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_tjunction512x512.mdl" "Modular City Street" "Street Tjunction512x512" 3 "NULL" "-256, 0, 0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_tjunction768x768.mdl" "Modular City Street" "Street Tjunction768x768" 1 "NULL" "0,-384,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_tjunction768x768.mdl" "Modular City Street" "Street Tjunction768x768" 2 "NULL" "384, 0, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_tjunction768x768.mdl" "Modular City Street" "Street Tjunction768x768" 3 "NULL" "-384,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_turn512x512.mdl" "Modular City Street" "Street Turn512x512" 1 "NULL" "0,-256,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_turn512x512.mdl" "Modular City Street" "Street Turn512x512" 2 "NULL" "256, 0, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_turn768x768.mdl" "Modular City Street" "Street Turn768x768" 1 "NULL" "0,-384,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/propper/dingles_modular_streets/street_turn768x768.mdl" "Modular City Street" "Street Turn768x768" 2 "NULL" "384, 0, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelcap.mdl" "Modular Sewer" "Cap" 1 "NULL" "113.96,0,1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelexit.mdl" "Modular Sewer" "Exit" 1 "NULL" "-2.657,0,1" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunneli.mdl" "Modular Sewer" "I" 1 "NULL" " 113.96,0,1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunneli.mdl" "Modular Sewer" "I" 2 "NULL" "-113.96,0,1" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelr.mdl" "Modular Sewer" "R" 1 "NULL" "0.08838,0.09961,1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelr.mdl" "Modular Sewer" "R" 2 "NULL" "-113.87988,114.07129,1" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelt.mdl" "Modular Sewer" "T" 1 "NULL" " 113.96,0,1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelt.mdl" "Modular Sewer" "T" 2 "NULL" "0,-113.96,1" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelt.mdl" "Modular Sewer" "T" 3 "NULL" "-113.96,0,1" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelx.mdl" "Modular Sewer" "X" 1 "NULL" "113.96,0,1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelx.mdl" "Modular Sewer" "X" 2 "NULL" "0,113.96,1" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelx.mdl" "Modular Sewer" "X" 3 "NULL" "0,-113.96,1" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/sewerpack/sewertunnelx.mdl" "Modular Sewer" "X" 4 "NULL" "-113.96,0,1" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_cross_128.mdl" "Mr.Train's G-Gauge" "Cross 128" 1 "NULL" " 64, 0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_cross_128.mdl" "Mr.Train's G-Gauge" "Cross 128" 2 "NULL" " 0 , 64,1.516" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_cross_128.mdl" "Mr.Train's G-Gauge" "Cross 128" 3 "NULL" "-64, 0,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_cross_128.mdl" "Mr.Train's G-Gauge" "Cross 128" 4 "NULL" " 0 ,-64,1.516" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_ramp_1.mdl" "Mr.Train's G-Gauge" "Ramp 1" 1 "NULL" " 16,0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_ramp_1.mdl" "Mr.Train's G-Gauge" "Ramp 1" 2 "NULL" "-16,0,3.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_ramp_2.mdl" "Mr.Train's G-Gauge" "Ramp 2" 1 "NULL" " 16,0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_ramp_2.mdl" "Mr.Train's G-Gauge" "Ramp 2" 2 "NULL" "-16,0,4.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_ramp_3.mdl" "Mr.Train's G-Gauge" "Ramp 3" 1 "NULL" " 16,0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_ramp_3.mdl" "Mr.Train's G-Gauge" "Ramp 3" 2 "NULL" "-16,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_s_left_22_5.mdl" "Mr.Train's G-Gauge" "S Left 22 5" 1 "NULL" " 256, 39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_s_left_22_5.mdl" "Mr.Train's G-Gauge" "S Left 22 5" 2 "NULL" "-256,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_s_right_22_5.mdl" "Mr.Train's G-Gauge" "S Right 22 5" 1 "NULL" " 256,-39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_s_right_22_5.mdl" "Mr.Train's G-Gauge" "S Right 22 5" 2 "NULL" "-256, 39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_1024.mdl" "Mr.Train's G-Gauge" "Straight 1024" 1 "NULL" " 512, 0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_1024.mdl" "Mr.Train's G-Gauge" "Straight 1024" 2 "NULL" "-512, 0,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_128.mdl" "Mr.Train's G-Gauge" "Straight 128" 1 "NULL" " 64,0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_128.mdl" "Mr.Train's G-Gauge" "Straight 128" 2 "NULL" "-64,0,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_2048.mdl" "Mr.Train's G-Gauge" "Straight 2048" 1 "NULL" " 1024,0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_2048.mdl" "Mr.Train's G-Gauge" "Straight 2048" 2 "NULL" "-1024,0,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_256.mdl" "Mr.Train's G-Gauge" "Straight 256" 1 "NULL" " 128, 0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_256.mdl" "Mr.Train's G-Gauge" "Straight 256" 2 "NULL" "-128, 0,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_32.mdl" "Mr.Train's G-Gauge" "Straight 32" 1 "NULL" " 16,0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_32.mdl" "Mr.Train's G-Gauge" "Straight 32" 2 "NULL" "-16,0,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_512.mdl" "Mr.Train's G-Gauge" "Straight 512" 1 "NULL" " 256, 0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_512.mdl" "Mr.Train's G-Gauge" "Straight 512" 2 "NULL" "-256, 0,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_64.mdl" "Mr.Train's G-Gauge" "Straight 64" 1 "NULL" " 32,0,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_straight_64.mdl" "Mr.Train's G-Gauge" "Straight 64" 2 "NULL" "-32,0,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl" "Mr.Train's G-Gauge" "Switch 1 Left 1" 1 "NULL" " 256,39 ,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl" "Mr.Train's G-Gauge" "Switch 1 Left 1" 2 "NULL" " 0,39 ,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl" "Mr.Train's G-Gauge" "Switch 1 Left 1" 3 "NULL" "-256,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl" "Mr.Train's G-Gauge" "Switch 1 Left 2" 1 "NULL" " 256,39 ,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl" "Mr.Train's G-Gauge" "Switch 1 Left 2" 2 "NULL" " 0,39 ,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl" "Mr.Train's G-Gauge" "Switch 1 Left 2" 3 "NULL" "-256,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl" "Mr.Train's G-Gauge" "Switch 1 Right 1" 1 "NULL" " 256,-39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl" "Mr.Train's G-Gauge" "Switch 1 Right 1" 2 "NULL" " 0,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl" "Mr.Train's G-Gauge" "Switch 1 Right 1" 3 "NULL" "-256, 39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl" "Mr.Train's G-Gauge" "Switch 1 Right 2" 1 "NULL" " 256,-39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl" "Mr.Train's G-Gauge" "Switch 1 Right 2" 2 "NULL" " 0,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl" "Mr.Train's G-Gauge" "Switch 1 Right 2" 3 "NULL" "-256, 39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl" "Mr.Train's G-Gauge" "Switch 2 Left 1" 1 "NULL" "195.938,39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl" "Mr.Train's G-Gauge" "Switch 2 Left 1" 2 "NULL" "195.938,-39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl" "Mr.Train's G-Gauge" "Switch 2 Left 1" 3 "NULL" "-195.937,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl" "Mr.Train's G-Gauge" "Switch 2 Left 1" 4 "NULL" "-195.937,39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl" "Mr.Train's G-Gauge" "Switch 2 Left 2" 1 "NULL" "195.938,39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl" "Mr.Train's G-Gauge" "Switch 2 Left 2" 2 "NULL" "195.938,-39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl" "Mr.Train's G-Gauge" "Switch 2 Left 2" 3 "NULL" "-195.937,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl" "Mr.Train's G-Gauge" "Switch 2 Left 2" 4 "NULL" "-195.937,39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl" "Mr.Train's G-Gauge" "Switch 2 Right 1" 1 "NULL" "195.938,39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl" "Mr.Train's G-Gauge" "Switch 2 Right 1" 2 "NULL" "195.938,-39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl" "Mr.Train's G-Gauge" "Switch 2 Right 1" 3 "NULL" "-195.937,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl" "Mr.Train's G-Gauge" "Switch 2 Right 1" 4 "NULL" "-195.937,39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl" "Mr.Train's G-Gauge" "Switch 2 Right 2" 1 "NULL" "195.938,39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl" "Mr.Train's G-Gauge" "Switch 2 Right 2" 2 "NULL" "195.938,-39,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl" "Mr.Train's G-Gauge" "Switch 2 Right 2" 3 "NULL" "-195.937,-39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl" "Mr.Train's G-Gauge" "Switch 2 Right 2" 4 "NULL" "-195.937,39,1.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_left_22_5.mdl" "Mr.Train's G-Gauge" "Turn Left 22 5" 1 "NULL" "263.75, 248.25,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_left_22_5.mdl" "Mr.Train's G-Gauge" "Turn Left 22 5" 2 "NULL" "67.855,209.265,1.516" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_left_45.mdl" "Mr.Train's G-Gauge" "Turn Left 45" 1 "NULL" "263.75, 248.25,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_left_45.mdl" "Mr.Train's G-Gauge" "Turn Left 45" 2 "NULL" "-98.326,98.323,1.516" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_left_90.mdl" "Mr.Train's G-Gauge" "Turn Left 90" 1 "NULL" "263.75, 248.25,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_left_90.mdl" "Mr.Train's G-Gauge" "Turn Left 90" 2 "NULL" "-248.25,-263.75,1.516" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_right_22_5.mdl" "Mr.Train's G-Gauge" "Turn Right 22 5" 1 "NULL" "263.75,-248.25,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_right_22_5.mdl" "Mr.Train's G-Gauge" "Turn Right 22 5" 2 "NULL" "67.872,-209.299,1.516" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_right_45.mdl" "Mr.Train's G-Gauge" "Turn Right 45" 1 "NULL" "263.75,-248.25,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_right_45.mdl" "Mr.Train's G-Gauge" "Turn Right 45" 2 "NULL" "-98.302,-98.302,1.516" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_right_90.mdl" "Mr.Train's G-Gauge" "Turn Right 90" 1 "NULL" "263.75,-248.25,1.516" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/g_gauge/track/g_gauge_track_turn_right_90.mdl" "Mr.Train's G-Gauge" "Turn Right 90" 2 "NULL" "-248.25,263.75,1.516" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_1024.mdl" "Mr.Train's M-Gauge" "Straight 1024" 1 "NULL" "512,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_1024.mdl" "Mr.Train's M-Gauge" "Straight 1024" 2 "NULL" "-512,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_128.mdl" "Mr.Train's M-Gauge" "Straight 128" 1 "NULL" "64,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_128.mdl" "Mr.Train's M-Gauge" "Straight 128" 2 "NULL" "-64,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_128_cross.mdl" "Mr.Train's M-Gauge" "Cross 128" 1 "NULL" "64,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_128_cross.mdl" "Mr.Train's M-Gauge" "Cross 128" 2 "NULL" "0,64,0.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_128_cross.mdl" "Mr.Train's M-Gauge" "Cross 128" 3 "NULL" "-64,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_128_cross.mdl" "Mr.Train's M-Gauge" "Cross 128" 4 "NULL" "0,-64,0.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_2048.mdl" "Mr.Train's M-Gauge" "Straight 2048" 1 "NULL" "1024,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_2048.mdl" "Mr.Train's M-Gauge" "Straight 2048" 2 "NULL" "-1024,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_256.mdl" "Mr.Train's M-Gauge" "Straight 256" 1 "NULL" "128,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_256.mdl" "Mr.Train's M-Gauge" "Straight 256" 2 "NULL" "-128,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_32.mdl" "Mr.Train's M-Gauge" "Straight 32" 1 "NULL" "16,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_32.mdl" "Mr.Train's M-Gauge" "Straight 32" 2 "NULL" "-16,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_4096.mdl" "Mr.Train's M-Gauge" "Straight 4096" 1 "NULL" "2048,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_4096.mdl" "Mr.Train's M-Gauge" "Straight 4096" 2 "NULL" "-2048,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_512.mdl" "Mr.Train's M-Gauge" "Straight 512" 1 "NULL" "256,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_512.mdl" "Mr.Train's M-Gauge" "Straight 512" 2 "NULL" "-256,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_64.mdl" "Mr.Train's M-Gauge" "Straight 64" 1 "NULL" "32,0,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_64.mdl" "Mr.Train's M-Gauge" "Straight 64" 2 "NULL" "-32,0,0.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_1024.mdl" "Mr.Train's M-Gauge" "Left 1024" 1 "NULL" "518.5,505.5,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_1024.mdl" "Mr.Train's M-Gauge" "Left 1024" 2 "NULL" "-505.5,-518.5,0.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_1024_45.mdl" "Mr.Train's M-Gauge" "Left 1024 45" 1 "NULL" "518.5,505.5,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_1024_45.mdl" "Mr.Train's M-Gauge" "Left 1024 45" 2 "NULL" "-205.608,205.607,0.014" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_256.mdl" "Mr.Train's M-Gauge" "Left 256" 1 "NULL" "134.497,121.499,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_256.mdl" "Mr.Train's M-Gauge" "Left 256" 2 "NULL" "-121.5,-134.5,0.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_512.mdl" "Mr.Train's M-Gauge" "Left 512" 1 "NULL" "262.5,249.5,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_512.mdl" "Mr.Train's M-Gauge" "Left 512" 2 "NULL" "-249.5,-262.5,0.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_512_45.mdl" "Mr.Train's M-Gauge" "Left 512 45" 1 "NULL" "262.5,-249.497,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_512_45.mdl" "Mr.Train's M-Gauge" "Left 512 45" 2 "NULL" "-99.51,-99.507,0.015" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_768.mdl" "Mr.Train's M-Gauge" "Left 768" 1 "NULL" "383.625,370.625,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_768.mdl" "Mr.Train's M-Gauge" "Left 768" 2 "NULL" "-370.625,-383.625,0.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_768_45.mdl" "Mr.Train's M-Gauge" "Left 768 45" 1 "NULL" "383.625,370.625,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_left_768_45.mdl" "Mr.Train's M-Gauge" "Left 768 45" 2 "NULL" "-149.73,149.729,0.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_1024.mdl" "Mr.Train's M-Gauge" "Right 1024" 1 "NULL" "518.5,-505.5,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_1024.mdl" "Mr.Train's M-Gauge" "Right 1024" 2 "NULL" "-505.5,518.5,0.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_1024_45.mdl" "Mr.Train's M-Gauge" "Right 1024 45" 1 "NULL" "518.5,-505.498,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_1024_45.mdl" "Mr.Train's M-Gauge" "Right 1024 45" 2 "NULL" "-205.621,-205.618,0.014" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_256.mdl" "Mr.Train's M-Gauge" "Right 256" 1 "NULL" "134.5,-121.5,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_256.mdl" "Mr.Train's M-Gauge" "Right 256" 2 "NULL" "-121.5,134.5,0.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_512.mdl" "Mr.Train's M-Gauge" "Right 512" 1 "NULL" "262.5,-249.5,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_512.mdl" "Mr.Train's M-Gauge" "Right 512" 2 "NULL" "-249.5,262.5,0.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_768.mdl" "Mr.Train's M-Gauge" "Right 768" 1 "NULL" "383.625,-370.625,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_768.mdl" "Mr.Train's M-Gauge" "Right 768" 2 "NULL" "-370.625,383.625,0.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_768_45.mdl" "Mr.Train's M-Gauge" "Right 768 45" 1 "NULL" "383.625,-370.625,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_right_768_45.mdl" "Mr.Train's M-Gauge" "Right 768 45" 2 "NULL" "-149.758,-149.751,0.012" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover.mdl" "Mr.Train's M-Gauge" "Switch Cross" 1 "NULL" "203,-75,-2.484" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover.mdl" "Mr.Train's M-Gauge" "Switch Cross" 2 "NULL" "203,75,-2.484" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover.mdl" "Mr.Train's M-Gauge" "Switch Cross" 3 "NULL" "-203,75,-2.484" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover.mdl" "Mr.Train's M-Gauge" "Switch Cross" 4 "NULL" "-203,-75,-2.484" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl" "Mr.Train's M-Gauge" "Switch Cross Sl" 1 "NULL" "75,-75,-2.484" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl" "Mr.Train's M-Gauge" "Switch Cross Sl" 2 "NULL" "203,75,-2.484" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl" "Mr.Train's M-Gauge" "Switch Cross Sl" 3 "NULL" "-75,75,-2.484" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl" "Mr.Train's M-Gauge" "Switch Cross Sl" 4 "NULL" "-203,-75,-2.484" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl" "Mr.Train's M-Gauge" "Switch Cross Sr" 1 "NULL" "203,-75,-2.484" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl" "Mr.Train's M-Gauge" "Switch Cross Sr" 2 "NULL" "75,75,-2.484" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl" "Mr.Train's M-Gauge" "Switch Cross Sr" 3 "NULL" "-203,75,-2.484" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl" "Mr.Train's M-Gauge" "Switch Cross Sr" 4 "NULL" "-75,-75,-2.485" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_lefthand.mdl" "Mr.Train's M-Gauge" "Switch Left" 1 "NULL" "0,-10,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_lefthand.mdl" "Mr.Train's M-Gauge" "Switch Left" 2 "NULL" "-256,-10,0.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_lefthand.mdl" "Mr.Train's M-Gauge" "Switch Left" 3 "NULL" "-384,-160,0.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_righthand.mdl" "Mr.Train's M-Gauge" "Switch Right" 1 "NULL" "0,10,0.016" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_righthand.mdl" "Mr.Train's M-Gauge" "Switch Right" 2 "NULL" "-384,160,0.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props/m_gauge/track/m_gauge_switch_righthand.mdl" "Mr.Train's M-Gauge" "Switch Right" 3 "NULL" "-256,10,0.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_1024.mdl" "PHX Metal" "Straight 1024" 1 "NULL" " 511.754761,-4.7e-005,9.215" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_1024.mdl" "PHX Metal" "Straight 1024" 2 "NULL" "-512.240601,-0.050828,9.215" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_128.mdl" "PHX Metal" "Straight 128" 1 "NULL" " 63.75531, 0.001953,9.215" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_128.mdl" "PHX Metal" "Straight 128" 2 "NULL" "-64.240356,-0.005125,9.215" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_2048.mdl" "PHX Metal" "Straight 2048" 1 "NULL" " 1023.755066,0.000642,9.215" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_2048.mdl" "PHX Metal" "Straight 2048" 2 "NULL" "-1024.242676,-0.109433,9.215" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_256.mdl" "PHX Metal" "Straight 256" 1 "NULL" " 127.754944, 0.001953,9.215" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_256.mdl" "PHX Metal" "Straight 256" 2 "NULL" " -128.245117,-0.012207,9.215" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_32.mdl" "PHX Metal" "Straight 32" 1 "-0.327,-61.529,8.714" " 15.755127,0.001953,9.215" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_32.mdl" "PHX Metal" "Straight 32" 2 "-0.327, 61.529,8.714" "-16.239746,0.000244,9.215" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_4096.mdl" "PHX Metal" "Straight 4096" 1 "NULL" " 2047.755249, 0.001923,9.215" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_4096.mdl" "PHX Metal" "Straight 4096" 2 "NULL" "-2048.240479,-0.225247,9.215" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_512.mdl" "PHX Metal" "Straight 512" 1 "NULL" " 255.754791, 0.001465,9.215" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_512.mdl" "PHX Metal" "Straight 512" 2 "NULL" "-256.242401,-0.026855,9.215" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_64.mdl" "PHX Metal" "Straight 64" 1 "NULL" " 31.999878, 0.001960,9.215" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/track_64.mdl" "PHX Metal" "Straight 64" 2 "NULL" "-32.000275,-0.001469,9.215" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail1.mdl" "PHX Monorail" "Straight Short" 1 "NULL" "229.885559,0.23999,13.87915" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail1.mdl" "PHX Monorail" "Straight Short" 2 "NULL" "-228.885254,0.239726,13.87915" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail2.mdl" "PHX Monorail" "Straight Middle" 1 "NULL" "0.239726,-462.635468,13.879296" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail2.mdl" "PHX Monorail" "Straight Middle" 2 "NULL" "0.239914,464.885315,13.879209" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail3.mdl" "PHX Monorail" "Straight Long" 1 "NULL" "0.239949,-934.135559,13.879116" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail3.mdl" "PHX Monorail" "Straight Long" 2 "NULL" "0.239705, 930.885315,13.879150" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail4.mdl" "PHX Monorail" "Straight Very Long" 1 "NULL" "0.239664,-1867.13562,13.879143" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail4.mdl" "PHX Monorail" "Straight Very Long" 2 "NULL" "0.239664,1872.885376,13.879150" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail_curve.mdl" "PHX Monorail" "Turn 90" 1 "NULL" "-0.030518,-605.638184,13.880554" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail_curve.mdl" "PHX Monorail" "Turn 90" 2 "NULL" "-605.380859,-0.307583,13.881714" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail_curve2.mdl" "PHX Monorail" "Turn 45" 1 "NULL" "-0.030396,-605.638428,13.881409" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/monorail_curve2.mdl" "PHX Monorail" "Turn 45" 2 "NULL" "-428.018524,-428.362335,13.881714" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/iron_beam1.mdl" "PHX Monorail Beam" "Iron Beam1" 1 "NULL" " 22.411, 0.001, 5.002" "0, 0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/iron_beam1.mdl" "PHX Monorail Beam" "Iron Beam1" 2 "NULL" "-22.413, 0.001, 5.002" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/iron_beam2.mdl" "PHX Monorail Beam" "Iron Beam2" 1 "NULL" " 45.298, 0.001, 5.002" "0, 0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/iron_beam2.mdl" "PHX Monorail Beam" "Iron Beam2" 2 "NULL" "-46.968, 0.001, 5.002" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/iron_beam3.mdl" "PHX Monorail Beam" "Iron Beam3" 1 "NULL" " 93.069, 0, 5.002" "0, 0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/iron_beam3.mdl" "PHX Monorail Beam" "Iron Beam3" 2 "NULL" "-94.079, 0.002, 5.002" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/iron_beam4.mdl" "PHX Monorail Beam" "Iron Beam4" 1 "NULL" " 175.507, 0.001, 5.002" "0, 0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/iron_beam4.mdl" "PHX Monorail Beam" "Iron Beam4" 2 "NULL" "-201.413, 0.001, 5.002" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_16x.mdl" "PHX Regular" "16x" 1 "NULL" "2029.79824,0,12.548828" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_16x.mdl" "PHX Regular" "16x" 2 "NULL" "-370.03799,0,12.548828" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_1x.mdl" "PHX Regular" "1x" 1 "NULL" " 79.93032,0,12.548828" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_1x.mdl" "PHX Regular" "1x" 2 "NULL" "-70.05904,0,12.548828" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_225_down.mdl" "PHX Regular" "225 Down" 1 "NULL" "-75.016,0,64.57" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_225_down.mdl" "PHX Regular" "225 Down" 2 "NULL" "4.096,0,48.791" "22.5,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_225_up.mdl" "PHX Regular" "225 Up" 1 "NULL" "-75.016,0,11.212" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_225_up.mdl" "PHX Regular" "225 Up" 2 "NULL" "4.16287,0,27.05461" "-22.5,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_2x.mdl" "PHX Regular" "2x" 1 "NULL" "229.92037,0,12.548828" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_2x.mdl" "PHX Regular" "2x" 2 "NULL" "-70.05904,0,12.548828" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_45_down.mdl" "PHX Regular" "45 Down" 1 "-75.016,0,64.568" "-75.013,-0.002,64.568" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_45_down.mdl" "PHX Regular" "45 Down" 2 "NULL" "71.04594,0,3.95992" "45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_45_up.mdl" "PHX Regular" "45 Up" 1 "NULL" "-75.013,0,11.218" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_45_up.mdl" "PHX Regular" "45 Up" 2 "NULL" "71.173,0,71.909" "-45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_4x.mdl" "PHX Regular" "4x" 1 "NULL" "229.92037,0,12.548828" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_4x.mdl" "PHX Regular" "4x" 2 "NULL" "-370.03808,0,12.548828" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_8x.mdl" "PHX Regular" "8x" 1 "NULL" "829.87936,0,12.548828" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_8x.mdl" "PHX Regular" "8x" 2 "NULL" "-370.03805,0,12.548828" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_crossing.mdl" "PHX Regular" "Cross 90" 1 "NULL" "74.97414,0,12.548828" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_crossing.mdl" "PHX Regular" "Cross 90" 2 "NULL" "-0.02246,74.99988,12.548828" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_crossing.mdl" "PHX Regular" "Cross 90" 3 "NULL" "-75.01485,0,12.548828" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_crossing.mdl" "PHX Regular" "Cross 90" 4 "NULL" "-0.02246,-74.987,12.548828" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_pass.mdl" "PHX Regular" "Cross Road" 1 "NULL" "229.92107,0,12.548828" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_pass.mdl" "PHX Regular" "Cross Road" 2 "NULL" "-370.03738,0,12.548828" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_single.mdl" "PHX Regular" "Single" 1 "-0.327,-61.529,8.714" " 15.45284,0,12.548828" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_single.mdl" "PHX Regular" "Single" 2 "-0.327, 61.529,8.714" "-16.09597,0,12.548828" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_switch.mdl" "PHX Regular" "Switch Right" 1 "NULL" " 829.88009,0,11.218994" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_switch.mdl" "PHX Regular" "Switch Right" 2 "NULL" "-370.03738,0,11.218994" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_switch.mdl" "PHX Regular" "Switch Right" 3 "NULL" "-158.32591,338.09229,11.21899" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_switch2.mdl" "PHX Regular" "Switch Left [X]" 1 "NULL" " 829.88009,0,11.218994" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_switch2.mdl" "PHX Regular" "Switch Left [X]" 2 "NULL" "-370.03738,0,11.218994" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_switch2.mdl" "PHX Regular" "Switch Left [X]" 3 "NULL" "-158.32668,-338.09521,11.21899" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_turn45.mdl" "PHX Regular" "Turn 45" 1 "NULL" "733.00021,-265.36572,11.218994" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_turn45.mdl" "PHX Regular" "Turn 45" 2 "NULL" "-83.2627,72.74402,11.218994" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_turn90.mdl" "PHX Regular" "Turn 90" 1 "NULL" "733.00015,-265.36475,11.218994" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_turn90.mdl" "PHX Regular" "Turn 90" 2 "NULL" "-421.37549,889.00677,11.218994" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_x.mdl" "PHX Regular" "Cross 45" 1 "NULL" "250.47439,49.613525,11.214844" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_x.mdl" "PHX Regular" "Cross 45" 2 "NULL" "-261.62405,261.73975,11.214844" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_x.mdl" "PHX Regular" "Cross 45" 3 "NULL" "-349.48406,49.613525,11.214844" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/trains/tracks/track_x.mdl" "PHX Regular" "Cross 45" 4 "NULL" "162.61111,-162.49341,11.214844" "0,-45,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/huge/road_curve.mdl" "PHX Road" "Road Curve" 1 "NULL" "162.813, 379.277, 1.879" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/huge/road_curve.mdl" "PHX Road" "Road Curve" 2 "NULL" "-363.22, -146.757, 1.879" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/huge/road_long.mdl" "PHX Road" "Road Long" 1 "NULL" "0, 1198.773, 1.765" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/huge/road_long.mdl" "PHX Road" "Road Long" 2 "NULL" "0,-1198.773, 1.765" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/huge/road_medium.mdl" "PHX Road" "Road Medium" 1 "NULL" "0, 599.386, 1.765" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/huge/road_medium.mdl" "PHX Road" "Road Medium" 2 "NULL" "0,-599.386, 1.765" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/huge/road_short.mdl" "PHX Road" "Road Short" 1 "NULL" "0, 299.693, 1.765" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/huge/road_short.mdl" "PHX Road" "Road Short" 2 "NULL" "0,-299.693, 1.765" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/big_ramp.mdl" "PHX Road" "Big Ramp" 1 "NULL" "-569.177, -7.199953, -3.075" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/big_ramp.mdl" "PHX Road" "Big Ramp" 2 "NULL" "625.022, -7.199953, 472.427" "-45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/small_ramp.mdl" "PHX Road" "Small Ramp" 1 "NULL" "-284.589, -3.599976, -1.672" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/misc/small_ramp.mdl" "PHX Road" "Small Ramp" 2 "NULL" " 312.608, -3.599976, 236.11" "-45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_angle180.mdl" "PHX Tubes Miscellaneous" "Glass Angle180" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_angle180.mdl" "PHX Tubes Miscellaneous" "Glass Angle180" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_angle360.mdl" "PHX Tubes Miscellaneous" "Glass Angle360" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_angle360.mdl" "PHX Tubes Miscellaneous" "Glass Angle360" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_angle90.mdl" "PHX Tubes Miscellaneous" "Glass Angle90" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_angle90.mdl" "PHX Tubes Miscellaneous" "Glass Angle90" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve180x1.mdl" "PHX Tubes Miscellaneous" "Glass Curve180x1" 1 "NULL" "31.222,33.667,47.543" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve180x1.mdl" "PHX Tubes Miscellaneous" "Glass Curve180x1" 2 "NULL" "31.222,33.667,0.093" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve180x2.mdl" "PHX Tubes Miscellaneous" "Glass Curve180x2" 1 "NULL" "31.222,33.668,94.993" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve180x2.mdl" "PHX Tubes Miscellaneous" "Glass Curve180x2" 2 "NULL" "31.222,33.667,0.093" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve360x1.mdl" "PHX Tubes Miscellaneous" "Glass Curve360x1" 1 "NULL" "0.02,0,47.538" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve360x1.mdl" "PHX Tubes Miscellaneous" "Glass Curve360x1" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve360x2.mdl" "PHX Tubes Miscellaneous" "Glass Curve360x2" 1 "NULL" "0.02,0,95.076" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve360x2.mdl" "PHX Tubes Miscellaneous" "Glass Curve360x2" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve90x1.mdl" "PHX Tubes Miscellaneous" "Glass Curve90x1" 1 "NULL" "31.246,33.667,47.541" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve90x1.mdl" "PHX Tubes Miscellaneous" "Glass Curve90x1" 2 "NULL" "31.222,33.69,0.095" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve90x2.mdl" "PHX Tubes Miscellaneous" "Glass Curve90x2" 1 "NULL" "31.246,33.667,95.083" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_curve90x2.mdl" "PHX Tubes Miscellaneous" "Glass Curve90x2" 2 "NULL" "31.241,33.671,0.183" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_dome180.mdl" "PHX Tubes Miscellaneous" "Glass Dome180" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_dome360.mdl" "PHX Tubes Miscellaneous" "Glass Dome360" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/glass/glass_dome90.mdl" "PHX Tubes Miscellaneous" "Glass Dome90" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_angle180.mdl" "PHX Tubes Miscellaneous" "Metal Angle180" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_angle180.mdl" "PHX Tubes Miscellaneous" "Metal Angle180" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_angle360.mdl" "PHX Tubes Miscellaneous" "Metal Angle360" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_angle360.mdl" "PHX Tubes Miscellaneous" "Metal Angle360" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_angle90.mdl" "PHX Tubes Miscellaneous" "Metal Angle90" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_angle90.mdl" "PHX Tubes Miscellaneous" "Metal Angle90" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_dome180.mdl" "PHX Tubes Miscellaneous" "Metal Dome180" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_dome360.mdl" "PHX Tubes Miscellaneous" "Metal Dome360" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_dome90.mdl" "PHX Tubes Miscellaneous" "Metal Dome90" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve" 1 "NULL" "31.246,33.667,47.541" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve" 2 "NULL" "31.222,33.69,0.095" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve180.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve180" 1 "NULL" "0.02,0,47.538" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve180.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve180" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve180x2.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve180x2" 1 "NULL" "0.02,0,95.081" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve180x2.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve180x2" 2 "NULL" "0.02,0,0.089" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve2x2.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve2x2" 1 "NULL" "31.246,33.667,95.083" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve2x2.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve2x2" 2 "NULL" "31.241,33.671,0.183" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve360.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve360" 1 "NULL" "0.02,0,47.538" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve360.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve360" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve360x2.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve360x2" 1 "NULL" "0.02,0,95.076" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_plate_curve360x2.mdl" "PHX Tubes Miscellaneous" "Metal Plate Curve360x2" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle180x1.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle180x1" 1 "NULL" "31.222,33.667,47.543" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle180x1.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle180x1" 2 "NULL" "31.222,33.667,0.093" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle180x2.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle180x2" 1 "NULL" "31.222,33.668,94.993" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle180x2.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle180x2" 2 "NULL" "31.222,33.667,0.093" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle360x1.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle360x1" 1 "NULL" "0.02,0,47.538" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle360x1.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle360x1" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle360x2.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle360x2" 1 "NULL" "0.02,0,95.076" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle360x2.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle360x2" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle90x1.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle90x1" 1 "NULL" "31.246,33.667,47.541" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle90x1.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle90x1" 2 "NULL" "31.222,33.69,0.095" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle90x2.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle90x2" 1 "NULL" "31.246,33.667,95.083" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/metal_wire_angle90x2.mdl" "PHX Tubes Miscellaneous" "Metal Wire Angle90x2" 2 "NULL" "31.241,33.671,0.183" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_angle180.mdl" "PHX Tubes Miscellaneous" "Window Angle180" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_angle180.mdl" "PHX Tubes Miscellaneous" "Window Angle180" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_angle360.mdl" "PHX Tubes Miscellaneous" "Window Angle360" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_angle360.mdl" "PHX Tubes Miscellaneous" "Window Angle360" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_angle90.mdl" "PHX Tubes Miscellaneous" "Window Angle90" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_angle90.mdl" "PHX Tubes Miscellaneous" "Window Angle90" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve180x1.mdl" "PHX Tubes Miscellaneous" "Window Curve180x1" 1 "NULL" "31.222,33.667,47.543" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve180x1.mdl" "PHX Tubes Miscellaneous" "Window Curve180x1" 2 "NULL" "31.222,33.667,0.093" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve180x2.mdl" "PHX Tubes Miscellaneous" "Window Curve180x2" 1 "NULL" "31.222,33.668,94.993" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve180x2.mdl" "PHX Tubes Miscellaneous" "Window Curve180x2" 2 "NULL" "31.222,33.667,0.093" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve360x1.mdl" "PHX Tubes Miscellaneous" "Window Curve360x1" 1 "NULL" "0.02,0,47.538" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve360x1.mdl" "PHX Tubes Miscellaneous" "Window Curve360x1" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve360x2.mdl" "PHX Tubes Miscellaneous" "Window Curve360x2" 1 "NULL" "0.02,0,95.076" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve360x2.mdl" "PHX Tubes Miscellaneous" "Window Curve360x2" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve90x1.mdl" "PHX Tubes Miscellaneous" "Window Curve90x1" 1 "NULL" "31.246,33.667,47.541" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve90x1.mdl" "PHX Tubes Miscellaneous" "Window Curve90x1" 2 "NULL" "31.222,33.69,0.095" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve90x2.mdl" "PHX Tubes Miscellaneous" "Window Curve90x2" 1 "NULL" "31.246,33.667,95.083" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_curve90x2.mdl" "PHX Tubes Miscellaneous" "Window Curve90x2" 2 "NULL" "31.241,33.671,0.183" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_dome180.mdl" "PHX Tubes Miscellaneous" "Window Dome180" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_dome360.mdl" "PHX Tubes Miscellaneous" "Window Dome360" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/windows/window_dome90.mdl" "PHX Tubes Miscellaneous" "Window Dome90" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_angle180.mdl" "PHX Tubes Miscellaneous" "Wood Angle180" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_angle180.mdl" "PHX Tubes Miscellaneous" "Wood Angle180" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_angle360.mdl" "PHX Tubes Miscellaneous" "Wood Angle360" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_angle360.mdl" "PHX Tubes Miscellaneous" "Wood Angle360" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_angle90.mdl" "PHX Tubes Miscellaneous" "Wood Angle90" 1 "NULL" "-0.001,0,3.258" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_angle90.mdl" "PHX Tubes Miscellaneous" "Wood Angle90" 2 "NULL" "-0.001,0,0.255" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve180x1.mdl" "PHX Tubes Miscellaneous" "Wood Curve180x1" 1 "NULL" "0.02,0,47.538" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve180x1.mdl" "PHX Tubes Miscellaneous" "Wood Curve180x1" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve180x2.mdl" "PHX Tubes Miscellaneous" "Wood Curve180x2" 1 "NULL" "0.02,0,95.081" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve180x2.mdl" "PHX Tubes Miscellaneous" "Wood Curve180x2" 2 "NULL" "0.02,0,0.089" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve360x1.mdl" "PHX Tubes Miscellaneous" "Wood Curve360x1" 1 "NULL" "0.02,0,47.538" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve360x1.mdl" "PHX Tubes Miscellaneous" "Wood Curve360x1" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve360x2.mdl" "PHX Tubes Miscellaneous" "Wood Curve360x2" 1 "NULL" "0.02,0,95.076" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve360x2.mdl" "PHX Tubes Miscellaneous" "Wood Curve360x2" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve90x1.mdl" "PHX Tubes Miscellaneous" "Wood Curve90x1" 1 "NULL" "0.02,0,47.541" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve90x1.mdl" "PHX Tubes Miscellaneous" "Wood Curve90x1" 2 "NULL" "0.02,0, 0.095" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve90x2.mdl" "PHX Tubes Miscellaneous" "Wood Curve90x2" 1 "NULL" "0.02,0,95.083" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_curve90x2.mdl" "PHX Tubes Miscellaneous" "Wood Curve90x2" 2 "NULL" "0.02,0, 0.183" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_dome180.mdl" "PHX Tubes Miscellaneous" "Wood Dome180" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_dome360.mdl" "PHX Tubes Miscellaneous" "Wood Dome360" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_dome90.mdl" "PHX Tubes Miscellaneous" "Wood Dome90" 1 "NULL" "0,0,0.025" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle180x1.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle180x1" 1 "NULL" "31.222,33.667,47.543" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle180x1.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle180x1" 2 "NULL" "31.222,33.667,0.093" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle180x2.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle180x2" 1 "NULL" "31.222,33.668,94.993" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle180x2.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle180x2" 2 "NULL" "31.222,33.667,0.093" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle360x1.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle360x1" 1 "NULL" "0.02,0,47.538" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle360x1.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle360x1" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle360x2.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle360x2" 1 "NULL" "0.02,0,95.076" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle360x2.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle360x2" 2 "NULL" "0.02,0,0.089" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle90x1.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle90x1" 1 "NULL" "31.246,33.667,47.541" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle90x1.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle90x1" 2 "NULL" "31.222,33.69,0.095" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle90x2.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle90x2" 1 "NULL" "31.246,33.667,95.083" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_phx/construct/wood/wood_wire_angle90x2.mdl" "PHX Tubes Miscellaneous" "Wood Wire Angle90x2" 2 "NULL" "31.241,33.671,0.183" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole1x1a.mdl" "PHX Tubes Plastic" "Platehole1x1a" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole1x1a.mdl" "PHX Tubes Plastic" "Platehole1x1a" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole1x1b.mdl" "PHX Tubes Plastic" "Platehole1x1b" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole1x1b.mdl" "PHX Tubes Plastic" "Platehole1x1b" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole1x1c.mdl" "PHX Tubes Plastic" "Platehole1x1c" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole1x1c.mdl" "PHX Tubes Plastic" "Platehole1x1c" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole1x1d.mdl" "PHX Tubes Plastic" "Platehole1x1d" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole1x1d.mdl" "PHX Tubes Plastic" "Platehole1x1d" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole4x4.mdl" "PHX Tubes Plastic" "Platehole4x4" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole4x4.mdl" "PHX Tubes Plastic" "Platehole4x4" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole4x4b.mdl" "PHX Tubes Plastic" "Platehole4x4b" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole4x4b.mdl" "PHX Tubes Plastic" "Platehole4x4b" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole4x4c.mdl" "PHX Tubes Plastic" "Platehole4x4c" 1 "NULL" "47.45,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole4x4c.mdl" "PHX Tubes Plastic" "Platehole4x4c" 2 "NULL" "47.45,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole4x4d.mdl" "PHX Tubes Plastic" "Platehole4x4d" 1 "NULL" "47.45,47.45, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/platehole4x4d.mdl" "PHX Tubes Plastic" "Platehole4x4d" 2 "NULL" "47.45,47.45,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/shell2x2a.mdl" "PHX Tubes Plastic" "Shell2x2a" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/shell2x2b.mdl" "PHX Tubes Plastic" "Shell2x2b" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/shell2x2c.mdl" "PHX Tubes Plastic" "Shell2x2c" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/shell2x2d.mdl" "PHX Tubes Plastic" "Shell2x2d" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/shell2x2e.mdl" "PHX Tubes Plastic" "Shell2x2e" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/shell2x2x45.mdl" "PHX Tubes Plastic" "Shell2x2x45" 1 "0, -47.45, 0" "NULL" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/misc/shell2x2x45.mdl" "PHX Tubes Plastic" "Shell2x2x45" 2 "-33.552, -33.552, 0" "NULL" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/plates/platehole1x1.mdl" "PHX Tubes Plastic" "Platehole1x1" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/plates/platehole1x1.mdl" "PHX Tubes Plastic" "Platehole1x1" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/plates/platehole1x2.mdl" "PHX Tubes Plastic" "Platehole1x2" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/plates/platehole1x2.mdl" "PHX Tubes Plastic" "Platehole1x2" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/plates/platehole2x2.mdl" "PHX Tubes Plastic" "Platehole2x2" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/plates/platehole2x2.mdl" "PHX Tubes Plastic" "Platehole2x2" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/plates/platehole3.mdl" "PHX Tubes Plastic" "Platehole3" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/plates/platehole3.mdl" "PHX Tubes Plastic" "Platehole3" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle2x2.mdl" "PHX Tubes Plastic" "Circle2x2" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle2x2.mdl" "PHX Tubes Plastic" "Circle2x2" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle2x2b.mdl" "PHX Tubes Plastic" "Circle2x2b" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle2x2b.mdl" "PHX Tubes Plastic" "Circle2x2b" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle2x2c.mdl" "PHX Tubes Plastic" "Circle2x2c" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle2x2c.mdl" "PHX Tubes Plastic" "Circle2x2c" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle2x2d.mdl" "PHX Tubes Plastic" "Circle2x2d" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle2x2d.mdl" "PHX Tubes Plastic" "Circle2x2d" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle4x4.mdl" "PHX Tubes Plastic" "Circle4x4" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle4x4.mdl" "PHX Tubes Plastic" "Circle4x4" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle4x4b.mdl" "PHX Tubes Plastic" "Circle4x4b" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle4x4b.mdl" "PHX Tubes Plastic" "Circle4x4b" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle4x4c.mdl" "PHX Tubes Plastic" "Circle4x4c" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle4x4c.mdl" "PHX Tubes Plastic" "Circle4x4c" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle4x4d.mdl" "PHX Tubes Plastic" "Circle4x4d" 1 "NULL" "0,0, 1.5" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/circle4x4d.mdl" "PHX Tubes Plastic" "Circle4x4d" 2 "NULL" "0,0,-1.5" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x1.mdl" "PHX Tubes Plastic" "Tube1x1x1" 1 "NULL" "0,0,47.450" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x1.mdl" "PHX Tubes Plastic" "Tube1x1x1" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x1b.mdl" "PHX Tubes Plastic" "Tube1x1x1b" 1 "NULL" "0,0,47.450" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x1b.mdl" "PHX Tubes Plastic" "Tube1x1x1b" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x1c.mdl" "PHX Tubes Plastic" "Tube1x1x1c" 1 "NULL" "0,0,47.450" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x1c.mdl" "PHX Tubes Plastic" "Tube1x1x1c" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x1d.mdl" "PHX Tubes Plastic" "Tube1x1x1d" 1 "NULL" "0,0,47.450" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x1d.mdl" "PHX Tubes Plastic" "Tube1x1x1d" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x2.mdl" "PHX Tubes Plastic" "Tube1x1x2" 1 "NULL" "0,0,94.900" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x2.mdl" "PHX Tubes Plastic" "Tube1x1x2" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x2b.mdl" "PHX Tubes Plastic" "Tube1x1x2b" 1 "NULL" "0,0,94.900" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x2b.mdl" "PHX Tubes Plastic" "Tube1x1x2b" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x2c.mdl" "PHX Tubes Plastic" "Tube1x1x2c" 1 "NULL" "0,0,94.900" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x2c.mdl" "PHX Tubes Plastic" "Tube1x1x2c" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x2d.mdl" "PHX Tubes Plastic" "Tube1x1x2d" 1 "NULL" "0,0,94.900" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x2d.mdl" "PHX Tubes Plastic" "Tube1x1x2d" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x3.mdl" "PHX Tubes Plastic" "Tube1x1x3" 1 "NULL" "0,0,142.35" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x3.mdl" "PHX Tubes Plastic" "Tube1x1x3" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x3b.mdl" "PHX Tubes Plastic" "Tube1x1x3b" 1 "NULL" "0,0,142.35" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x3b.mdl" "PHX Tubes Plastic" "Tube1x1x3b" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x3c.mdl" "PHX Tubes Plastic" "Tube1x1x3c" 1 "NULL" "0,0,142.35" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x3c.mdl" "PHX Tubes Plastic" "Tube1x1x3c" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x3d.mdl" "PHX Tubes Plastic" "Tube1x1x3d" 1 "NULL" "0,0,142.35" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x3d.mdl" "PHX Tubes Plastic" "Tube1x1x3d" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x4.mdl" "PHX Tubes Plastic" "Tube1x1x4" 1 "NULL" "0,0,189.80" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x4.mdl" "PHX Tubes Plastic" "Tube1x1x4" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x4b.mdl" "PHX Tubes Plastic" "Tube1x1x4b" 1 "NULL" "0,0,189.80" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x4b.mdl" "PHX Tubes Plastic" "Tube1x1x4b" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x4c.mdl" "PHX Tubes Plastic" "Tube1x1x4c" 1 "NULL" "0,0,189.80" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x4c.mdl" "PHX Tubes Plastic" "Tube1x1x4c" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x4d.mdl" "PHX Tubes Plastic" "Tube1x1x4d" 1 "NULL" "0,0,189.80" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x4d.mdl" "PHX Tubes Plastic" "Tube1x1x4d" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x5.mdl" "PHX Tubes Plastic" "Tube1x1x5" 1 "NULL" "0,0,237.25" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x5.mdl" "PHX Tubes Plastic" "Tube1x1x5" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x5b.mdl" "PHX Tubes Plastic" "Tube1x1x5b" 1 "NULL" "0,0,237.25" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x5b.mdl" "PHX Tubes Plastic" "Tube1x1x5b" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x5c.mdl" "PHX Tubes Plastic" "Tube1x1x5c" 1 "NULL" "0,0,237.25" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x5c.mdl" "PHX Tubes Plastic" "Tube1x1x5c" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x5d.mdl" "PHX Tubes Plastic" "Tube1x1x5d" 1 "NULL" "0,0,237.25" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x5d.mdl" "PHX Tubes Plastic" "Tube1x1x5d" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x6.mdl" "PHX Tubes Plastic" "Tube1x1x6" 1 "NULL" "0,0,284.70" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x6.mdl" "PHX Tubes Plastic" "Tube1x1x6" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x6b.mdl" "PHX Tubes Plastic" "Tube1x1x6b" 1 "NULL" "0,0,284.70" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x6b.mdl" "PHX Tubes Plastic" "Tube1x1x6b" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x6c.mdl" "PHX Tubes Plastic" "Tube1x1x6c" 1 "NULL" "0,0,284.70" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x6c.mdl" "PHX Tubes Plastic" "Tube1x1x6c" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x6d.mdl" "PHX Tubes Plastic" "Tube1x1x6d" 1 "NULL" "0,0,284.70" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x6d.mdl" "PHX Tubes Plastic" "Tube1x1x6d" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x8.mdl" "PHX Tubes Plastic" "Tube1x1x8" 1 "NULL" "0,0,379.60" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x8.mdl" "PHX Tubes Plastic" "Tube1x1x8" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x8b.mdl" "PHX Tubes Plastic" "Tube1x1x8b" 1 "NULL" "0,0,379.60" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x8b.mdl" "PHX Tubes Plastic" "Tube1x1x8b" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x8c.mdl" "PHX Tubes Plastic" "Tube1x1x8c" 1 "NULL" "0,0,379.60" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x8c.mdl" "PHX Tubes Plastic" "Tube1x1x8c" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x8d.mdl" "PHX Tubes Plastic" "Tube1x1x8d" 1 "NULL" "0,0,379.60" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube1x1x8d.mdl" "PHX Tubes Plastic" "Tube1x1x8d" 2 "NULL" "NULL" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x+.mdl" "PHX Tubes Plastic" "Tube2x2x+" 1 "NULL" "0,0,47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x+.mdl" "PHX Tubes Plastic" "Tube2x2x+" 2 "NULL" "0,-47.45,0" "0,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x+.mdl" "PHX Tubes Plastic" "Tube2x2x+" 3 "NULL" "0,0,-47.45" " 90,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x+.mdl" "PHX Tubes Plastic" "Tube2x2x+" 4 "NULL" "0,47.45,0" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x025.mdl" "PHX Tubes Plastic" "Tube2x2x025" 1 "NULL" "0,0, 5.93125" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x025.mdl" "PHX Tubes Plastic" "Tube2x2x025" 2 "NULL" "0,0,-5.93125" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x025b.mdl" "PHX Tubes Plastic" "Tube2x2x025b" 1 "NULL" "0,0, 5.93125" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x025b.mdl" "PHX Tubes Plastic" "Tube2x2x025b" 2 "NULL" "0,0,-5.93125" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x025c.mdl" "PHX Tubes Plastic" "Tube2x2x025c" 1 "NULL" "0,0, 5.93125" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x025c.mdl" "PHX Tubes Plastic" "Tube2x2x025c" 2 "NULL" "0,0,-5.93125" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x025d.mdl" "PHX Tubes Plastic" "Tube2x2x025d" 1 "NULL" "0,0, 5.93125" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x025d.mdl" "PHX Tubes Plastic" "Tube2x2x025d" 2 "NULL" "0,0,-5.93125" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x05.mdl" "PHX Tubes Plastic" "Tube2x2x05" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x05.mdl" "PHX Tubes Plastic" "Tube2x2x05" 2 "NULL" "0,0,-11.8625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x05b.mdl" "PHX Tubes Plastic" "Tube2x2x05b" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x05b.mdl" "PHX Tubes Plastic" "Tube2x2x05b" 2 "NULL" "0,0,-11.8625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x05c.mdl" "PHX Tubes Plastic" "Tube2x2x05c" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x05c.mdl" "PHX Tubes Plastic" "Tube2x2x05c" 2 "NULL" "0,0,-11.8625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x05d.mdl" "PHX Tubes Plastic" "Tube2x2x05d" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x05d.mdl" "PHX Tubes Plastic" "Tube2x2x05d" 2 "NULL" "0,0,-11.8625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x1.mdl" "PHX Tubes Plastic" "Tube2x2x1" 1 "NULL" "0,0, 23.726" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x1.mdl" "PHX Tubes Plastic" "Tube2x2x1" 2 "NULL" "0,0,-23.726" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x16d.mdl" "PHX Tubes Plastic" "Tube2x2x16d" 1 "NULL" "0,0,711.75" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x16d.mdl" "PHX Tubes Plastic" "Tube2x2x16d" 2 "NULL" "0,0,-47.45" " 90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x1b.mdl" "PHX Tubes Plastic" "Tube2x2x1b" 1 "NULL" "0,0, 23.726" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x1b.mdl" "PHX Tubes Plastic" "Tube2x2x1b" 2 "NULL" "0,0,-23.726" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x1c.mdl" "PHX Tubes Plastic" "Tube2x2x1c" 1 "NULL" "0,0, 23.726" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x1c.mdl" "PHX Tubes Plastic" "Tube2x2x1c" 2 "NULL" "0,0,-23.726" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x1d.mdl" "PHX Tubes Plastic" "Tube2x2x1d" 1 "NULL" "0,0, 23.726" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x1d.mdl" "PHX Tubes Plastic" "Tube2x2x1d" 2 "NULL" "0,0,-23.726" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x2.mdl" "PHX Tubes Plastic" "Tube2x2x2" 1 "NULL" "0,0, 47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x2.mdl" "PHX Tubes Plastic" "Tube2x2x2" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x2b.mdl" "PHX Tubes Plastic" "Tube2x2x2b" 1 "NULL" "0,0, 47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x2b.mdl" "PHX Tubes Plastic" "Tube2x2x2b" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x2c.mdl" "PHX Tubes Plastic" "Tube2x2x2c" 1 "NULL" "0,0, 47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x2c.mdl" "PHX Tubes Plastic" "Tube2x2x2c" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x2d.mdl" "PHX Tubes Plastic" "Tube2x2x2d" 1 "NULL" "0,0, 47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x2d.mdl" "PHX Tubes Plastic" "Tube2x2x2d" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x4.mdl" "PHX Tubes Plastic" "Tube2x2x4" 1 "NULL" "0,0, 94.9" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x4.mdl" "PHX Tubes Plastic" "Tube2x2x4" 2 "NULL" "0,0,-94.9" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x4b.mdl" "PHX Tubes Plastic" "Tube2x2x4b" 1 "NULL" "0,0, 94.9" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x4b.mdl" "PHX Tubes Plastic" "Tube2x2x4b" 2 "NULL" "0,0,-94.9" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x4c.mdl" "PHX Tubes Plastic" "Tube2x2x4c" 1 "NULL" "0,0, 94.9" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x4c.mdl" "PHX Tubes Plastic" "Tube2x2x4c" 2 "NULL" "0,0,-94.9" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x4d.mdl" "PHX Tubes Plastic" "Tube2x2x4d" 1 "NULL" "0,0, 94.9" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x4d.mdl" "PHX Tubes Plastic" "Tube2x2x4d" 2 "NULL" "0,0,-94.9" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x8.mdl" "PHX Tubes Plastic" "Tube2x2x8" 1 "NULL" "0,0, 189.8" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x8.mdl" "PHX Tubes Plastic" "Tube2x2x8" 2 "NULL" "0,0,-189.8" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x8b.mdl" "PHX Tubes Plastic" "Tube2x2x8b" 1 "NULL" "0,0, 189.8" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x8b.mdl" "PHX Tubes Plastic" "Tube2x2x8b" 2 "NULL" "0,0,-189.8" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x8c.mdl" "PHX Tubes Plastic" "Tube2x2x8c" 1 "NULL" "0,0, 189.8" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x8c.mdl" "PHX Tubes Plastic" "Tube2x2x8c" 2 "NULL" "0,0,-189.8" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x8d.mdl" "PHX Tubes Plastic" "Tube2x2x8d" 1 "NULL" "0,0, 189.8" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2x8d.mdl" "PHX Tubes Plastic" "Tube2x2x8d" 2 "NULL" "0,0,-189.8" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2xt.mdl" "PHX Tubes Plastic" "Tube2x2xt" 1 "NULL" "0,0,-47.45" " 90,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2xt.mdl" "PHX Tubes Plastic" "Tube2x2xt" 2 "NULL" "0,-47.45,0" "0,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2xt.mdl" "PHX Tubes Plastic" "Tube2x2xt" 3 "NULL" "0,47.45,0" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2xta.mdl" "PHX Tubes Plastic" "Tube2x2xta" 1 "NULL" "0,0,-23.725" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2xta.mdl" "PHX Tubes Plastic" "Tube2x2xta" 2 "NULL" "0,47.45,23.725" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2xta.mdl" "PHX Tubes Plastic" "Tube2x2xta" 3 "NULL" "0,-47.45,23.725" "0,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2xtb.mdl" "PHX Tubes Plastic" "Tube2x2xtb" 1 "NULL" "0,-23.725,0" "0,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube2x2xtb.mdl" "PHX Tubes Plastic" "Tube2x2xtb" 2 "NULL" "0,23.725,-47.45" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x025.mdl" "PHX Tubes Plastic" "Tube4x4x025" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x025.mdl" "PHX Tubes Plastic" "Tube4x4x025" 2 "NULL" "0,0,0" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x025b.mdl" "PHX Tubes Plastic" "Tube4x4x025b" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x025b.mdl" "PHX Tubes Plastic" "Tube4x4x025b" 2 "NULL" "0,0,0" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x025c.mdl" "PHX Tubes Plastic" "Tube4x4x025c" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x025c.mdl" "PHX Tubes Plastic" "Tube4x4x025c" 2 "NULL" "0,0,0" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x025d.mdl" "PHX Tubes Plastic" "Tube4x4x025d" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x025d.mdl" "PHX Tubes Plastic" "Tube4x4x025d" 2 "NULL" "0,0,0" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x05.mdl" "PHX Tubes Plastic" "Tube4x4x05" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x05.mdl" "PHX Tubes Plastic" "Tube4x4x05" 2 "NULL" "0,0,-11.8625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x05b.mdl" "PHX Tubes Plastic" "Tube4x4x05b" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x05b.mdl" "PHX Tubes Plastic" "Tube4x4x05b" 2 "NULL" "0,0,-11.8625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x05c.mdl" "PHX Tubes Plastic" "Tube4x4x05c" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x05c.mdl" "PHX Tubes Plastic" "Tube4x4x05c" 2 "NULL" "0,0,-11.8625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x05d.mdl" "PHX Tubes Plastic" "Tube4x4x05d" 1 "NULL" "0,0, 11.8625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x05d.mdl" "PHX Tubes Plastic" "Tube4x4x05d" 2 "NULL" "0,0,-11.8625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1.mdl" "PHX Tubes Plastic" "Tube4x4x1" 1 "NULL" "0,0, 23.726" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1.mdl" "PHX Tubes Plastic" "Tube4x4x1" 2 "NULL" "0,0,-23.726" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x16.mdl" "PHX Tubes Plastic" "Tube4x4x16" 1 "NULL" "0,0, 379.6" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x16.mdl" "PHX Tubes Plastic" "Tube4x4x16" 2 "NULL" "0,0,-379.6" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x16b.mdl" "PHX Tubes Plastic" "Tube4x4x16b" 1 "NULL" "0,0, 379.6" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x16b.mdl" "PHX Tubes Plastic" "Tube4x4x16b" 2 "NULL" "0,0,-379.6" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x16c.mdl" "PHX Tubes Plastic" "Tube4x4x16c" 1 "NULL" "0,0, 379.6" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x16c.mdl" "PHX Tubes Plastic" "Tube4x4x16c" 2 "NULL" "0,0,-379.6" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x16d.mdl" "PHX Tubes Plastic" "Tube4x4x16d" 1 "NULL" "0,0, 379.6" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x16d.mdl" "PHX Tubes Plastic" "Tube4x4x16d" 2 "NULL" "0,0,-379.6" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1b.mdl" "PHX Tubes Plastic" "Tube4x4x1b" 1 "NULL" "0,0, 23.726" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1b.mdl" "PHX Tubes Plastic" "Tube4x4x1b" 2 "NULL" "0,0,-23.726" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1c.mdl" "PHX Tubes Plastic" "Tube4x4x1c" 1 "NULL" "0,0, 23.726" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1c.mdl" "PHX Tubes Plastic" "Tube4x4x1c" 2 "NULL" "0,0,-23.726" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1d.mdl" "PHX Tubes Plastic" "Tube4x4x1d" 1 "NULL" "0,0, 23.726" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1d.mdl" "PHX Tubes Plastic" "Tube4x4x1d" 2 "NULL" "0,0,-23.726" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1to2x2.mdl" "PHX Tubes Plastic" "Tube4x4x1to2x2" 1 "NULL" "NULL" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x1to2x2.mdl" "PHX Tubes Plastic" "Tube4x4x1to2x2" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x2.mdl" "PHX Tubes Plastic" "Tube4x4x2" 1 "NULL" "0,0, 47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x2.mdl" "PHX Tubes Plastic" "Tube4x4x2" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x2b.mdl" "PHX Tubes Plastic" "Tube4x4x2b" 1 "NULL" "0,0, 47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x2b.mdl" "PHX Tubes Plastic" "Tube4x4x2b" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x2c.mdl" "PHX Tubes Plastic" "Tube4x4x2c" 1 "NULL" "0,0, 47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x2c.mdl" "PHX Tubes Plastic" "Tube4x4x2c" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x2d.mdl" "PHX Tubes Plastic" "Tube4x4x2d" 1 "NULL" "0,0, 47.45" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x2d.mdl" "PHX Tubes Plastic" "Tube4x4x2d" 2 "NULL" "0,0,-47.45" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x3.mdl" "PHX Tubes Plastic" "Tube4x4x3" 1 "NULL" "0,0, 71.175" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x3.mdl" "PHX Tubes Plastic" "Tube4x4x3" 2 "NULL" "0,0,-71.175" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x3b.mdl" "PHX Tubes Plastic" "Tube4x4x3b" 1 "NULL" "0,0, 71.175" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x3b.mdl" "PHX Tubes Plastic" "Tube4x4x3b" 2 "NULL" "0,0,-71.175" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x3c.mdl" "PHX Tubes Plastic" "Tube4x4x3c" 1 "NULL" "0,0, 71.175" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x3c.mdl" "PHX Tubes Plastic" "Tube4x4x3c" 2 "NULL" "0,0,-71.175" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x3d.mdl" "PHX Tubes Plastic" "Tube4x4x3d" 1 "NULL" "0,0, 71.175" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x3d.mdl" "PHX Tubes Plastic" "Tube4x4x3d" 2 "NULL" "0,0,-71.175" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x4.mdl" "PHX Tubes Plastic" "Tube4x4x4" 1 "NULL" "0,0, 94.9" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x4.mdl" "PHX Tubes Plastic" "Tube4x4x4" 2 "NULL" "0,0,-94.9" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x4b.mdl" "PHX Tubes Plastic" "Tube4x4x4b" 1 "NULL" "0,0, 94.9" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x4b.mdl" "PHX Tubes Plastic" "Tube4x4x4b" 2 "NULL" "0,0,-94.9" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x4c.mdl" "PHX Tubes Plastic" "Tube4x4x4c" 1 "NULL" "0,0, 94.9" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x4c.mdl" "PHX Tubes Plastic" "Tube4x4x4c" 2 "NULL" "0,0,-94.9" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x4d.mdl" "PHX Tubes Plastic" "Tube4x4x4d" 1 "NULL" "0,0, 94.9" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x4d.mdl" "PHX Tubes Plastic" "Tube4x4x4d" 2 "NULL" "0,0,-94.9" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x5.mdl" "PHX Tubes Plastic" "Tube4x4x5" 1 "NULL" "0,0, 118.625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x5.mdl" "PHX Tubes Plastic" "Tube4x4x5" 2 "NULL" "0,0,-118.625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x5b.mdl" "PHX Tubes Plastic" "Tube4x4x5b" 1 "NULL" "0,0, 118.625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x5b.mdl" "PHX Tubes Plastic" "Tube4x4x5b" 2 "NULL" "0,0,-118.625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x5c.mdl" "PHX Tubes Plastic" "Tube4x4x5c" 1 "NULL" "0,0, 118.625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x5c.mdl" "PHX Tubes Plastic" "Tube4x4x5c" 2 "NULL" "0,0,-118.625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x5d.mdl" "PHX Tubes Plastic" "Tube4x4x5d" 1 "NULL" "0,0, 118.625" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x5d.mdl" "PHX Tubes Plastic" "Tube4x4x5d" 2 "NULL" "0,0,-118.625" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x6.mdl" "PHX Tubes Plastic" "Tube4x4x6" 1 "NULL" "0,0, 142.35" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x6.mdl" "PHX Tubes Plastic" "Tube4x4x6" 2 "NULL" "0,0,-142.35" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x6b.mdl" "PHX Tubes Plastic" "Tube4x4x6b" 1 "NULL" "0,0, 142.35" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x6b.mdl" "PHX Tubes Plastic" "Tube4x4x6b" 2 "NULL" "0,0,-142.35" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x6c.mdl" "PHX Tubes Plastic" "Tube4x4x6c" 1 "NULL" "0,0, 142.35" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x6c.mdl" "PHX Tubes Plastic" "Tube4x4x6c" 2 "NULL" "0,0,-142.35" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x6d.mdl" "PHX Tubes Plastic" "Tube4x4x6d" 1 "NULL" "0,0, 142.35" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x6d.mdl" "PHX Tubes Plastic" "Tube4x4x6d" 2 "NULL" "0,0,-142.35" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x8.mdl" "PHX Tubes Plastic" "Tube4x4x8" 1 "NULL" "0,0, 189.8" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x8.mdl" "PHX Tubes Plastic" "Tube4x4x8" 2 "NULL" "0,0,-189.8" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x8b.mdl" "PHX Tubes Plastic" "Tube4x4x8b" 1 "NULL" "0,0, 189.8" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x8b.mdl" "PHX Tubes Plastic" "Tube4x4x8b" 2 "NULL" "0,0,-189.8" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x8c.mdl" "PHX Tubes Plastic" "Tube4x4x8c" 1 "NULL" "0,0, 189.8" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x8c.mdl" "PHX Tubes Plastic" "Tube4x4x8c" 2 "NULL" "0,0,-189.8" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x8d.mdl" "PHX Tubes Plastic" "Tube4x4x8d" 1 "NULL" "0,0, 189.8" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tube4x4x8d.mdl" "PHX Tubes Plastic" "Tube4x4x8d" 2 "NULL" "0,0,-189.8" " 90,0, 0 " "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend1x1x90.mdl" "PHX Tubes Plastic" "Tubebend1x1x90" 1 "NULL" "NULL" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend1x1x90.mdl" "PHX Tubes Plastic" "Tubebend1x1x90" 2 "NULL" "0,23.725,23.725" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend1x2x90.mdl" "PHX Tubes Plastic" "Tubebend1x2x90" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend1x2x90.mdl" "PHX Tubes Plastic" "Tubebend1x2x90" 2 "NULL" "0,47.45,47.45" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend1x2x90a.mdl" "PHX Tubes Plastic" "Tubebend1x2x90a" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend1x2x90a.mdl" "PHX Tubes Plastic" "Tubebend1x2x90a" 2 "NULL" "0,47.45,47.45" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend1x2x90b.mdl" "PHX Tubes Plastic" "Tubebend1x2x90b" 1 "NULL" "-47.45,0,47.45" "0,-180,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend1x2x90b.mdl" "PHX Tubes Plastic" "Tubebend1x2x90b" 2 "NULL" "NULL" "90,-90,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend2x2x90.mdl" "PHX Tubes Plastic" "Tubebend2x2x90" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend2x2x90.mdl" "PHX Tubes Plastic" "Tubebend2x2x90" 2 "NULL" "0,47.45,47.45" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend2x2x90outer.mdl" "PHX Tubes Plastic" "Tubebend2x2x90outer" 1 "NULL" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend2x2x90outer.mdl" "PHX Tubes Plastic" "Tubebend2x2x90outer" 2 "NULL" "0,47.45,47.45" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend2x2x90square.mdl" "PHX Tubes Plastic" "Tubebend2x2x90square" 1 "NULL" "0,0,-47.451" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend2x2x90square.mdl" "PHX Tubes Plastic" "Tubebend2x2x90square" 2 "NULL" "0,47.417,0" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend4x4x90.mdl" "PHX Tubes Plastic" "Tubebend4x4x90" 1 "NULL" "0, 94.9,0" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebend4x4x90.mdl" "PHX Tubes Plastic" "Tubebend4x4x90" 2 "NULL" "0,0,-94.9" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebendinsidesquare.mdl" "PHX Tubes Plastic" "Tubebendinsidesquare" 1 "NULL" "0,0,23.725" "-90,90,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebendinsidesquare.mdl" "PHX Tubes Plastic" "Tubebendinsidesquare" 2 "NULL" "-47.45,0,-23.724" "0,-180,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebendinsidesquare2.mdl" "PHX Tubes Plastic" "Tubebendinsidesquare2" 1 "NULL" "0,0,23.725" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebendinsidesquare2.mdl" "PHX Tubes Plastic" "Tubebendinsidesquare2" 2 "NULL" "0,-47.45,-23.724" "0,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebendoutsidesquare.mdl" "PHX Tubes Plastic" "Tubebendoutsidesquare" 1 "0,0,47.45" "NULL" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebendoutsidesquare.mdl" "PHX Tubes Plastic" "Tubebendoutsidesquare" 2 "0,-47.45,0" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebendoutsidesquare2.mdl" "PHX Tubes Plastic" "Tubebendoutsidesquare2" 1 "0,0,47.45" "NULL" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/hunter/tubes/tubebendoutsidesquare2.mdl" "PHX Tubes Plastic" "Tubebendoutsidesquare2" 2 "0,-47.45,0" "NULL" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj01.mdl" "Plarail" "AJ-01 Station" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj01.mdl" "Plarail" "AJ-01 Station" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj01_2.mdl" "Plarail" "AJ-01 2 Station" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj01_2.mdl" "Plarail" "AJ-01 2 Station" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj02.mdl" "Plarail" "AJ-02 Support" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj02.mdl" "Plarail" "AJ-02 Support" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj03.mdl" "Plarail" "AJ-03" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj03.mdl" "Plarail" "AJ-03" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj03.mdl" "Plarail" "AJ-03" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj03_bridge.mdl" "Plarail" "AJ-03 Bridge" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj03_top.mdl" "Plarail" "AJ-03 Top" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj04.mdl" "Plarail" "AJ-04 Track Bridge" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/aj04.mdl" "Plarail" "AJ-04 Track Bridge" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j14_grey.mdl" "Plarail" "J-14 Grey" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j14_grey.mdl" "Plarail" "J-14 Grey" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j14_yellow.mdl" "Plarail" "J-14 Yellow" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j14_yellow.mdl" "Plarail" "J-14 Yellow" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j15_grey.mdl" "Plarail" "J-15 Grey" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j15_grey.mdl" "Plarail" "J-15 Grey" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j15_yellow.mdl" "Plarail" "J-15 Yellow" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j15_yellow.mdl" "Plarail" "J-15 Yellow" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j22_grey.mdl" "Plarail" "J-22 Grey" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j22_grey.mdl" "Plarail" "J-22 Grey" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j22_grey.mdl" "Plarail" "J-22 Grey" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j22_grey.mdl" "Plarail" "J-22 Grey" 4 "NULL" "!4" "!4" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j22_yellow.mdl" "Plarail" "J-22 Yellow" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j22_yellow.mdl" "Plarail" "J-22 Yellow" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j22_yellow.mdl" "Plarail" "J-22 Yellow" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/j22_yellow.mdl" "Plarail" "J-22 Yellow" 4 "NULL" "!4" "!4" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/scenery/pa_pole.mdl" "Plarail" "PA-Pole" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r03_left.mdl" "Plarail" "R-03 Curve Left 1" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r03_left.mdl" "Plarail" "R-03 Curve Left 1" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r03_right.mdl" "Plarail" "R-03 Curve Right 1" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r03_right.mdl" "Plarail" "R-03 Curve Right 1" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r05_left.mdl" "Plarail" "R-05 Curve Left Double" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r05_left.mdl" "Plarail" "R-05 Curve Left Double" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r05_left.mdl" "Plarail" "R-05 Curve Left Double" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r05_left.mdl" "Plarail" "R-05 Curve Left Double" 4 "NULL" "!4" "!4" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r05_right.mdl" "Plarail" "R-05 Curve Right Double" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r05_right.mdl" "Plarail" "R-05 Curve Right Double" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r05_right.mdl" "Plarail" "R-05 Curve Right Double" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r05_right.mdl" "Plarail" "R-05 Curve Right Double" 4 "NULL" "!4" "!4" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r09_left.mdl" "Plarail" "R-09 Curve Left 2" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r09_left.mdl" "Plarail" "R-09 Curve Left 2" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r09_right.mdl" "Plarail" "R-09 Curve Right 2" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r09_right.mdl" "Plarail" "R-09 Curve Right 2" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r18_a.mdl" "Plarail" "R-18 Curve A" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r18_a.mdl" "Plarail" "R-18 Curve A" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r18_a.mdl" "Plarail" "R-18 Curve A" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r18_b.mdl" "Plarail" "R-18 Curve B" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r18_b.mdl" "Plarail" "R-18 Curve B" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r18_b.mdl" "Plarail" "R-18 Curve B" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r27_left.mdl" "Plarail" "R-27 Curve Left Bridge" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r27_left.mdl" "Plarail" "R-27 Curve Left Bridge" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r27_right.mdl" "Plarail" "R-27 Curve Right Bridge" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/curve/r27_right.mdl" "Plarail" "R-27 Curve Right Bridge" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar01.mdl" "Plarail" "AR-01 Stop Rail" 1 "NULL" "!1" "!1" "gmod_plarail_ar01" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar01.mdl" "Plarail" "AR-01 Stop Rail" 2 "NULL" "!2" "!2" "gmod_plarail_ar01" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar02.mdl" "Plarail" "AR-02 Crossover Point" 1 "NULL" "!1" "!1" "gmod_plarail_ar02" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar02.mdl" "Plarail" "AR-02 Crossover Point" 2 "NULL" "!2" "!2" "gmod_plarail_ar02" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar03.mdl" "Plarail" "AR-03 Rerailer" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar03.mdl" "Plarail" "AR-03 Rerailer" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar03.mdl" "Plarail" "AR-03 Rerailer" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar04_1.mdl" "Plarail" "AR-04 1 Turnout Point" 1 "NULL" "!1" "!1" "gmod_plarail_ar04_1" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar04_1.mdl" "Plarail" "AR-04 1 Turnout Point" 2 "NULL" "!2" "!2" "gmod_plarail_ar04_1" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar04_1.mdl" "Plarail" "AR-04 1 Turnout Point" 3 "NULL" "!3" "!3" "gmod_plarail_ar04_1" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar04_2.mdl" "Plarail" "AR-04 2 Turnout Point" 1 "NULL" "!1" "!1" "gmod_plarail_ar04_2" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar04_2.mdl" "Plarail" "AR-04 2 Turnout Point" 2 "NULL" "!2" "!2" "gmod_plarail_ar04_2" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar04_2.mdl" "Plarail" "AR-04 2 Turnout Point" 3 "NULL" "!3" "!3" "gmod_plarail_ar04_2" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar04_3.mdl" "Plarail" "AR-04 3 Buffer" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar04_3.mdl" "Plarail" "AR-04 3 Buffer" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar05_1.mdl" "Plarail" "AR-05 1 Double Track Point" 1 "NULL" "!1" "!1" "gmod_plarail_ar05_1" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar05_1.mdl" "Plarail" "AR-05 1 Double Track Point" 2 "NULL" "!2" "!2" "gmod_plarail_ar05_1" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar05_1.mdl" "Plarail" "AR-05 1 Double Track Point" 3 "NULL" "!3" "!3" "gmod_plarail_ar05_1" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar05_2.mdl" "Plarail" "AR-05 2 Double Track Point" 1 "NULL" "!1" "!1" "gmod_plarail_ar05_2" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar05_2.mdl" "Plarail" "AR-05 2 Double Track Point" 2 "NULL" "!2" "!2" "gmod_plarail_ar05_2" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar05_2.mdl" "Plarail" "AR-05 2 Double Track Point" 3 "NULL" "!3" "!3" "gmod_plarail_ar05_2" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar06.mdl" "Plarail" "AR-06 Slope Rail" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar06.mdl" "Plarail" "AR-06 Slope Rail" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar06_1.mdl" "Plarail" "AR-06 Support 1" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar06_1.mdl" "Plarail" "AR-06 Support 1" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar06_2.mdl" "Plarail" "AR-06 Support 2" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/ar06_2.mdl" "Plarail" "AR-06 Support 2" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/connector_female.mdl" "Plarail" "Custom Female" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/connector_female.mdl" "Plarail" "Custom Female" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/connector_male.mdl" "Plarail" "Custom Male" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/connector_male.mdl" "Plarail" "Custom Male" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/connector_male2.mdl" "Plarail" "Custom Male 2" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_1.mdl" "Plarail" "Custom 1" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_1.mdl" "Plarail" "Custom 1" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_16.mdl" "Plarail" "Custom 16" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_16.mdl" "Plarail" "Custom 16" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_2.mdl" "Plarail" "Custom 2" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_2.mdl" "Plarail" "Custom 2" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_4.mdl" "Plarail" "Custom 4" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_4.mdl" "Plarail" "Custom 4" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_8.mdl" "Plarail" "Custom 8" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/custom_8.mdl" "Plarail" "Custom 8" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/r06.mdl" "Plarail" "R-06 Slope" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/misc/r06.mdl" "Plarail" "R-06 Slope" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r01.mdl" "Plarail" "R-01 Straight Full" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r01.mdl" "Plarail" "R-01 Straight Full" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r02.mdl" "Plarail" "R-02 Straight Half" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r02.mdl" "Plarail" "R-02 Straight Half" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r04.mdl" "Plarail" "R-04 Straight Double" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r04.mdl" "Plarail" "R-04 Straight Double" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r04.mdl" "Plarail" "R-04 Straight Double" 3 "NULL" "!3" "!3" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r04.mdl" "Plarail" "R-04 Straight Double" 4 "NULL" "!4" "!4" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r07.mdl" "Plarail" "R-07 Straight Long" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r07.mdl" "Plarail" "R-07 Straight Long" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r20_01.mdl" "Plarail" "R-20 Straight Quarter" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r20_01.mdl" "Plarail" "R-20 Straight Quarter" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r20_02.mdl" "Plarail" "R-20 Straight Quarter Male/Male" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r20_02.mdl" "Plarail" "R-20 Straight Quarter Male/Male" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r20_03.mdl" "Plarail" "R-20 Straight Quarter Female/Female" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r20_03.mdl" "Plarail" "R-20 Straight Quarter Female/Female" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r26.mdl" "Plarail" "R-26 Straight Bridge" 1 "NULL" "!1" "!1" "NULL" +TRACKASSEMBLY_PIECES "models/ron/plarail/tracks/straight/r26.mdl" "Plarail" "R-26 Straight Bridge" 2 "NULL" "!2" "!2" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128a.mdl" "Portal 2 High Walkway" "128a" 1 "NULL" "0, 64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128a.mdl" "Portal 2 High Walkway" "128a" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128b.mdl" "Portal 2 High Walkway" "128b" 1 "NULL" "0, 64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128b.mdl" "Portal 2 High Walkway" "128b" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128c.mdl" "Portal 2 High Walkway" "128c" 1 "NULL" "0, 64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128c.mdl" "Portal 2 High Walkway" "128c" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128d.mdl" "Portal 2 High Walkway" "128d" 1 "NULL" "0, 64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128d.mdl" "Portal 2 High Walkway" "128d" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128e.mdl" "Portal 2 High Walkway" "128e" 1 "NULL" "0, 64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_128e.mdl" "Portal 2 High Walkway" "128e" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16a.mdl" "Portal 2 High Walkway" "16a" 1 "NULL" "0, 8,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16a.mdl" "Portal 2 High Walkway" "16a" 2 "NULL" "0,-8,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16b.mdl" "Portal 2 High Walkway" "16b" 1 "NULL" "0, 8,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16b.mdl" "Portal 2 High Walkway" "16b" 2 "NULL" "0,-8,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16c.mdl" "Portal 2 High Walkway" "16c" 1 "NULL" "0, 8,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16c.mdl" "Portal 2 High Walkway" "16c" 2 "NULL" "0,-8,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16d.mdl" "Portal 2 High Walkway" "16d" 1 "NULL" "0, 8,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16d.mdl" "Portal 2 High Walkway" "16d" 2 "NULL" "0,-8,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16e.mdl" "Portal 2 High Walkway" "16e" 1 "NULL" "0, 8,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_16e.mdl" "Portal 2 High Walkway" "16e" 2 "NULL" "0,-8,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256a.mdl" "Portal 2 High Walkway" "256a" 1 "NULL" "0, 128,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256a.mdl" "Portal 2 High Walkway" "256a" 2 "NULL" "0,-128,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256b.mdl" "Portal 2 High Walkway" "256b" 1 "NULL" "0, 128,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256b.mdl" "Portal 2 High Walkway" "256b" 2 "NULL" "0,-128,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256c.mdl" "Portal 2 High Walkway" "256c" 1 "NULL" "0, 128,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256c.mdl" "Portal 2 High Walkway" "256c" 2 "NULL" "0,-128,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256d.mdl" "Portal 2 High Walkway" "256d" 1 "NULL" "0, 128,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256d.mdl" "Portal 2 High Walkway" "256d" 2 "NULL" "0,-128,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256e.mdl" "Portal 2 High Walkway" "256e" 1 "NULL" "0, 128,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_256e.mdl" "Portal 2 High Walkway" "256e" 2 "NULL" "0,-128,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32a.mdl" "Portal 2 High Walkway" "32a" 1 "NULL" "0, 16,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32a.mdl" "Portal 2 High Walkway" "32a" 2 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32b.mdl" "Portal 2 High Walkway" "32b" 1 "NULL" "0, 16,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32b.mdl" "Portal 2 High Walkway" "32b" 2 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32c.mdl" "Portal 2 High Walkway" "32c" 1 "NULL" "0, 16,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32c.mdl" "Portal 2 High Walkway" "32c" 2 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32d.mdl" "Portal 2 High Walkway" "32d" 1 "NULL" "0, 16,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32d.mdl" "Portal 2 High Walkway" "32d" 2 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32e.mdl" "Portal 2 High Walkway" "32e" 1 "NULL" "0, 16,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_32e.mdl" "Portal 2 High Walkway" "32e" 2 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64a.mdl" "Portal 2 High Walkway" "64a" 1 "NULL" "0, 32,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64a.mdl" "Portal 2 High Walkway" "64a" 2 "NULL" "0,-32,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64b.mdl" "Portal 2 High Walkway" "64b" 1 "NULL" "0, 32,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64b.mdl" "Portal 2 High Walkway" "64b" 2 "NULL" "0,-32,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64c.mdl" "Portal 2 High Walkway" "64c" 1 "NULL" "0, 32,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64c.mdl" "Portal 2 High Walkway" "64c" 2 "NULL" "0,-32,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64d.mdl" "Portal 2 High Walkway" "64d" 1 "NULL" "0, 32,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64d.mdl" "Portal 2 High Walkway" "64d" 2 "NULL" "0,-32,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64e.mdl" "Portal 2 High Walkway" "64e" 1 "NULL" "0, 32,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_64e.mdl" "Portal 2 High Walkway" "64e" 2 "NULL" "0,-32,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_angle_30.mdl" "Portal 2 High Walkway" "Angle 30" 1 "NULL" "0,-44.01274,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_angle_30.mdl" "Portal 2 High Walkway" "Angle 30" 2 "NULL" "40.52878,23.40695,-2.125" "0,30,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_corner.mdl" "Portal 2 High Walkway" "Corner" 1 "NULL" "64,0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_corner.mdl" "Portal 2 High Walkway" "Corner" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_end_a.mdl" "Portal 2 High Walkway" "End A" 1 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_end_b.mdl" "Portal 2 High Walkway" "End B" 1 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_end_cap.mdl" "Portal 2 High Walkway" "End Cap" 1 "NULL" "0,0,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_gate_a.mdl" "Portal 2 High Walkway" "Gate A" 1 " 36.5,0,20" "NULL" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_gate_a.mdl" "Portal 2 High Walkway" "Gate A" 2 "-36.5,0,20" "NULL" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_gate_door.mdl" "Portal 2 High Walkway" "Gate Door" 1 "NULL" "NULL" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_gate_door.mdl" "Portal 2 High Walkway" "Gate Door" 2 "NULL" "0,8,0" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_gate_frame.mdl" "Portal 2 High Walkway" "Gate Frame" 1 " 36.5,0,20" "NULL" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_gate_frame.mdl" "Portal 2 High Walkway" "Gate Frame" 2 "-36.5,0,20" "NULL" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_l.mdl" "Portal 2 High Walkway" "L" 1 "NULL" "64, 0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_l.mdl" "Portal 2 High Walkway" "L" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_l_norail.mdl" "Portal 2 High Walkway" "L Norail" 1 "NULL" "64, 0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_l_norail.mdl" "Portal 2 High Walkway" "L Norail" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_t.mdl" "Portal 2 High Walkway" "T" 1 "NULL" "64, 0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_t.mdl" "Portal 2 High Walkway" "T" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_t.mdl" "Portal 2 High Walkway" "T" 3 "NULL" "0, 64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_t_norail.mdl" "Portal 2 High Walkway" "T Norail" 1 "NULL" "64, 0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_t_norail.mdl" "Portal 2 High Walkway" "T Norail" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_t_norail.mdl" "Portal 2 High Walkway" "T Norail" 3 "NULL" "0, 64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_x.mdl" "Portal 2 High Walkway" "X" 1 "NULL" "64,0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_x.mdl" "Portal 2 High Walkway" "X" 2 "NULL" "0,64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_x.mdl" "Portal 2 High Walkway" "X" 3 "NULL" "-64,0,-2.125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_x.mdl" "Portal 2 High Walkway" "X" 4 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_x_norail.mdl" "Portal 2 High Walkway" "X Norail" 1 "NULL" "64,0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_x_norail.mdl" "Portal 2 High Walkway" "X Norail" 2 "NULL" "0,64,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_x_norail.mdl" "Portal 2 High Walkway" "X Norail" 3 "NULL" "-64,0,-2.125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/hanging_walkway_x_norail.mdl" "Portal 2 High Walkway" "X Norail" 4 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/walkway_destroyed_128a.mdl" "Portal 2 High Walkway" "Destroyed 128a" 1 "NULL" "0,0,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/walkway_destroyed_64a.mdl" "Portal 2 High Walkway" "Destroyed 64a" 1 "NULL" "0,0,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_128a.mdl" "Portal 2 Walkway UG" "128a" 1 "NULL" "-35,64,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_128b.mdl" "Portal 2 Walkway UG" "128b" 1 "NULL" "-35,64,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_256a.mdl" "Portal 2 Walkway UG" "256a" 1 "NULL" "-35,128,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_256b.mdl" "Portal 2 Walkway UG" "256b" 1 "NULL" "-35,128,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_32a.mdl" "Portal 2 Walkway UG" "32a" 1 "NULL" "-35,16,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_32b.mdl" "Portal 2 Walkway UG" "32b" 1 "NULL" "-35,16,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_512a.mdl" "Portal 2 Walkway UG" "512a" 1 "NULL" "-35,256,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_512b.mdl" "Portal 2 Walkway UG" "512b" 1 "NULL" "-35,256,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_64a.mdl" "Portal 2 Walkway UG" "64a" 1 "NULL" "-35,32,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/railing_64b.mdl" "Portal 2 Walkway UG" "64b" 1 "NULL" "-35,32,-6.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_128.mdl" "Portal 2 Walkway UG" "128" 1 "NULL" "0,-128,-66.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_128.mdl" "Portal 2 Walkway UG" "128" 2 "NULL" "0, 128,61.875" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_256.mdl" "Portal 2 Walkway UG" "256" 1 "NULL" "0,-224,-130.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_256.mdl" "Portal 2 Walkway UG" "256" 2 "NULL" "0, 224,125.875" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_32.mdl" "Portal 2 Walkway UG" "32" 1 "NULL" "0,-56,-18.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_32.mdl" "Portal 2 Walkway UG" "32" 2 "NULL" "0, 56,13.875" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_64.mdl" "Portal 2 Walkway UG" "64" 1 "NULL" "0,-80,-34.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_64.mdl" "Portal 2 Walkway UG" "64" 2 "NULL" "0, 80,29.875" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_exit.mdl" "Portal 2 Walkway UG" "Exit" 1 "NULL" "0,-112,-66.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_exit.mdl" "Portal 2 Walkway UG" "Exit" 2 "NULL" "0, 112,61.875" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_landing_a.mdl" "Portal 2 Walkway UG" "A" 1 "NULL" "48,-42,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_landing_a.mdl" "Portal 2 Walkway UG" "A" 2 "NULL" "-48,-42,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_landing_b.mdl" "Portal 2 Walkway UG" "B" 1 "NULL" "48,-42,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_landing_b.mdl" "Portal 2 Walkway UG" "B" 2 "NULL" "-48,-42,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/stair_landing_b.mdl" "Portal 2 Walkway UG" "B" 3 "NULL" "-112,0,-2.125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_128a.mdl" "Portal 2 Walkway UG" "128a" 1 "NULL" "0, 64,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_128a.mdl" "Portal 2 Walkway UG" "128a" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_128b.mdl" "Portal 2 Walkway UG" "128b" 1 "NULL" "0, 64,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_128b.mdl" "Portal 2 Walkway UG" "128b" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_128c.mdl" "Portal 2 Walkway UG" "128c" 1 "NULL" "0, 64,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_128c.mdl" "Portal 2 Walkway UG" "128c" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_256a.mdl" "Portal 2 Walkway UG" "256a" 1 "NULL" "0, 128,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_256a.mdl" "Portal 2 Walkway UG" "256a" 2 "NULL" "0,-128,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_256b.mdl" "Portal 2 Walkway UG" "256b" 1 "NULL" "0, 128,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_256b.mdl" "Portal 2 Walkway UG" "256b" 2 "NULL" "0,-128,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_256c.mdl" "Portal 2 Walkway UG" "256c" 1 "NULL" "0, 128,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_256c.mdl" "Portal 2 Walkway UG" "256c" 2 "NULL" "0,-128,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_32a.mdl" "Portal 2 Walkway UG" "32a" 1 "NULL" "0, 16,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_32a.mdl" "Portal 2 Walkway UG" "32a" 2 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_32b.mdl" "Portal 2 Walkway UG" "32b" 1 "NULL" "0, 16,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_32b.mdl" "Portal 2 Walkway UG" "32b" 2 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_32c.mdl" "Portal 2 Walkway UG" "32c" 1 "NULL" "0, 16,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_32c.mdl" "Portal 2 Walkway UG" "32c" 2 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_512a.mdl" "Portal 2 Walkway UG" "512a" 1 "NULL" "0, 256,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_512a.mdl" "Portal 2 Walkway UG" "512a" 2 "NULL" "0,-256,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_512b.mdl" "Portal 2 Walkway UG" "512b" 1 "NULL" "0, 256,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_512b.mdl" "Portal 2 Walkway UG" "512b" 2 "NULL" "0,-256,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_512c.mdl" "Portal 2 Walkway UG" "512c" 1 "NULL" "0, 256,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_512c.mdl" "Portal 2 Walkway UG" "512c" 2 "NULL" "0,-256,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_64a.mdl" "Portal 2 Walkway UG" "64a" 1 "NULL" "0, 32,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_64a.mdl" "Portal 2 Walkway UG" "64a" 2 "NULL" "0,-32,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_64b.mdl" "Portal 2 Walkway UG" "64b" 1 "NULL" "0, 32,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_64b.mdl" "Portal 2 Walkway UG" "64b" 2 "NULL" "0,-32,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_64c.mdl" "Portal 2 Walkway UG" "64c" 1 "NULL" "0, 32,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_64c.mdl" "Portal 2 Walkway UG" "64c" 2 "NULL" "0,-32,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_corner.mdl" "Portal 2 Walkway UG" "Corner" 1 "NULL" "64,0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_corner.mdl" "Portal 2 Walkway UG" "Corner" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_destroyed_128a.mdl" "Portal 2 Walkway UG" "128a" 1 "NULL" "0,0,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_destroyed_64a.mdl" "Portal 2 Walkway UG" "64a" 1 "NULL" "0,0,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_end_a.mdl" "Portal 2 Walkway UG" "A" 1 "NULL" "0,-16,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_end_b.mdl" "Portal 2 Walkway UG" "B" 1 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_end_c.mdl" "Portal 2 Walkway UG" "C" 1 "36,0,-2.125" "0, 4,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_end_c.mdl" "Portal 2 Walkway UG" "C" 2 "-36,0,-2.125" "0,-4,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_end_cap.mdl" "Portal 2 Walkway UG" "Cap" 1 "36,0,-2.125" "0, 4,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_end_cap.mdl" "Portal 2 Walkway UG" "Cap" 2 "-36,0,-2.125" "0,-4,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_gate_a.mdl" "Portal 2 Walkway UG" "A" 1 "NULL" "0, 4,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_gate_a.mdl" "Portal 2 Walkway UG" "A" 2 "NULL" "0,-4,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_gate_b.mdl" "Portal 2 Walkway UG" "B" 1 "NULL" "0, 4,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_gate_b.mdl" "Portal 2 Walkway UG" "B" 2 "NULL" "0,-4,-2.125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_gate_frame.mdl" "Portal 2 Walkway UG" "Frame" 1 "36,0,-2.125" "0, 4,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_gate_frame.mdl" "Portal 2 Walkway UG" "Frame" 2 "-36,0,-2.125" "0,-4,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_gate_frame_alt.mdl" "Portal 2 Walkway UG" "Alt" 1 "36,0,-2.125" "0, 4,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_gate_frame_alt.mdl" "Portal 2 Walkway UG" "Alt" 2 "-36,0,-2.125" "0,-4,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_l.mdl" "Portal 2 Walkway UG" "L" 1 "NULL" "64,0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_l.mdl" "Portal 2 Walkway UG" "L" 2 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_t.mdl" "Portal 2 Walkway UG" "T" 1 "NULL" "64,0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_t.mdl" "Portal 2 Walkway UG" "T" 2 "NULL" "0,64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_t.mdl" "Portal 2 Walkway UG" "T" 3 "NULL" "0,-64,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_x.mdl" "Portal 2 Walkway UG" "X" 1 "NULL" "64,0,-2.125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_x.mdl" "Portal 2 Walkway UG" "X" 2 "NULL" "0,64,-2.125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_x.mdl" "Portal 2 Walkway UG" "X" 3 "NULL" "-64,0,-2.125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_underground/walkway_x.mdl" "Portal 2 Walkway UG" "X" 4 "NULL" "0,-64,-2.125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_90deg.mdl" "Portal Tubes" "Clear Tube 90deg" 1 "NULL" "64.041,0.049, 0.131" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_90deg.mdl" "Portal Tubes" "Clear Tube 90deg" 2 "NULL" " 0.002,0.040,-63.904" "90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_broken.mdl" "Portal Tubes" "Clear Tube Broken" 1 "NULL" "0.009,0 , 63.896" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_broken.mdl" "Portal Tubes" "Clear Tube Broken" 2 "NULL" "0.008,0.004,-63.897" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_straight.mdl" "Portal Tubes" "Clear Tube Straight" 1 "NULL" "0.009,0 , 63.896" "-90, 0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_straight.mdl" "Portal Tubes" "Clear Tube Straight" 2 "NULL" "0.008,0.004,-63.897" " 90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_tjoint.mdl" "Portal Tubes" "Clear Tube Tjoint" 1 "NULL" "-0.014,0.13,96.075" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_tjoint.mdl" "Portal Tubes" "Clear Tube Tjoint" 2 "NULL" "-0.004,-95.763,0.016" "0,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/props_bts/clear_tube_tjoint.mdl" "Portal Tubes" "Clear Tube Tjoint" 3 "NULL" "0,96,0.083" "0,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/askari/bridge01_stlve.mdl" "Random Bridges" "Stlve" 1 "NULL" "192, 0, 189.531" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/askari/bridge01_stlve.mdl" "Random Bridges" "Stlve" 2 "NULL" "-192, 0, 189.531" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/karkar/bridge.mdl" "Random Bridges" "Karkar" 1 "NULL" "62.07, -343.696, 208.295" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/karkar/bridge.mdl" "Random Bridges" "Karkar" 2 "NULL" "62.07, 334.44, 208.295" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/karkar/wooden_bridge_helly.mdl" "Random Bridges" "Wooden Bridge Helly" 1 "NULL" "0, 318.601, 26.783" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/karkar/wooden_bridge_helly.mdl" "Random Bridges" "Wooden Bridge Helly" 2 "NULL" "0, -240.814, 2.85" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/karkar/wooden_bridge_helly_broken_bstk.mdl" "Random Bridges" "Wooden Bridge Helly Broken Bstk" 1 "NULL" "-318.524, 0, 26.757" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/karkar/wooden_bridge_helly_broken_bstk.mdl" "Random Bridges" "Wooden Bridge Helly Broken Bstk" 2 "NULL" "244.523, 0, 3.55" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/tresslebridge.mdl" "Random Bridges" "Tresslebridge" 1 "NULL" "374.246, -1.2345, 24.849" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props/tresslebridge.mdl" "Random Bridges" "Tresslebridge" 2 "NULL" "-345.367, -1.2345, 24.85" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_2fort/bridgesupports001.mdl" "Random Bridges" "TF Support" 1 "NULL" "448, 0, -14.268" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_2fort/bridgesupports001.mdl" "Random Bridges" "TF Support" 2 "NULL" "-448, 0, -15.558" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge01.mdl" "Random Bridges" "Canal Bridge01" 1 "NULL" "455.345, -6.815, 201.73" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge01.mdl" "Random Bridges" "Canal Bridge01" 2 "NULL" "-456.655, -6.815, 201.73" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge01b.mdl" "Random Bridges" "Canal Bridge01b" 1 "NULL" "910.69, -13.63, 403.46" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge01b.mdl" "Random Bridges" "Canal Bridge01b" 2 "NULL" "-913.31, -13.63, 403.46" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge02.mdl" "Random Bridges" "Canal Bridge02" 1 "NULL" "0, 512.155, 288" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge02.mdl" "Random Bridges" "Canal Bridge02" 2 "NULL" "0, -512.212, 288" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge03a.mdl" "Random Bridges" "Canal Bridge03a" 1 "NULL" "320.89, 0, 187.742" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge03a.mdl" "Random Bridges" "Canal Bridge03a" 2 "NULL" "-320.059, 0, 187.742" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge03b.mdl" "Random Bridges" "Canal Bridge03b" 1 "NULL" "320.89, 0, 187.741" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge03b.mdl" "Random Bridges" "Canal Bridge03b" 2 "NULL" "-320.059, 0, 187.741" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge03c.mdl" "Random Bridges" "Canal Bridge03c" 1 "NULL" "1026.848, 0, 600.773" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_canal/canal_bridge03c.mdl" "Random Bridges" "Canal Bridge03c" 2 "NULL" "-1024.189, 0, 600.773" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_combine/combine_bridge.mdl" "Random Bridges" "Combine Bridge" 1 "NULL" "-8.401, 0, 124.685" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_combine/combine_bridge.mdl" "Random Bridges" "Combine Bridge" 2 "NULL" "-320, 0, 124.685" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_combine/combine_bridge_b.mdl" "Random Bridges" "Combine Bridge B" 1 "NULL" "-330.895, 0.039, 124.673" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_combine/combine_bridge_b.mdl" "Random Bridges" "Combine Bridge B" 2 "NULL" "-522.855, 0.251, 124.671" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/big_jetty.mdl" "Random Bridges" "Big Jetty" 1 "NULL" "0, 116.668, 57.94" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/big_jetty.mdl" "Random Bridges" "Big Jetty" 2 "NULL" "0, -11.914, 57.939" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_128.mdl" "Random Bridges" "Boardwalk 128" 1 "NULL" "0, 67.452, 14.326" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_128.mdl" "Random Bridges" "Boardwalk 128" 2 "NULL" "0,-63.954, 14.325" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_256.mdl" "Random Bridges" "Boardwalk 256" 1 "NULL" "0, 131.491, 14.199" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_256.mdl" "Random Bridges" "Boardwalk 256" 2 "NULL" "0,-139.388, 14.198" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_384.mdl" "Random Bridges" "Boardwalk 384" 1 "NULL" "0, 199.517, 14.302" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_384.mdl" "Random Bridges" "Boardwalk 384" 2 "NULL" "0,-196.069, 14.215" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_tall_128.mdl" "Random Bridges" "Boardwalk Tall 128" 1 "NULL" "0, 67.244, 14.323" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_tall_128.mdl" "Random Bridges" "Boardwalk Tall 128" 2 "NULL" "0,-63.033, 14.337" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_tall_256.mdl" "Random Bridges" "Boardwalk Tall 256" 1 "NULL" "0, 131.502, 14.339" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_tall_256.mdl" "Random Bridges" "Boardwalk Tall 256" 2 "NULL" "0,-127.085, 14.319" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_tall_384.mdl" "Random Bridges" "Boardwalk Tall 384" 1 "NULL" "0, 199.517, 14.332" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_swamp/boardwalk_tall_384.mdl" "Random Bridges" "Boardwalk Tall 384" 2 "NULL" "0,-196.012, 14.318" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_viaduct_event/underworld_bridge01.mdl" "Random Bridges" "Underworld Bridge01" 1 "NULL" "0, 68.767, 14.898" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_viaduct_event/underworld_bridge01.mdl" "Random Bridges" "Underworld Bridge01" 2 "NULL" "0, -70.316, 14.898" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_viaduct_event/underworld_bridge02.mdl" "Random Bridges" "Underworld Bridge02" 1 "NULL" "5.236, -13.396, 11.976" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_viaduct_event/underworld_bridge02.mdl" "Random Bridges" "Underworld Bridge02" 2 "NULL" "5.236, 479.851, 11.976" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_viaduct_event/underworld_bridge03.mdl" "Random Bridges" "Underworld Bridge03" 1 "NULL" "1.436, -12.169, 11.136" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_viaduct_event/underworld_bridge03.mdl" "Random Bridges" "Underworld Bridge03" 2 "NULL" "1.436, 480.851, 11.136" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_viaduct_event/underworld_bridge04.mdl" "Random Bridges" "Underworld Bridge04" 1 "NULL" "-2.253, -11.847, 10.696" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_viaduct_event/underworld_bridge04.mdl" "Random Bridges" "Underworld Bridge04" 2 "NULL" "-2.253, 480.851, 10.696" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/props_wasteland/bridge_low_res.mdl" "Random Bridges" "Bridge Low Res" 1 "NULL" "5056, 219.145, 992.765" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/props_wasteland/bridge_low_res.mdl" "Random Bridges" "Bridge Low Res" 2 "NULL" "-576, 219.145, 992.765" "0, 180,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/small_bunker1.mdl" "RockMan's Fortification" "Bunker1" 1 "NULL" "0,-72,-24" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/small_bunker1a.mdl" "RockMan's Fortification" "Bunker1a" 1 "NULL" "0,-156,-24" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/small_bunker2.mdl" "RockMan's Fortification" "Bunker2" 1 "NULL" "0,-100,-24" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/small_bunker2a.mdl" "RockMan's Fortification" "Bunker2a" 1 "NULL" "0,-156,-24" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_3way.mdl" "RockMan's Fortification" "3way" 1 "NULL" "192,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_3way.mdl" "RockMan's Fortification" "3way" 2 "NULL" "0,192,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_3way.mdl" "RockMan's Fortification" "3way" 3 "NULL" "-192,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_4way.mdl" "RockMan's Fortification" "4way" 1 "NULL" "192,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_4way.mdl" "RockMan's Fortification" "4way" 2 "NULL" "0,192,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_4way.mdl" "RockMan's Fortification" "4way" 3 "NULL" "-192,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_4way.mdl" "RockMan's Fortification" "4way" 4 "NULL" "0,-192,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_end_corridor.mdl" "RockMan's Fortification" "Corridor" 1 "NULL" "177,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_end_corridor.mdl" "RockMan's Fortification" "Corridor" 2 "NULL" "0,192,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_end_corridor.mdl" "RockMan's Fortification" "Corridor" 3 "NULL" "-177,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_end_single.mdl" "RockMan's Fortification" "Single" 1 "NULL" "0,-80,0" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_end_single.mdl" "RockMan's Fortification" "Single" 2 "NULL" "0,80,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_straight.mdl" "RockMan's Fortification" "Straight" 1 "NULL" "177,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_straight.mdl" "RockMan's Fortification" "Straight" 2 "NULL" "-177,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_turn.mdl" "RockMan's Fortification" "Turn" 1 "NULL" "16.5014,208.5,0" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/fortification collection/trench_turn.mdl" "RockMan's Fortification" "Turn" 2 "NULL" "-208.5,-16.5014,0" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_1024.mdl" "Ron's 2ft track pack" "W 1024" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_1024.mdl" "Ron's 2ft track pack" "W 1024" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_128.mdl" "Ron's 2ft track pack" "W 128" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_128.mdl" "Ron's 2ft track pack" "W 128" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_256.mdl" "Ron's 2ft track pack" "W 256" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_256.mdl" "Ron's 2ft track pack" "W 256" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_1024.mdl" "Ron's 2ft track pack" "C 1024" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_1024.mdl" "Ron's 2ft track pack" "C 1024" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_128.mdl" "Ron's 2ft track pack" "C 128" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_128.mdl" "Ron's 2ft track pack" "C 128" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_256.mdl" "Ron's 2ft track pack" "C 256" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_256.mdl" "Ron's 2ft track pack" "C 256" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_32.mdl" "Ron's 2ft track pack" "C 32" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_32.mdl" "Ron's 2ft track pack" "C 32" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_512.mdl" "Ron's 2ft track pack" "C 512" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_512.mdl" "Ron's 2ft track pack" "C 512" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_64.mdl" "Ron's 2ft track pack" "C 64" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_64.mdl" "Ron's 2ft track pack" "C 64" 2 "NULL" "-32,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_left_1.mdl" "Ron's 2ft track pack" "C Curve 45 Left 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_left_1.mdl" "Ron's 2ft track pack" "C Curve 45 Left 1" 2 "NULL" "-724.122,-299.876,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_left_2.mdl" "Ron's 2ft track pack" "C Curve 45 Left 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_left_2.mdl" "Ron's 2ft track pack" "C Curve 45 Left 2" 2 "NULL" "-811.77,-336.23,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_left_3.mdl" "Ron's 2ft track pack" "C Curve 45 Left 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_left_3.mdl" "Ron's 2ft track pack" "C Curve 45 Left 3" 2 "NULL" "-899.503,-372.497,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_left_4.mdl" "Ron's 2ft track pack" "C Curve 45 Left 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_left_4.mdl" "Ron's 2ft track pack" "C Curve 45 Left 4" 2 "NULL" "-987.115,-408.885,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_right_1.mdl" "Ron's 2ft track pack" "C Curve 45 Right 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_right_1.mdl" "Ron's 2ft track pack" "C Curve 45 Right 1" 2 "NULL" "-724.122,299.876,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_right_2.mdl" "Ron's 2ft track pack" "C Curve 45 Right 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_right_2.mdl" "Ron's 2ft track pack" "C Curve 45 Right 2" 2 "NULL" "-811.77,336.23,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_right_3.mdl" "Ron's 2ft track pack" "C Curve 45 Right 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_right_3.mdl" "Ron's 2ft track pack" "C Curve 45 Right 3" 2 "NULL" "-899.503,372.497,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_right_4.mdl" "Ron's 2ft track pack" "C Curve 45 Right 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_45_right_4.mdl" "Ron's 2ft track pack" "C Curve 45 Right 4" 2 "NULL" "-987.115,408.885,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_90_1.mdl" "Ron's 2ft track pack" "C Curve 90 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_90_1.mdl" "Ron's 2ft track pack" "C Curve 90 1" 2 "NULL" "-1024,-1024,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_90_2.mdl" "Ron's 2ft track pack" "C Curve 90 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_90_2.mdl" "Ron's 2ft track pack" "C Curve 90 2" 2 "NULL" "-1148,-1148,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_90_3.mdl" "Ron's 2ft track pack" "C Curve 90 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_90_3.mdl" "Ron's 2ft track pack" "C Curve 90 3" 2 "NULL" "-1272,-1272,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_90_4.mdl" "Ron's 2ft track pack" "C Curve 90 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_curve_90_4.mdl" "Ron's 2ft track pack" "C Curve 90 4" 2 "NULL" "-1396,-1396,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_end.mdl" "Ron's 2ft track pack" "C End" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_end.mdl" "Ron's 2ft track pack" "C End" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_pillar.mdl" "Ron's 2ft track pack" "C Pillar" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_2_pillar.mdl" "Ron's 2ft track pack" "C Pillar" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_512.mdl" "Ron's 2ft track pack" "W 512" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_512.mdl" "Ron's 2ft track pack" "W 512" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_end.mdl" "Ron's 2ft track pack" "W End" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_end.mdl" "Ron's 2ft track pack" "W End" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_pillar.mdl" "Ron's 2ft track pack" "W Pillar" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/bridges/bridge_pillar.mdl" "Ron's 2ft track pack" "W Pillar" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_left_1.mdl" "Ron's 2ft track pack" "22.5 Left 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_left_1.mdl" "Ron's 2ft track pack" "22.5 Left 1" 2 "NULL" "-391.846,-77.978,6.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_left_2.mdl" "Ron's 2ft track pack" "22.5 Left 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_left_2.mdl" "Ron's 2ft track pack" "22.5 Left 2" 2 "NULL" "-439.352,-87.36,6.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_left_3.mdl" "Ron's 2ft track pack" "22.5 Left 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_left_3.mdl" "Ron's 2ft track pack" "22.5 Left 3" 2 "NULL" "-486.814,-96.707,6.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_left_4.mdl" "Ron's 2ft track pack" "22.5 Left 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_left_4.mdl" "Ron's 2ft track pack" "22.5 Left 4" 2 "NULL" "-532.889,-105.687,6.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_right_1.mdl" "Ron's 2ft track pack" "22.5 Right 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_right_1.mdl" "Ron's 2ft track pack" "22.5 Right 1" 2 "NULL" "-391.846,77.978,6.016" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_right_2.mdl" "Ron's 2ft track pack" "22.5 Right 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_right_2.mdl" "Ron's 2ft track pack" "22.5 Right 2" 2 "NULL" "-439.352,87.36,6.016" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_right_3.mdl" "Ron's 2ft track pack" "22.5 Right 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_right_3.mdl" "Ron's 2ft track pack" "22.5 Right 3" 2 "NULL" "-486.814,96.707,6.016" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_right_4.mdl" "Ron's 2ft track pack" "22.5 Right 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_225_right_4.mdl" "Ron's 2ft track pack" "22.5 Right 4" 2 "NULL" "-532.866,105.763,6.016" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_left_1.mdl" "Ron's 2ft track pack" "45 Left 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_left_1.mdl" "Ron's 2ft track pack" "45 Left 1" 2 "NULL" "-724.122,-299.876,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_left_2.mdl" "Ron's 2ft track pack" "45 Left 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_left_2.mdl" "Ron's 2ft track pack" "45 Left 2" 2 "NULL" "-811.77,-336.23,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_left_3.mdl" "Ron's 2ft track pack" "45 Left 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_left_3.mdl" "Ron's 2ft track pack" "45 Left 3" 2 "NULL" "-899.503,-372.497,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_left_4.mdl" "Ron's 2ft track pack" "45 Left 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_left_4.mdl" "Ron's 2ft track pack" "45 Left 4" 2 "NULL" "-987.115,-408.885,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_right_1.mdl" "Ron's 2ft track pack" "45 Right 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_right_1.mdl" "Ron's 2ft track pack" "45 Right 1" 2 "NULL" "-724.122,299.876,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_right_2.mdl" "Ron's 2ft track pack" "45 Right 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_right_2.mdl" "Ron's 2ft track pack" "45 Right 2" 2 "NULL" "-811.77,336.23,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_right_3.mdl" "Ron's 2ft track pack" "45 Right 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_right_3.mdl" "Ron's 2ft track pack" "45 Right 3" 2 "NULL" "-899.503,372.497,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_right_4.mdl" "Ron's 2ft track pack" "45 Right 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_45_right_4.mdl" "Ron's 2ft track pack" "45 Right 4" 2 "NULL" "-987.115,408.885,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_90_1.mdl" "Ron's 2ft track pack" "90 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_90_1.mdl" "Ron's 2ft track pack" "90 1" 2 "NULL" "-1024,-1024,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_90_2.mdl" "Ron's 2ft track pack" "90 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_90_2.mdl" "Ron's 2ft track pack" "90 2" 2 "NULL" "-1148,-1148,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_90_3.mdl" "Ron's 2ft track pack" "90 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_90_3.mdl" "Ron's 2ft track pack" "90 3" 2 "NULL" "-1272,-1272,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_90_4.mdl" "Ron's 2ft track pack" "90 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/curve_90_4.mdl" "Ron's 2ft track pack" "90 4" 2 "NULL" "-1396,-1396,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/s_curve_left.mdl" "Ron's 2ft track pack" "S Left" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/s_curve_left.mdl" "Ron's 2ft track pack" "S Left" 2 "NULL" "-704,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/s_curve_right.mdl" "Ron's 2ft track pack" "S Right" 1 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/curves/s_curve_right.mdl" "Ron's 2ft track pack" "S Right" 2 "NULL" "-704,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_1024.mdl" "Ron's 2ft track pack" "1024" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_1024.mdl" "Ron's 2ft track pack" "1024" 2 "NULL" "-512,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_1024_sided.mdl" "Ron's 2ft track pack" "1024 sided" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_1024_sided.mdl" "Ron's 2ft track pack" "1024 sided" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_1024_sidedd.mdl" "Ron's 2ft track pack" "1024 double sided" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_1024_sidedd.mdl" "Ron's 2ft track pack" "1024 double sided" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_128.mdl" "Ron's 2ft track pack" "128" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_128.mdl" "Ron's 2ft track pack" "128" 2 "NULL" "-64,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_128_sided.mdl" "Ron's 2ft track pack" "128 sided" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_128_sided.mdl" "Ron's 2ft track pack" "128 sided" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_128_sidedd.mdl" "Ron's 2ft track pack" "128 double sided" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_128_sidedd.mdl" "Ron's 2ft track pack" "128 double sided" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_256.mdl" "Ron's 2ft track pack" "256" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_256.mdl" "Ron's 2ft track pack" "256" 2 "NULL" "-128,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_256_sided.mdl" "Ron's 2ft track pack" "256 sided" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_256_sided.mdl" "Ron's 2ft track pack" "256 sided" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_256_sidedd.mdl" "Ron's 2ft track pack" "256 double sided" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_256_sidedd.mdl" "Ron's 2ft track pack" "256 double sided" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_32.mdl" "Ron's 2ft track pack" "32" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_32.mdl" "Ron's 2ft track pack" "32" 2 "NULL" "-16,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_32_sided.mdl" "Ron's 2ft track pack" "32 sided" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_32_sided.mdl" "Ron's 2ft track pack" "32 sided" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_32_sidedd.mdl" "Ron's 2ft track pack" "32 double sided" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_32_sidedd.mdl" "Ron's 2ft track pack" "32 double sided" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_512.mdl" "Ron's 2ft track pack" "512" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_512.mdl" "Ron's 2ft track pack" "512" 2 "NULL" "-256,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_512_sided.mdl" "Ron's 2ft track pack" "512 sided" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_512_sided.mdl" "Ron's 2ft track pack" "512 sided" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_512_sidedd.mdl" "Ron's 2ft track pack" "512 double sided" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_512_sidedd.mdl" "Ron's 2ft track pack" "512 double sided" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_64.mdl" "Ron's 2ft track pack" "64" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_64.mdl" "Ron's 2ft track pack" "64" 2 "NULL" "-32,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_64_sided.mdl" "Ron's 2ft track pack" "64 sided" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_64_sided.mdl" "Ron's 2ft track pack" "64 sided" 2 "NULL" "-32,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_64_sidedd.mdl" "Ron's 2ft track pack" "64 double sided" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_64_sidedd.mdl" "Ron's 2ft track pack" "64 double sided" 2 "NULL" "-32,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_bridge.mdl" "Ron's 2ft track pack" "Bridge" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_bridge.mdl" "Ron's 2ft track pack" "Bridge" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_bridge_sided.mdl" "Ron's 2ft track pack" "Bridge sided" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_bridge_sided.mdl" "Ron's 2ft track pack" "Bridge sided" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_bridge_sided_m.mdl" "Ron's 2ft track pack" "Bridge sided M" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_bridge_sided_m.mdl" "Ron's 2ft track pack" "Bridge sided M" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_bridge_sidedd.mdl" "Ron's 2ft track pack" "Bridge double sided" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_bridge_sidedd.mdl" "Ron's 2ft track pack" "Bridge double sided" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_buffer.mdl" "Ron's 2ft track pack" "Buffer" 1 "NULL" "-40,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_buffer_sided.mdl" "Ron's 2ft track pack" "Buffer Sided" 1 "NULL" "-40,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_buffer_sided_m.mdl" "Ron's 2ft track pack" "Buffer Sided m" 1 "NULL" "-40,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_buffer_sidedd.mdl" "Ron's 2ft track pack" "Buffer Sidedd" 1 "NULL" "-40,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_1.mdl" "Ron's 2ft track pack" "45 Left 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_1.mdl" "Ron's 2ft track pack" "45 Left 1" 2 "NULL" "-724.122,-299.876,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_2.mdl" "Ron's 2ft track pack" "45 Left 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_2.mdl" "Ron's 2ft track pack" "45 Left 2" 2 "NULL" "-811.77,-336.23,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_3.mdl" "Ron's 2ft track pack" "45 Left 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_3.mdl" "Ron's 2ft track pack" "45 Left 3" 2 "NULL" "-899.503,-372.497,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_4.mdl" "Ron's 2ft track pack" "45 Left 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_4.mdl" "Ron's 2ft track pack" "45 Left 4" 2 "NULL" "-987.115,-408.885,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_1.mdl" "Ron's 2ft track pack" "Sided 45 Left 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_1.mdl" "Ron's 2ft track pack" "Sided 45 Left 1" 2 "NULL" "-724.122,-299.876,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_2.mdl" "Ron's 2ft track pack" "Sided 45 Left 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_2.mdl" "Ron's 2ft track pack" "Sided 45 Left 2" 2 "NULL" "-811.77,-336.23,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_3.mdl" "Ron's 2ft track pack" "Sided 45 Left 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_3.mdl" "Ron's 2ft track pack" "Sided 45 Left 3" 2 "NULL" "-899.503,-372.497,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_4.mdl" "Ron's 2ft track pack" "Sided 45 Left 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_4.mdl" "Ron's 2ft track pack" "Sided 45 Left 4" 2 "NULL" "-987.115,-408.885,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_m_1.mdl" "Ron's 2ft track pack" "Sided M 45 Left 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_m_1.mdl" "Ron's 2ft track pack" "Sided M 45 Left 1" 2 "NULL" "-724.122,-299.876,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_m_2.mdl" "Ron's 2ft track pack" "Sided M 45 Left 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_m_2.mdl" "Ron's 2ft track pack" "Sided M 45 Left 2" 2 "NULL" "-811.77,-336.23,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_m_3.mdl" "Ron's 2ft track pack" "Sided M 45 Left 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_m_3.mdl" "Ron's 2ft track pack" "Sided M 45 Left 3" 2 "NULL" "-899.503,-372.497,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_m_4.mdl" "Ron's 2ft track pack" "Sided M 45 Left 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sided_m_4.mdl" "Ron's 2ft track pack" "Sided M 45 Left 4" 2 "NULL" "-987.115,-408.885,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sidedd_1.mdl" "Ron's 2ft track pack" "Sided Double 45 Left 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sidedd_1.mdl" "Ron's 2ft track pack" "Sided Double 45 Left 1" 2 "NULL" "-724.122,-299.876,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sidedd_2.mdl" "Ron's 2ft track pack" "Sided Double 45 Left 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sidedd_2.mdl" "Ron's 2ft track pack" "Sided Double 45 Left 2" 2 "NULL" "-811.77,-336.23,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sidedd_3.mdl" "Ron's 2ft track pack" "Sided Double 45 Left 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sidedd_3.mdl" "Ron's 2ft track pack" "Sided Double 45 Left 3" 2 "NULL" "-899.503,-372.497,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sidedd_4.mdl" "Ron's 2ft track pack" "Sided Double 45 Left 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_left_sidedd_4.mdl" "Ron's 2ft track pack" "Sided Double 45 Left 4" 2 "NULL" "-987.115,-408.885,6.016" "0,-135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_1.mdl" "Ron's 2ft track pack" "45 Right 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_1.mdl" "Ron's 2ft track pack" "45 Right 1" 2 "NULL" "-724.122,299.876,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_2.mdl" "Ron's 2ft track pack" "45 Right 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_2.mdl" "Ron's 2ft track pack" "45 Right 2" 2 "NULL" "-811.77,336.23,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_3.mdl" "Ron's 2ft track pack" "45 Right 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_3.mdl" "Ron's 2ft track pack" "45 Right 3" 2 "NULL" "-899.503,372.497,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_4.mdl" "Ron's 2ft track pack" "45 Right 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_4.mdl" "Ron's 2ft track pack" "45 Right 4" 2 "NULL" "-987.115,408.885,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_1.mdl" "Ron's 2ft track pack" "Sided 45 Right 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_1.mdl" "Ron's 2ft track pack" "Sided 45 Right 1" 2 "NULL" "-724.122,299.876,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_2.mdl" "Ron's 2ft track pack" "Sided 45 Right 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_2.mdl" "Ron's 2ft track pack" "Sided 45 Right 2" 2 "NULL" "-811.77,336.23,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_3.mdl" "Ron's 2ft track pack" "Sided 45 Right 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_3.mdl" "Ron's 2ft track pack" "Sided 45 Right 3" 2 "NULL" "-899.503,372.497,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_4.mdl" "Ron's 2ft track pack" "Sided 45 Right 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_4.mdl" "Ron's 2ft track pack" "Sided 45 Right 4" 2 "NULL" "-987.115,408.885,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_m_1.mdl" "Ron's 2ft track pack" "Sided M 45 Right 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_m_1.mdl" "Ron's 2ft track pack" "Sided M 45 Right 1" 2 "NULL" "-724.122,299.876,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_m_2.mdl" "Ron's 2ft track pack" "Sided M 45 Right 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_m_2.mdl" "Ron's 2ft track pack" "Sided M 45 Right 2" 2 "NULL" "-811.77,336.23,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_m_3.mdl" "Ron's 2ft track pack" "Sided M 45 Right 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_m_3.mdl" "Ron's 2ft track pack" "Sided M 45 Right 3" 2 "NULL" "-899.503,372.497,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_m_4.mdl" "Ron's 2ft track pack" "Sided M 45 Right 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sided_m_4.mdl" "Ron's 2ft track pack" "Sided M 45 Right 4" 2 "NULL" "-987.115,408.885,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sidedd_1.mdl" "Ron's 2ft track pack" "Sided Double 45 Right 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sidedd_1.mdl" "Ron's 2ft track pack" "Sided Double 45 Right 1" 2 "NULL" "-724.122,299.876,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sidedd_2.mdl" "Ron's 2ft track pack" "Sided Double 45 Right 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sidedd_2.mdl" "Ron's 2ft track pack" "Sided Double 45 Right 2" 2 "NULL" "-811.77,336.23,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sidedd_3.mdl" "Ron's 2ft track pack" "Sided Double 45 Right 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sidedd_3.mdl" "Ron's 2ft track pack" "Sided Double 45 Right 3" 2 "NULL" "-899.503,372.497,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sidedd_4.mdl" "Ron's 2ft track pack" "Sided Double 45 Right 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_45_right_sidedd_4.mdl" "Ron's 2ft track pack" "Sided Double 45 Right 4" 2 "NULL" "-987.115,408.885,6.016" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_1.mdl" "Ron's 2ft track pack" "90 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_1.mdl" "Ron's 2ft track pack" "90 1" 2 "NULL" "-1024,-1024,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_2.mdl" "Ron's 2ft track pack" "90 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_2.mdl" "Ron's 2ft track pack" "90 2" 2 "NULL" "-1148,-1148,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_3.mdl" "Ron's 2ft track pack" "90 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_3.mdl" "Ron's 2ft track pack" "90 3" 2 "NULL" "-1272,-1272,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_4.mdl" "Ron's 2ft track pack" "90 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_4.mdl" "Ron's 2ft track pack" "90 4" 2 "NULL" "-1396,-1396,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_1.mdl" "Ron's 2ft track pack" "Sided 90 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_1.mdl" "Ron's 2ft track pack" "Sided 90 1" 2 "NULL" "-1024,-1024,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_2.mdl" "Ron's 2ft track pack" "Sided 90 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_2.mdl" "Ron's 2ft track pack" "Sided 90 2" 2 "NULL" "-1148,-1148,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_3.mdl" "Ron's 2ft track pack" "Sided 90 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_3.mdl" "Ron's 2ft track pack" "Sided 90 3" 2 "NULL" "-1272,-1272,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_4.mdl" "Ron's 2ft track pack" "Sided 90 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_4.mdl" "Ron's 2ft track pack" "Sided 90 4" 2 "NULL" "-1396,-1396,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_m_1.mdl" "Ron's 2ft track pack" "Sided M 90 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_m_1.mdl" "Ron's 2ft track pack" "Sided M 90 1" 2 "NULL" "-1024,-1024,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_m_2.mdl" "Ron's 2ft track pack" "Sided M 90 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_m_2.mdl" "Ron's 2ft track pack" "Sided M 90 2" 2 "NULL" "-1148,-1148,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_m_3.mdl" "Ron's 2ft track pack" "Sided M 90 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_m_3.mdl" "Ron's 2ft track pack" "Sided M 90 3" 2 "NULL" "-1272,-1272,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_m_4.mdl" "Ron's 2ft track pack" "Sided M 90 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sided_m_4.mdl" "Ron's 2ft track pack" "Sided M 90 4" 2 "NULL" "-1396,-1396,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sidedd_1.mdl" "Ron's 2ft track pack" "Sided Double 90 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sidedd_1.mdl" "Ron's 2ft track pack" "Sided Double 90 1" 2 "NULL" "-1024,-1024,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sidedd_2.mdl" "Ron's 2ft track pack" "Sided Double 90 2" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sidedd_2.mdl" "Ron's 2ft track pack" "Sided Double 90 2" 2 "NULL" "-1148,-1148,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sidedd_3.mdl" "Ron's 2ft track pack" "Sided Double 90 3" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sidedd_3.mdl" "Ron's 2ft track pack" "Sided Double 90 3" 2 "NULL" "-1272,-1272,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sidedd_4.mdl" "Ron's 2ft track pack" "Sided Double 90 4" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_curve_90_sidedd_4.mdl" "Ron's 2ft track pack" "Sided Double 90 4" 2 "NULL" "-1396,-1396,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_fitting.mdl" "Ron's 2ft track pack" "Fitting" 1 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_fitting.mdl" "Ron's 2ft track pack" "Fitting" 2 "NULL" "8,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_fitting_sided.mdl" "Ron's 2ft track pack" "Fitting Sided" 1 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_fitting_sided.mdl" "Ron's 2ft track pack" "Fitting Sided" 2 "NULL" "8,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_fitting_sided_m.mdl" "Ron's 2ft track pack" "Fitting Sided M" 1 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_fitting_sided_m.mdl" "Ron's 2ft track pack" "Fitting Sided M" 2 "NULL" "8,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_fitting_sidedd.mdl" "Ron's 2ft track pack" "Fitting Double Sided" 1 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_fitting_sidedd.mdl" "Ron's 2ft track pack" "Fitting Double Sided" 2 "NULL" "8,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_n_left.mdl" "Ron's 2ft track pack" "N Left" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_n_left.mdl" "Ron's 2ft track pack" "N Left" 2 "NULL" "-704,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_n_left.mdl" "Ron's 2ft track pack" "N Left" 3 "NULL" "-704,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_n_right.mdl" "Ron's 2ft track pack" "N Right" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_n_right.mdl" "Ron's 2ft track pack" "N Right" 2 "NULL" "-704,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_n_right.mdl" "Ron's 2ft track pack" "N Right" 3 "NULL" "-704,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_s_x.mdl" "Ron's 2ft track pack" "X" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_s_x.mdl" "Ron's 2ft track pack" "X" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_s_x.mdl" "Ron's 2ft track pack" "X" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_junction_s_x.mdl" "Ron's 2ft track pack" "X" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sided" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sided" 2 "NULL" "-704,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sided" 3 "NULL" "-704,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sided" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sided" 2 "NULL" "-704,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sided" 3 "NULL" "-704,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_s_x.mdl" "Ron's 2ft track pack" "X Sided" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_s_x.mdl" "Ron's 2ft track pack" "X Sided" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_s_x.mdl" "Ron's 2ft track pack" "X Sided" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_junction_s_x.mdl" "Ron's 2ft track pack" "X Sided" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_m_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sided m" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_m_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sided m" 2 "NULL" "-704,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_m_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sided m" 3 "NULL" "-704,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_m_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sided m" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_m_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sided m" 2 "NULL" "-704,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sided_m_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sided m" 3 "NULL" "-704,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sidedd" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sidedd" 2 "NULL" "-704,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_n_left.mdl" "Ron's 2ft track pack" "N Left Sidedd" 3 "NULL" "-704,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sidedd" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sidedd" 2 "NULL" "-704,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_n_right.mdl" "Ron's 2ft track pack" "N Right Sidedd" 3 "NULL" "-704,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_s_x.mdl" "Ron's 2ft track pack" "X Sidedd" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_s_x.mdl" "Ron's 2ft track pack" "X Sidedd" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_s_x.mdl" "Ron's 2ft track pack" "X Sidedd" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/embankment/embankment_sidedd_junction_s_x.mdl" "Ron's 2ft track pack" "X Sidedd" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/left_switched_1.mdl" "Ron's 2ft track pack" "Left Switched" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/left_switched_1.mdl" "Ron's 2ft track pack" "Left Switched" 2 "NULL" "-384,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/left_switched_1.mdl" "Ron's 2ft track pack" "Left Switched" 3 "NULL" "-391.842,-77.994,6.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/left_unswitched_1.mdl" "Ron's 2ft track pack" "Left Unswitched" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/left_unswitched_1.mdl" "Ron's 2ft track pack" "Left Unswitched" 2 "NULL" "-384,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/left_unswitched_1.mdl" "Ron's 2ft track pack" "Left Unswitched" 3 "NULL" "-391.842,-77.994,6.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/right_switched_1.mdl" "Ron's 2ft track pack" "Right Switched" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/right_switched_1.mdl" "Ron's 2ft track pack" "Right Switched" 2 "NULL" "-384,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/right_switched_1.mdl" "Ron's 2ft track pack" "Right Switched" 3 "NULL" "-391.842,77.994,6.016" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/right_unswitched_1.mdl" "Ron's 2ft track pack" "Right Unswitched" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/right_unswitched_1.mdl" "Ron's 2ft track pack" "Right Unswitched" 2 "NULL" "-384,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/junctions/right_unswitched_1.mdl" "Ron's 2ft track pack" "Right Unswitched" 3 "NULL" "-391.842,77.994,6.016" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/junctions/left/junction.mdl" "Ron's 2ft track pack" "Left" 1 "NULL" "0,0,6.016" "0,-90,0" "r2ftp_junction_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/junctions/left/junction.mdl" "Ron's 2ft track pack" "Left" 2 "NULL" "-0,384,6.016" "0,90,0" "r2ftp_junction_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/junctions/left/junction.mdl" "Ron's 2ft track pack" "Left" 3 "NULL" "-77.994,391.842,6.016" "0,112.5,0" "r2ftp_junction_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/junctions/right/junction.mdl" "Ron's 2ft track pack" "Right" 1 "NULL" "0,0,6.016" "0,-90,0" "r2ftp_junction_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/junctions/right/junction.mdl" "Ron's 2ft track pack" "Right" 2 "NULL" "0,384,6.016" "0,90,0" "r2ftp_junction_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/junctions/right/junction.mdl" "Ron's 2ft track pack" "Right" 3 "NULL" "77.994,391.842,6.016" "0,67.5,0" "r2ftp_junction_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl" "Ron's 2ft track pack" "N Left" 1 "NULL" "0,0,6.016" "0,-90,0" "r2ftp_junction_n_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl" "Ron's 2ft track pack" "N Left" 2 "NULL" "0,384,6.016" "0,90,0" "r2ftp_junction_n_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl" "Ron's 2ft track pack" "N Left" 3 "NULL" "-124,704,6.016" "0,90,0" "r2ftp_junction_n_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl" "Ron's 2ft track pack" "N Right" 1 "NULL" "0,0,6.016" "0,-90,0" "r2ftp_junction_n_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl" "Ron's 2ft track pack" "N Right" 2 "NULL" "0,384,6.016" "0,90,0" "r2ftp_junction_n_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl" "Ron's 2ft track pack" "N Right" 3 "NULL" "124,704,6.016" "0,90,0" "r2ftp_junction_n_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl" "Ron's 2ft track pack" "S Left" 1 "NULL" "0,0,6.016" "0,-90,0" "r2ftp_junction_s_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl" "Ron's 2ft track pack" "S Left" 2 "NULL" "0,384,6.016" "0,90,0" "r2ftp_junction_s_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl" "Ron's 2ft track pack" "S Left" 3 "NULL" "-124,704,6.016" "0,90,0" "r2ftp_junction_s_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl" "Ron's 2ft track pack" "S Left" 4 "NULL" "-124,320,6.016" "0,-90,0" "r2ftp_junction_s_left" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl" "Ron's 2ft track pack" "S Right" 1 "NULL" "0,0,6.016" "0,-90,0" "r2ftp_junction_s_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl" "Ron's 2ft track pack" "S Right" 2 "NULL" "0,384,6.016" "0, 90,0" "r2ftp_junction_s_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl" "Ron's 2ft track pack" "S Right" 3 "NULL" "124,704,6.016" "0, 90,0" "r2ftp_junction_s_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl" "Ron's 2ft track pack" "S Right" 4 "NULL" "124,320,6.016" "0,-90,0" "r2ftp_junction_s_right" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/x_junctions/x_junction.mdl" "Ron's 2ft track pack" "X" 1 "NULL" "62,0,6.016" "0,-90,0" "r2ftp_junction_x" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/x_junctions/x_junction.mdl" "Ron's 2ft track pack" "X" 2 "NULL" "62,704,6.016" "0,90,0" "r2ftp_junction_x" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/x_junctions/x_junction.mdl" "Ron's 2ft track pack" "X" 3 "NULL" "-62,704,6.016" "0,90,0" "r2ftp_junction_x" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/x_junctions/x_junction.mdl" "Ron's 2ft track pack" "X" 4 "NULL" "-62,0,6.016" "0,-90,0" "r2ftp_junction_x" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/y_junctions/y_junction.mdl" "Ron's 2ft track pack" "Y" 1 "NULL" "0,0,6.016" "0,-90,0" "r2ftp_junction_y" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/y_junctions/y_junction.mdl" "Ron's 2ft track pack" "Y" 2 "NULL" "77.969124,391.794891,6.016" "0, 67.5,0" "r2ftp_junction_y" +TRACKASSEMBLY_PIECES "models/ron/2ft/luajunctions/y_junctions/y_junction.mdl" "Ron's 2ft track pack" "Y" 3 "NULL" "-77.969093,391.794952,6.016" "0,112.5,0" "r2ftp_junction_y" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/90crossing.mdl" "Ron's 2ft track pack" "90 Crossing" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/90crossing.mdl" "Ron's 2ft track pack" "90 Crossing" 2 "NULL" "0,64,6.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/90crossing.mdl" "Ron's 2ft track pack" "90 Crossing" 3 "NULL" "-64,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/90crossing.mdl" "Ron's 2ft track pack" "90 Crossing" 4 "NULL" "0,-64,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/buffer.mdl" "Ron's 2ft track pack" "Buffer" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/buffer_2.mdl" "Ron's 2ft track pack" "Buffer Sh2" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/buffer_2.mdl" "Ron's 2ft track pack" "Buffer Sh2" 2 "NULL" "-32,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/buffer_3.mdl" "Ron's 2ft track pack" "Buffer 2" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/buffer_3.mdl" "Ron's 2ft track pack" "Buffer 2" 2 "NULL" "-32,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/passenger_crossing.mdl" "Ron's 2ft track pack" "Passenger Crossing" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/passenger_crossing.mdl" "Ron's 2ft track pack" "Passenger Crossing" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/rerailer.mdl" "Ron's 2ft track pack" "Rerailer" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/rerailer.mdl" "Ron's 2ft track pack" "Rerailer" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/shed.mdl" "Ron's 2ft track pack" "Shed" 1 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/shed_left.mdl" "Ron's 2ft track pack" "Shed Left" 1 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/shed_middle.mdl" "Ron's 2ft track pack" "Shed Middle" 1 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/shed_right.mdl" "Ron's 2ft track pack" "Shed Right" 1 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/track_barrier_closed.mdl" "Ron's 2ft track pack" "Track Barrier Closed" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/track_barrier_closed.mdl" "Ron's 2ft track pack" "Track Barrier Closed" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/track_barrier_opened.mdl" "Ron's 2ft track pack" "Track Barrier Open" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/track_barrier_opened.mdl" "Ron's 2ft track pack" "Track Barrier Open" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/track_bump.mdl" "Ron's 2ft track pack" "Track Bump" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/track_bump.mdl" "Ron's 2ft track pack" "Track Bump" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/track_damaged.mdl" "Ron's 2ft track pack" "Track Damaged" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/misc/track_damaged.mdl" "Ron's 2ft track pack" "Track Damaged" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_left_switched.mdl" "Ron's 2ft track pack" "Left Switched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_left_switched.mdl" "Ron's 2ft track pack" "Left Switched" 2 "NULL" "-384,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_left_switched.mdl" "Ron's 2ft track pack" "Left Switched" 3 "NULL" "-704,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_left_unswitched.mdl" "Ron's 2ft track pack" "Left Unswitched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_left_unswitched.mdl" "Ron's 2ft track pack" "Left Unswitched" 2 "NULL" "-384,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_left_unswitched.mdl" "Ron's 2ft track pack" "Left Unswitched" 3 "NULL" "-704,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_right_switched.mdl" "Ron's 2ft track pack" "Right Switched" 1 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_right_switched.mdl" "Ron's 2ft track pack" "Right Switched" 2 "NULL" "-384,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_right_switched.mdl" "Ron's 2ft track pack" "Right Switched" 3 "NULL" "-704,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_right_unswitched.mdl" "Ron's 2ft track pack" "Right Unswitched" 1 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_right_unswitched.mdl" "Ron's 2ft track pack" "Right Unswitched" 2 "NULL" "-384,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/njunctions/n_junction_right_unswitched.mdl" "Ron's 2ft track pack" "Right Unswitched" 3 "NULL" "-704,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_1.mdl" "Ron's 2ft track pack" "1024 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_1.mdl" "Ron's 2ft track pack" "1024 1" 2 "NULL" "-1024,0,70.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_embankment_1.mdl" "Ron's 2ft track pack" "1024 Embankment 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_embankment_1.mdl" "Ron's 2ft track pack" "1024 Embankment 1" 2 "NULL" "-1024,0,70.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_embankment_sided_1.mdl" "Ron's 2ft track pack" "1024 Embankment Sided 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_embankment_sided_1.mdl" "Ron's 2ft track pack" "1024 Embankment Sided 1" 2 "NULL" "-1024,0,70.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "1024 Embankment Sided M 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "1024 Embankment Sided M 1" 2 "NULL" "-1024,0,70.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "1024 Embankment Sided Double 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_1024_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "1024 Embankment Sided Double 1" 2 "NULL" "-1024,0,70.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_1.mdl" "Ron's 2ft track pack" "128 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_1.mdl" "Ron's 2ft track pack" "128 1" 2 "NULL" "-128,0,14.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_embankment_1.mdl" "Ron's 2ft track pack" "128 Embankment 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_embankment_1.mdl" "Ron's 2ft track pack" "128 Embankment 1" 2 "NULL" "-128,0,14.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_embankment_sided_1.mdl" "Ron's 2ft track pack" "128 Embankment Sided 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_embankment_sided_1.mdl" "Ron's 2ft track pack" "128 Embankment Sided 1" 2 "NULL" "-128,0,14.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "128 Embankment Sided M 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "128 Embankment Sided M 1" 2 "NULL" "-128,0,14.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "128 Embankment Sided Double 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_128_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "128 Embankment Sided Double 1" 2 "NULL" "-128,0,14.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_1.mdl" "Ron's 2ft track pack" "256 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_1.mdl" "Ron's 2ft track pack" "256 1" 2 "NULL" "-256,0,22.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_embankment_1.mdl" "Ron's 2ft track pack" "256 Embankment 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_embankment_1.mdl" "Ron's 2ft track pack" "256 Embankment 1" 2 "NULL" "-256,0,22.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_embankment_sided_1.mdl" "Ron's 2ft track pack" "256 Embankment Sided 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_embankment_sided_1.mdl" "Ron's 2ft track pack" "256 Embankment Sided 1" 2 "NULL" "-256,0,22.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "256 Embankment Sided M 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "256 Embankment Sided M 1" 2 "NULL" "-256,0,22.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "256 Embankment Sided Double 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_256_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "256 Embankment Sided Double 1" 2 "NULL" "-256,0,22.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_1.mdl" "Ron's 2ft track pack" "32 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_1.mdl" "Ron's 2ft track pack" "32 1" 2 "NULL" "-32,0,8.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_embankment_1.mdl" "Ron's 2ft track pack" "32 Embankment 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_embankment_1.mdl" "Ron's 2ft track pack" "32 Embankment 1" 2 "NULL" "-32,0,8.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_embankment_sided_1.mdl" "Ron's 2ft track pack" "32 Embankment Sided 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_embankment_sided_1.mdl" "Ron's 2ft track pack" "32 Embankment Sided 1" 2 "NULL" "-32,0,8.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "32 Embankment Sided M 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "32 Embankment Sided M 1" 2 "NULL" "-32,0,8.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "32 Embankment Sided Double 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_32_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "32 Embankment Sided Double 1" 2 "NULL" "-32,0,8.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_1.mdl" "Ron's 2ft track pack" "512 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_1.mdl" "Ron's 2ft track pack" "512 1" 2 "NULL" "-512,0,38.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_embankment_1.mdl" "Ron's 2ft track pack" "512 Embankment 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_embankment_1.mdl" "Ron's 2ft track pack" "512 Embankment 1" 2 "NULL" "-512,0,38.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_embankment_sided_1.mdl" "Ron's 2ft track pack" "512 Embankment Sided 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_embankment_sided_1.mdl" "Ron's 2ft track pack" "512 Embankment Sided 1" 2 "NULL" "-512,0,38.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "512 Embankment Sided M 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "512 Embankment Sided M 1" 2 "NULL" "-512,0,38.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "512 Embankment Sided Double 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_512_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "512 Embankment Sided Double 1" 2 "NULL" "-512,0,38.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_1.mdl" "Ron's 2ft track pack" "64 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_1.mdl" "Ron's 2ft track pack" "64 1" 2 "NULL" "-64,0,10.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_embankment_1.mdl" "Ron's 2ft track pack" "64 Embankment 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_embankment_1.mdl" "Ron's 2ft track pack" "64 Embankment 1" 2 "NULL" "-64,0,10.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_embankment_sided_1.mdl" "Ron's 2ft track pack" "64 Embankment Sided 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_embankment_sided_1.mdl" "Ron's 2ft track pack" "64 Embankment Sided 1" 2 "NULL" "-64,0,10.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "64 Embankment Sided M 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "64 Embankment Sided M 1" 2 "NULL" "-64,0,10.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "64 Embankment Sided Double 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_64_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "64 Embankment Sided Double 1" 2 "NULL" "-64,0,10.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_1.mdl" "Ron's 2ft track pack" "End 1" 1 "NULL" "64,0,3.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_1.mdl" "Ron's 2ft track pack" "End 1" 2 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_embankment_1.mdl" "Ron's 2ft track pack" "End Embankment 1" 1 "NULL" "64,0,3.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_embankment_1.mdl" "Ron's 2ft track pack" "End Embankment 1" 2 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_embankment_sided_1.mdl" "Ron's 2ft track pack" "End Embankment Sided 1" 1 "NULL" "64,0,3.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_embankment_sided_1.mdl" "Ron's 2ft track pack" "End Embankment Sided 1" 2 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "End Embankment Sided M 1" 1 "NULL" "64,0,3.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "End Embankment Sided M 1" 2 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "End Embankment Sided Double 1" 1 "NULL" "64,0,3.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_end_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "End Embankment Sided Double 1" 2 "NULL" "0,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_1.mdl" "Ron's 2ft track pack" "Start 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_1.mdl" "Ron's 2ft track pack" "Start 1" 2 "NULL" "-64,0,9.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_embankment_1.mdl" "Ron's 2ft track pack" "Start Embankment 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_embankment_1.mdl" "Ron's 2ft track pack" "Start Embankment 1" 2 "NULL" "-64,0,9.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_embankment_sided_1.mdl" "Ron's 2ft track pack" "Start Embankment Sided 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_embankment_sided_1.mdl" "Ron's 2ft track pack" "Start Embankment Sided 1" 2 "NULL" "-64,0,9.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "Start Embankment Sided M 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_embankment_sided_m_1.mdl" "Ron's 2ft track pack" "Start Embankment Sided M 1" 2 "NULL" "-64,0,9.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "Start Embankment Sided Double 1" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/ramps/ramp_start_embankment_sidedd_1.mdl" "Ron's 2ft track pack" "Start Embankment Sided Double 1" 2 "NULL" "-64,0,9.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/road_crossings/road_crossing.mdl" "Ron's 2ft track pack" "Road Crossing" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/road_crossings/road_crossing.mdl" "Ron's 2ft track pack" "Road Crossing" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/road_crossings/road_crossing_middle.mdl" "Ron's 2ft track pack" "Road Crossing Middle" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/road_crossings/road_crossing_middle.mdl" "Ron's 2ft track pack" "Road Crossing Middle" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/road_crossings/road_crossing_side.mdl" "Ron's 2ft track pack" "Road Crossing Side" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/road_crossings/road_crossing_side.mdl" "Ron's 2ft track pack" "Road Crossing Side" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_left_switched.mdl" "Ron's 2ft track pack" "Left Switched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_left_switched.mdl" "Ron's 2ft track pack" "Left Switched" 2 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_left_switched.mdl" "Ron's 2ft track pack" "Left Switched" 3 "NULL" "-384,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_left_switched.mdl" "Ron's 2ft track pack" "Left Switched" 4 "NULL" "-704,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl" "Ron's 2ft track pack" "Left Unswitched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl" "Ron's 2ft track pack" "Left Unswitched" 2 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl" "Ron's 2ft track pack" "Left Unswitched" 3 "NULL" "-384,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl" "Ron's 2ft track pack" "Left Unswitched" 4 "NULL" "-704,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_right_switched.mdl" "Ron's 2ft track pack" "Right Switched" 1 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_right_switched.mdl" "Ron's 2ft track pack" "Right Switched" 2 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_right_switched.mdl" "Ron's 2ft track pack" "Right Switched" 3 "NULL" "-384,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_right_switched.mdl" "Ron's 2ft track pack" "Right Switched" 4 "NULL" "-704,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl" "Ron's 2ft track pack" "Right Unswitched" 1 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl" "Ron's 2ft track pack" "Right Unswitched" 2 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl" "Ron's 2ft track pack" "Right Unswitched" 3 "NULL" "-384,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl" "Ron's 2ft track pack" "Right Unswitched" 4 "NULL" "-704,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024.mdl" "Ron's 2ft track pack" "1024" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024.mdl" "Ron's 2ft track pack" "1024" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_2_track.mdl" "Ron's 2ft track pack" "1024 2 Track" 1 "NULL" "512,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_2_track.mdl" "Ron's 2ft track pack" "1024 2 Track" 2 "NULL" "512,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_2_track.mdl" "Ron's 2ft track pack" "1024 2 Track" 3 "NULL" "-512,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_2_track.mdl" "Ron's 2ft track pack" "1024 2 Track" 4 "NULL" "-512,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_roof.mdl" "Ron's 2ft track pack" "1024 Roof" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_roof.mdl" "Ron's 2ft track pack" "1024 Roof" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_roof_2_track.mdl" "Ron's 2ft track pack" "1024 Roof 2 Track" 1 "NULL" "512,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_roof_2_track.mdl" "Ron's 2ft track pack" "1024 Roof 2 Track" 2 "NULL" "512,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_roof_2_track.mdl" "Ron's 2ft track pack" "1024 Roof 2 Track" 3 "NULL" "-512,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_1024_roof_2_track.mdl" "Ron's 2ft track pack" "1024 Roof 2 Track" 4 "NULL" "-512,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128.mdl" "Ron's 2ft track pack" "128" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128.mdl" "Ron's 2ft track pack" "128" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_2_track.mdl" "Ron's 2ft track pack" "128 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_2_track.mdl" "Ron's 2ft track pack" "128 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_2_track.mdl" "Ron's 2ft track pack" "128 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_2_track.mdl" "Ron's 2ft track pack" "128 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench.mdl" "Ron's 2ft track pack" "128 Bench" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench.mdl" "Ron's 2ft track pack" "128 Bench" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_2_track.mdl" "Ron's 2ft track pack" "128 Bench 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_2_track.mdl" "Ron's 2ft track pack" "128 Bench 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_2_track.mdl" "Ron's 2ft track pack" "128 Bench 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_2_track.mdl" "Ron's 2ft track pack" "128 Bench 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_roof.mdl" "Ron's 2ft track pack" "128 Bench Roof" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_roof.mdl" "Ron's 2ft track pack" "128 Bench Roof" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_roof_2_track.mdl" "Ron's 2ft track pack" "128 Bench Roof 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_roof_2_track.mdl" "Ron's 2ft track pack" "128 Bench Roof 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_roof_2_track.mdl" "Ron's 2ft track pack" "128 Bench Roof 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_bench_roof_2_track.mdl" "Ron's 2ft track pack" "128 Bench Roof 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_exit.mdl" "Ron's 2ft track pack" "128 Exit" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_exit.mdl" "Ron's 2ft track pack" "128 Exit" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_exit_roof.mdl" "Ron's 2ft track pack" "128 Roof Exit" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_exit_roof.mdl" "Ron's 2ft track pack" "128 Roof Exit" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_roof.mdl" "Ron's 2ft track pack" "128 Roof" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_roof.mdl" "Ron's 2ft track pack" "128 Roof" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_roof_2_track.mdl" "Ron's 2ft track pack" "128 Roof 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_roof_2_track.mdl" "Ron's 2ft track pack" "128 Roof 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_roof_2_track.mdl" "Ron's 2ft track pack" "128 Roof 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_128_roof_2_track.mdl" "Ron's 2ft track pack" "128 Roof 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256.mdl" "Ron's 2ft track pack" "256" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256.mdl" "Ron's 2ft track pack" "256" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_2_track.mdl" "Ron's 2ft track pack" "256 2 Track" 1 "NULL" "128,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_2_track.mdl" "Ron's 2ft track pack" "256 2 Track" 2 "NULL" "128,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_2_track.mdl" "Ron's 2ft track pack" "256 2 Track" 3 "NULL" "-128,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_2_track.mdl" "Ron's 2ft track pack" "256 2 Track" 4 "NULL" "-128,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_roof.mdl" "Ron's 2ft track pack" "256 Roof" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_roof.mdl" "Ron's 2ft track pack" "256 Roof" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_roof_2_track.mdl" "Ron's 2ft track pack" "256 Roof 2 Track" 1 "NULL" "128,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_roof_2_track.mdl" "Ron's 2ft track pack" "256 Roof 2 Track" 2 "NULL" "128,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_roof_2_track.mdl" "Ron's 2ft track pack" "256 Roof 2 Track" 3 "NULL" "-128,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_256_roof_2_track.mdl" "Ron's 2ft track pack" "256 Roof 2 Track" 4 "NULL" "-128,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512.mdl" "Ron's 2ft track pack" "512" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512.mdl" "Ron's 2ft track pack" "512" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_2_track.mdl" "Ron's 2ft track pack" "512 2 Track" 1 "NULL" "256,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_2_track.mdl" "Ron's 2ft track pack" "512 2 Track" 2 "NULL" "256,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_2_track.mdl" "Ron's 2ft track pack" "512 2 Track" 3 "NULL" "-256,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_2_track.mdl" "Ron's 2ft track pack" "512 2 Track" 4 "NULL" "-256,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_roof.mdl" "Ron's 2ft track pack" "512 Roof" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_roof.mdl" "Ron's 2ft track pack" "512 Roof" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_roof_2_track.mdl" "Ron's 2ft track pack" "512 Roof 2 Track" 1 "NULL" "256,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_roof_2_track.mdl" "Ron's 2ft track pack" "512 Roof 2 Track" 2 "NULL" "256,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_roof_2_track.mdl" "Ron's 2ft track pack" "512 Roof 2 Track" 3 "NULL" "-256,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_512_roof_2_track.mdl" "Ron's 2ft track pack" "512 Roof 2 Track" 4 "NULL" "-256,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end.mdl" "Ron's 2ft track pack" "End" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end.mdl" "Ron's 2ft track pack" "End" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_2_track.mdl" "Ron's 2ft track pack" "End 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_2_track.mdl" "Ron's 2ft track pack" "End 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_2_track.mdl" "Ron's 2ft track pack" "End 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_2_track.mdl" "Ron's 2ft track pack" "End 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp.mdl" "Ron's 2ft track pack" "End Ramp" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp.mdl" "Ron's 2ft track pack" "End Ramp" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_2_track.mdl" "Ron's 2ft track pack" "End Ramp 2 Track" 1 "NULL" "128,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_2_track.mdl" "Ron's 2ft track pack" "End Ramp 2 Track" 2 "NULL" "128,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_2_track.mdl" "Ron's 2ft track pack" "End Ramp 2 Track" 3 "NULL" "-128,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_2_track.mdl" "Ron's 2ft track pack" "End Ramp 2 Track" 4 "NULL" "-128,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_roof.mdl" "Ron's 2ft track pack" "End Ramp Roof" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_roof.mdl" "Ron's 2ft track pack" "End Ramp Roof" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl" "Ron's 2ft track pack" "End Ramp Roof 2 Track" 1 "NULL" "128,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl" "Ron's 2ft track pack" "End Ramp Roof 2 Track" 2 "NULL" "128,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl" "Ron's 2ft track pack" "End Ramp Roof 2 Track" 3 "NULL" "-128,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl" "Ron's 2ft track pack" "End Ramp Roof 2 Track" 4 "NULL" "-128,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_roof.mdl" "Ron's 2ft track pack" "End Roof" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_roof.mdl" "Ron's 2ft track pack" "End Roof" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_roof_2_track.mdl" "Ron's 2ft track pack" "End Roof 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_roof_2_track.mdl" "Ron's 2ft track pack" "End Roof 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_roof_2_track.mdl" "Ron's 2ft track pack" "End Roof 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_roof_2_track.mdl" "Ron's 2ft track pack" "End Roof 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs.mdl" "Ron's 2ft track pack" "End Stairs" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs.mdl" "Ron's 2ft track pack" "End Stairs" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_2_track.mdl" "Ron's 2ft track pack" "End Stairs 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_2_track.mdl" "Ron's 2ft track pack" "End Stairs 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_2_track.mdl" "Ron's 2ft track pack" "End Stairs 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_2_track.mdl" "Ron's 2ft track pack" "End Stairs 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_roof.mdl" "Ron's 2ft track pack" "End Stairs Roof" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_roof.mdl" "Ron's 2ft track pack" "End Stairs Roof" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_roof_2_track.mdl" "Ron's 2ft track pack" "End Roof Stairs 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_roof_2_track.mdl" "Ron's 2ft track pack" "End Roof Stairs 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_roof_2_track.mdl" "Ron's 2ft track pack" "End Roof Stairs 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_end_stairs_roof_2_track.mdl" "Ron's 2ft track pack" "End Roof Stairs 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start.mdl" "Ron's 2ft track pack" "Start" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start.mdl" "Ron's 2ft track pack" "Start" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_2_track.mdl" "Ron's 2ft track pack" "Start 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_2_track.mdl" "Ron's 2ft track pack" "Start 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_2_track.mdl" "Ron's 2ft track pack" "Start 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_2_track.mdl" "Ron's 2ft track pack" "Start 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp.mdl" "Ron's 2ft track pack" "Start Ramp" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp.mdl" "Ron's 2ft track pack" "Start Ramp" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_2_track.mdl" "Ron's 2ft track pack" "Start Ramp 2 Track" 1 "NULL" "128,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_2_track.mdl" "Ron's 2ft track pack" "Start Ramp 2 Track" 2 "NULL" "128,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_2_track.mdl" "Ron's 2ft track pack" "Start Ramp 2 Track" 3 "NULL" "-128,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_2_track.mdl" "Ron's 2ft track pack" "Start Ramp 2 Track" 4 "NULL" "-128,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_roof.mdl" "Ron's 2ft track pack" "Start Ramp Roof" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_roof.mdl" "Ron's 2ft track pack" "Start Ramp Roof" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl" "Ron's 2ft track pack" "Start Ramp Roof 2 Track" 1 "NULL" "128,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl" "Ron's 2ft track pack" "Start Ramp Roof 2 Track" 2 "NULL" "128,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl" "Ron's 2ft track pack" "Start Ramp Roof 2 Track" 3 "NULL" "-128,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl" "Ron's 2ft track pack" "Start Ramp Roof 2 Track" 4 "NULL" "-128,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_roof.mdl" "Ron's 2ft track pack" "Start Roof" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_roof.mdl" "Ron's 2ft track pack" "Start Roof" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_roof_2_track.mdl" "Ron's 2ft track pack" "Start Roof 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_roof_2_track.mdl" "Ron's 2ft track pack" "Start Roof 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_roof_2_track.mdl" "Ron's 2ft track pack" "Start Roof 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_roof_2_track.mdl" "Ron's 2ft track pack" "Start Roof 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs.mdl" "Ron's 2ft track pack" "Start Stairs" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs.mdl" "Ron's 2ft track pack" "Start Stairs" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_2_track.mdl" "Ron's 2ft track pack" "Start Stairs 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_2_track.mdl" "Ron's 2ft track pack" "Start Stairs 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_2_track.mdl" "Ron's 2ft track pack" "Start Stairs 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_2_track.mdl" "Ron's 2ft track pack" "Start Stairs 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_roof.mdl" "Ron's 2ft track pack" "Start Stairs Roof" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_roof.mdl" "Ron's 2ft track pack" "Start Stairs Roof" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_roof_2_track.mdl" "Ron's 2ft track pack" "Start Roof Stairs 2 Track" 1 "NULL" "64,124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_roof_2_track.mdl" "Ron's 2ft track pack" "Start Roof Stairs 2 Track" 2 "NULL" "64,-124,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_roof_2_track.mdl" "Ron's 2ft track pack" "Start Roof Stairs 2 Track" 3 "NULL" "-64,124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/station/platform_start_stairs_roof_2_track.mdl" "Ron's 2ft track pack" "Start Roof Stairs 2 Track" 4 "NULL" "-64,-124,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_1024.mdl" "Ron's 2ft track pack" "Straight 1024" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_1024.mdl" "Ron's 2ft track pack" "Straight 1024" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_128.mdl" "Ron's 2ft track pack" "Straight 128" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_128.mdl" "Ron's 2ft track pack" "Straight 128" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_256.mdl" "Ron's 2ft track pack" "Straight 256" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_256.mdl" "Ron's 2ft track pack" "Straight 256" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_32.mdl" "Ron's 2ft track pack" "Straight 32" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_32.mdl" "Ron's 2ft track pack" "Straight 32" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_320_junction.mdl" "Ron's 2ft track pack" "Straight 320 Junction" 1 "NULL" "160,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_320_junction.mdl" "Ron's 2ft track pack" "Straight 320 Junction" 2 "NULL" "-160,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_32_2tracks.mdl" "Ron's 2ft track pack" "Straight 32 2 Tracks" 1 "NULL" "16,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_32_2tracks.mdl" "Ron's 2ft track pack" "Straight 32 2 Tracks" 2 "NULL" "16,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_32_2tracks.mdl" "Ron's 2ft track pack" "Straight 32 2 Tracks" 3 "NULL" "-16,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_32_2tracks.mdl" "Ron's 2ft track pack" "Straight 32 2 Tracks" 4 "NULL" "-16,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_512.mdl" "Ron's 2ft track pack" "Straight 512" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_512.mdl" "Ron's 2ft track pack" "Straight 512" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_64.mdl" "Ron's 2ft track pack" "Straight 64" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/straight/straight_64.mdl" "Ron's 2ft track pack" "Straight 64" 2 "NULL" "-32,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_1024_grass.mdl" "Ron's 2ft track pack" "1024 Grass" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_1024_grass.mdl" "Ron's 2ft track pack" "1024 Grass" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_1024_street.mdl" "Ron's 2ft track pack" "1024 Street" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_1024_street.mdl" "Ron's 2ft track pack" "1024 Street" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_128_grass.mdl" "Ron's 2ft track pack" "128 Grass" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_128_grass.mdl" "Ron's 2ft track pack" "128 Grass" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_128_street.mdl" "Ron's 2ft track pack" "128 Street" 1 "NULL" "64,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_128_street.mdl" "Ron's 2ft track pack" "128 Street" 2 "NULL" "-64,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_256_grass.mdl" "Ron's 2ft track pack" "256 Grass" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_256_grass.mdl" "Ron's 2ft track pack" "256 Grass" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_256_street.mdl" "Ron's 2ft track pack" "256 Street" 1 "NULL" "128,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_256_street.mdl" "Ron's 2ft track pack" "256 Street" 2 "NULL" "-128,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_32_grass.mdl" "Ron's 2ft track pack" "32 Grass" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_32_grass.mdl" "Ron's 2ft track pack" "32 Grass" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_32_street.mdl" "Ron's 2ft track pack" "32 Street" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_32_street.mdl" "Ron's 2ft track pack" "32 Street" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_512_grass.mdl" "Ron's 2ft track pack" "512 Grass" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_512_grass.mdl" "Ron's 2ft track pack" "512 Grass" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_512_street.mdl" "Ron's 2ft track pack" "512 Street" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_512_street.mdl" "Ron's 2ft track pack" "512 Street" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_64_grass.mdl" "Ron's 2ft track pack" "64 Grass" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_64_grass.mdl" "Ron's 2ft track pack" "64 Grass" 2 "NULL" "-32,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_64_street.mdl" "Ron's 2ft track pack" "64 Street" 1 "NULL" "32,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_64_street.mdl" "Ron's 2ft track pack" "64 Street" 2 "NULL" "-32,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_buffer_grass.mdl" "Ron's 2ft track pack" "Buffer Grass" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_buffer_street.mdl" "Ron's 2ft track pack" "Buffer Street" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_curve_90_1_grass.mdl" "Ron's 2ft track pack" "90 1 Grass" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_curve_90_1_grass.mdl" "Ron's 2ft track pack" "90 1 Grass" 2 "NULL" "-1024,-1024,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_curve_90_1_street.mdl" "Ron's 2ft track pack" "90 1 Street" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_curve_90_1_street.mdl" "Ron's 2ft track pack" "90 1 Street" 2 "NULL" "-1024,-1024,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_curve_90_2_grass.mdl" "Ron's 2ft track pack" "90 2 Grass" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_curve_90_2_grass.mdl" "Ron's 2ft track pack" "90 2 Grass" 2 "NULL" "-1148,-1148,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_curve_90_2_street.mdl" "Ron's 2ft track pack" "90 2 Street" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_curve_90_2_street.mdl" "Ron's 2ft track pack" "90 2 Street" 2 "NULL" "-1148,-1148,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_grass_normal.mdl" "Ron's 2ft track pack" "Transition Grass Normal" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_grass_normal.mdl" "Ron's 2ft track pack" "Transition Grass Normal" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_grass_street.mdl" "Ron's 2ft track pack" "Transition Grass Street" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_grass_street.mdl" "Ron's 2ft track pack" "Transition Grass Street" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_left_switched.mdl" "Ron's 2ft track pack" "N Left Switched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_left_switched.mdl" "Ron's 2ft track pack" "N Left Switched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_left_switched.mdl" "Ron's 2ft track pack" "N Left Switched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl" "Ron's 2ft track pack" "N Left Unswitched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl" "Ron's 2ft track pack" "N Left Unswitched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl" "Ron's 2ft track pack" "N Left Unswitched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_right_switched.mdl" "Ron's 2ft track pack" "N Right Switched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_right_switched.mdl" "Ron's 2ft track pack" "N Right Switched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_right_switched.mdl" "Ron's 2ft track pack" "N Right Switched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl" "Ron's 2ft track pack" "N Right Unswitched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl" "Ron's 2ft track pack" "N Right Unswitched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl" "Ron's 2ft track pack" "N Right Unswitched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_normal_street.mdl" "Ron's 2ft track pack" "Transition Normal Street" 1 "NULL" "16,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_normal_street.mdl" "Ron's 2ft track pack" "Transition Normal Street" 2 "NULL" "-16,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_left_switched.mdl" "Ron's 2ft track pack" "S Left Switched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_left_switched.mdl" "Ron's 2ft track pack" "S Left Switched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_left_switched.mdl" "Ron's 2ft track pack" "S Left Switched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_left_switched.mdl" "Ron's 2ft track pack" "S Left Switched" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl" "Ron's 2ft track pack" "S Left Unswitched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl" "Ron's 2ft track pack" "S Left Unswitched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl" "Ron's 2ft track pack" "S Left Unswitched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl" "Ron's 2ft track pack" "S Left Unswitched" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_right_switched.mdl" "Ron's 2ft track pack" "S Right Switched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_right_switched.mdl" "Ron's 2ft track pack" "S Right Switched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_right_switched.mdl" "Ron's 2ft track pack" "S Right Switched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_right_switched.mdl" "Ron's 2ft track pack" "S Right Switched" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl" "Ron's 2ft track pack" "S Right Unswitched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl" "Ron's 2ft track pack" "S Right Unswitched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl" "Ron's 2ft track pack" "S Right Unswitched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl" "Ron's 2ft track pack" "S Right Unswitched" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_station_grass.mdl" "Ron's 2ft track pack" "Station Grass" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_station_grass.mdl" "Ron's 2ft track pack" "Station Grass" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_station_grass_m.mdl" "Ron's 2ft track pack" "Station M Grass" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_station_grass_m.mdl" "Ron's 2ft track pack" "Station M Grass" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_x_junction_switched.mdl" "Ron's 2ft track pack" "X Switched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_x_junction_switched.mdl" "Ron's 2ft track pack" "X Switched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_x_junction_switched.mdl" "Ron's 2ft track pack" "X Switched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_x_junction_switched.mdl" "Ron's 2ft track pack" "X Switched" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_x_junction_unswitched.mdl" "Ron's 2ft track pack" "X Unswitched" 1 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_x_junction_unswitched.mdl" "Ron's 2ft track pack" "X Unswitched" 2 "NULL" "-704, 62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_x_junction_unswitched.mdl" "Ron's 2ft track pack" "X Unswitched" 3 "NULL" "-704,-62,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/tram/tram_x_junction_unswitched.mdl" "Ron's 2ft track pack" "X Unswitched" 4 "NULL" "0 ,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow.mdl" "Ron's 2ft track pack" "Narrow" 1 "NULL" "0,32,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow.mdl" "Ron's 2ft track pack" "Narrow" 2 "NULL" "0,-32,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow_base_90.mdl" "Ron's 2ft track pack" "Narrow Base" 1 "NULL" "96,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow_base_90.mdl" "Ron's 2ft track pack" "Narrow Base" 2 "NULL" "0,96,6.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow_base_90.mdl" "Ron's 2ft track pack" "Narrow Base" 3 "NULL" "-96,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow_base_90.mdl" "Ron's 2ft track pack" "Narrow Base" 4 "NULL" "0,-192,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow_base_90.mdl" "Ron's 2ft track pack" "Narrow Base" 5 "NULL" "0,-96,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow_base_90.mdl" "Ron's 2ft track pack" "Narrow Base" 6 "NULL" "32,0,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow_base_90.mdl" "Ron's 2ft track pack" "Narrow Base" 7 "NULL" "0,32,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_narrow_base_90.mdl" "Ron's 2ft track pack" "Narrow Base" 8 "NULL" "0,-32,6.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small.mdl" "Ron's 2ft track pack" "Small" 1 "NULL" "64,0,10.516" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small.mdl" "Ron's 2ft track pack" "Small" 2 "NULL" "-64,0,10.516" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small_base_90.mdl" "Ron's 2ft track pack" "Small Base" 1 "NULL" "192,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small_base_90.mdl" "Ron's 2ft track pack" "Small Base" 2 "NULL" "0,192,6.016" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small_base_90.mdl" "Ron's 2ft track pack" "Small Base" 3 "NULL" "-192,0,6.016" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small_base_90.mdl" "Ron's 2ft track pack" "Small Base" 4 "NULL" "0,-192,6.016" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small_base_90.mdl" "Ron's 2ft track pack" "Small Base" 5 "NULL" "64,0,10.516" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small_base_90.mdl" "Ron's 2ft track pack" "Small Base" 6 "NULL" "0,64,10.516" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small_base_90.mdl" "Ron's 2ft track pack" "Small Base" 7 "NULL" "-64,0,10.516" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/turntable/turntable_small_base_90.mdl" "Ron's 2ft track pack" "Small Base" 8 "NULL" "0,-64,10.516" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/viaduct/viaduct_1024.mdl" "Ron's 2ft track pack" "1024" 1 "NULL" "512,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/viaduct/viaduct_1024.mdl" "Ron's 2ft track pack" "1024" 2 "NULL" "-512,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/viaduct/viaduct_512.mdl" "Ron's 2ft track pack" "512" 1 "NULL" "256,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/viaduct/viaduct_512.mdl" "Ron's 2ft track pack" "512" 2 "NULL" "-256,0,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/xjunctions/x_junction_switched.mdl" "Ron's 2ft track pack" "X Switched" 1 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/xjunctions/x_junction_switched.mdl" "Ron's 2ft track pack" "X Switched" 2 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/xjunctions/x_junction_switched.mdl" "Ron's 2ft track pack" "X Switched" 3 "NULL" "-704,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/xjunctions/x_junction_switched.mdl" "Ron's 2ft track pack" "X Switched" 4 "NULL" "-704,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/xjunctions/x_junction_unswitched.mdl" "Ron's 2ft track pack" "X Unswitched" 1 "NULL" "0,-62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/xjunctions/x_junction_unswitched.mdl" "Ron's 2ft track pack" "X Unswitched" 2 "NULL" "0,62,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/xjunctions/x_junction_unswitched.mdl" "Ron's 2ft track pack" "X Unswitched" 3 "NULL" "-704,-62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/xjunctions/x_junction_unswitched.mdl" "Ron's 2ft track pack" "X Unswitched" 4 "NULL" "-704,62,6.016" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/yjunction/y_junction_switched_1.mdl" "Ron's 2ft track pack" "Y Switched" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/yjunction/y_junction_switched_1.mdl" "Ron's 2ft track pack" "Y Switched" 2 "NULL" "-391.763031, 78.046341,6.016" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/yjunction/y_junction_switched_1.mdl" "Ron's 2ft track pack" "Y Switched" 3 "NULL" "-391.763031, -78.046341,6.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/yjunction/y_junction_unswitched_1.mdl" "Ron's 2ft track pack" "Y Unswitched" 1 "NULL" "0,0,6.016" "0,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/yjunction/y_junction_unswitched_1.mdl" "Ron's 2ft track pack" "Y Unswitched" 2 "NULL" "-391.763031, -78.046341,6.016" "0,-157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/2ft/yjunction/y_junction_unswitched_1.mdl" "Ron's 2ft track pack" "Y Unswitched" 3 "NULL" "-391.763031, 78.046341,6.016" "0,157.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/90_1.mdl" "Ron's G Scale Track pack" "Curve 1" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/90_1.mdl" "Ron's G Scale Track pack" "Curve 1" 2 "NULL" "-256,256,3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/90_2.mdl" "Ron's G Scale Track pack" "Curve 2" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/90_2.mdl" "Ron's G Scale Track pack" "Curve 2" 2 "NULL" "-320,320,3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/90_3.mdl" "Ron's G Scale Track pack" "Curve 3" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/90_3.mdl" "Ron's G Scale Track pack" "Curve 3" 2 "NULL" "-384,384,3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/90_4.mdl" "Ron's G Scale Track pack" "Curve 4" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/90_4.mdl" "Ron's G Scale Track pack" "Curve 4" 2 "NULL" "-448,448,3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/s_left.mdl" "Ron's G Scale Track pack" "Curve S Left" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/s_left.mdl" "Ron's G Scale Track pack" "Curve S Left" 2 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/s_right.mdl" "Ron's G Scale Track pack" "Curve S Right" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/curves/s_right.mdl" "Ron's G Scale Track pack" "Curve S Right" 2 "NULL" "64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/1024.mdl" "Ron's G Scale Track pack" "1024" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/1024.mdl" "Ron's G Scale Track pack" "1024" 2 "NULL" "0,1024,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/128.mdl" "Ron's G Scale Track pack" "128" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/128.mdl" "Ron's G Scale Track pack" "128" 2 "NULL" "0,128,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/16.mdl" "Ron's G Scale Track pack" "16" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/16.mdl" "Ron's G Scale Track pack" "16" 2 "NULL" "0,16,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/256.mdl" "Ron's G Scale Track pack" "256" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/256.mdl" "Ron's G Scale Track pack" "256" 2 "NULL" "0,256,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/32.mdl" "Ron's G Scale Track pack" "32" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/32.mdl" "Ron's G Scale Track pack" "32" 2 "NULL" "0,32,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/512.mdl" "Ron's G Scale Track pack" "512" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/512.mdl" "Ron's G Scale Track pack" "512" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/64.mdl" "Ron's G Scale Track pack" "64" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/64.mdl" "Ron's G Scale Track pack" "64" 2 "NULL" "0,64,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/buffer.mdl" "Ron's G Scale Track pack" "Buffer" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/90_1.mdl" "Ron's G Scale Track pack" "90 1" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/90_1.mdl" "Ron's G Scale Track pack" "90 1" 2 "NULL" "-256,256,3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/90_2.mdl" "Ron's G Scale Track pack" "90 2" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/90_2.mdl" "Ron's G Scale Track pack" "90 2" 2 "NULL" "-320,320,3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/90_3.mdl" "Ron's G Scale Track pack" "90 3" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/90_3.mdl" "Ron's G Scale Track pack" "90 3" 2 "NULL" "-384,384,3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/90_4.mdl" "Ron's G Scale Track pack" "90 4" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/90_4.mdl" "Ron's G Scale Track pack" "90 4" 2 "NULL" "-448,448,3" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/s_left.mdl" "Ron's G Scale Track pack" "S Left" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/s_left.mdl" "Ron's G Scale Track pack" "S Left" 2 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/s_right.mdl" "Ron's G Scale Track pack" "S Right" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/curves/s_right.mdl" "Ron's G Scale Track pack" "S Right" 2 "NULL" "64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/end.mdl" "Ron's G Scale Track pack" "End" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/end.mdl" "Ron's G Scale Track pack" "End" 2 "NULL" "0,16,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/double_junction.mdl" "Ron's G Scale Track pack" "S Embankment" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/double_junction.mdl" "Ron's G Scale Track pack" "S Embankment" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/double_junction.mdl" "Ron's G Scale Track pack" "S Embankment" 3 "NULL" "-64,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/double_junction.mdl" "Ron's G Scale Track pack" "S Embankment" 4 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/n_junction_left.mdl" "Ron's G Scale Track pack" "N Left Embankment" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/n_junction_left.mdl" "Ron's G Scale Track pack" "N Left Embankment" 2 "NULL" ",512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/n_junction_left.mdl" "Ron's G Scale Track pack" "N Left Embankment" 3 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/n_junction_right.mdl" "Ron's G Scale Track pack" "N Right Embankment" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/n_junction_right.mdl" "Ron's G Scale Track pack" "N Right Embankment" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/embankments/junction/n_junction_right.mdl" "Ron's G Scale Track pack" "N Right Embankment" 3 "NULL" "64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/n_left_switched.mdl" "Ron's G Scale Track pack" "N Left Switched" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/n_left_switched.mdl" "Ron's G Scale Track pack" "N Left Switched" 2 "NULL" ",512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/n_left_switched.mdl" "Ron's G Scale Track pack" "N Left Switched" 3 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/n_left_unswitched.mdl" "Ron's G Scale Track pack" "N Left Unswitched" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/n_left_unswitched.mdl" "Ron's G Scale Track pack" "N Left Unswitched" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/n_left_unswitched.mdl" "Ron's G Scale Track pack" "N Left Unswitched" 3 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/s_left_switched.mdl" "Ron's G Scale Track pack" "S Left Switched" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/s_left_switched.mdl" "Ron's G Scale Track pack" "S Left Switched" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/s_left_switched.mdl" "Ron's G Scale Track pack" "S Left Switched" 3 "NULL" "-64,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/s_left_switched.mdl" "Ron's G Scale Track pack" "S Left Switched" 4 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/s_left_unswitched.mdl" "Ron's G Scale Track pack" "S Left Unswitched" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/s_left_unswitched.mdl" "Ron's G Scale Track pack" "S Left Unswitched" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/s_left_unswitched.mdl" "Ron's G Scale Track pack" "S Left Unswitched" 3 "NULL" "-64,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/left/s_left_unswitched.mdl" "Ron's G Scale Track pack" "S Left Unswitched" 4 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/n_right_switched.mdl" "Ron's G Scale Track pack" "N Right Switched" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/n_right_switched.mdl" "Ron's G Scale Track pack" "N Right Switched" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/n_right_switched.mdl" "Ron's G Scale Track pack" "N Right Switched" 3 "NULL" "64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/n_right_unswitched.mdl" "Ron's G Scale Track pack" "N Right Unswitched" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/n_right_unswitched.mdl" "Ron's G Scale Track pack" "N Right Unswitched" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/n_right_unswitched.mdl" "Ron's G Scale Track pack" "N Right Unswitched" 3 "NULL" "64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/s_right_switched.mdl" "Ron's G Scale Track pack" "S Right Switched" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/s_right_switched.mdl" "Ron's G Scale Track pack" "S Right Switched" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/s_right_switched.mdl" "Ron's G Scale Track pack" "S Right Switched" 3 "NULL" "-64,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/s_right_switched.mdl" "Ron's G Scale Track pack" "S Right Switched" 4 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/s_right_unswitched.mdl" "Ron's G Scale Track pack" "S Right Unswitched" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/s_right_unswitched.mdl" "Ron's G Scale Track pack" "S Right Unswitched" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/s_right_unswitched.mdl" "Ron's G Scale Track pack" "S Right Unswitched" 3 "NULL" "-64,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/junctions/right/s_right_unswitched.mdl" "Ron's G Scale Track pack" "S Right Unswitched" 4 "NULL" "-64,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/buffer_1.mdl" "Ron's G Scale Track pack" "Buffer 1" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/buffer_2.mdl" "Ron's G Scale Track pack" "Buffer 2" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/truss_128.mdl" "Ron's G Scale Track pack" "Truss 128" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/truss_128.mdl" "Ron's G Scale Track pack" "Truss 128" 2 "NULL" "0,128,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/truss_embankment_transition.mdl" "Ron's G Scale Track pack" "Truss Embankment Transition" 1 "NULL" "0,32,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/truss_embankment_transition.mdl" "Ron's G Scale Track pack" "Truss Embankment Transition" 2 "NULL" "0,-32,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/truss_end.mdl" "Ron's G Scale Track pack" "Truss End" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/truss_track_transition.mdl" "Ron's G Scale Track pack" "Truss Track Transition" 1 "NULL" "0,32,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/misc/truss_track_transition.mdl" "Ron's G Scale Track pack" "Truss Track Transition" 2 "NULL" "0,-32,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/1024.mdl" "Ron's G Scale Track pack" "1024" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/1024.mdl" "Ron's G Scale Track pack" "1024" 2 "NULL" "0,1024,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/128.mdl" "Ron's G Scale Track pack" "128" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/128.mdl" "Ron's G Scale Track pack" "128" 2 "NULL" "0,128,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/16.mdl" "Ron's G Scale Track pack" "16" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/16.mdl" "Ron's G Scale Track pack" "16" 2 "NULL" "0,16,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/16_double.mdl" "Ron's G Scale Track pack" "16 Double" 1 "NULL" "32,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/16_double.mdl" "Ron's G Scale Track pack" "16 Double" 2 "NULL" "-32,0,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/16_double.mdl" "Ron's G Scale Track pack" "16 Double" 3 "NULL" "32,16,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/16_double.mdl" "Ron's G Scale Track pack" "16 Double" 4 "NULL" "-32,16,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/256.mdl" "Ron's G Scale Track pack" "256" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/256.mdl" "Ron's G Scale Track pack" "256" 2 "NULL" "0,256,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/32.mdl" "Ron's G Scale Track pack" "32" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/32.mdl" "Ron's G Scale Track pack" "32" 2 "NULL" "0,32,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/512.mdl" "Ron's G Scale Track pack" "512" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/512.mdl" "Ron's G Scale Track pack" "512" 2 "NULL" "0,512,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/64.mdl" "Ron's G Scale Track pack" "64" 1 "NULL" "0,0,3" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/gscale/straight/64.mdl" "Ron's G Scale Track pack" "64" 2 "NULL" "0,64,3" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_1.mdl" "Ron's Minitrain Props" "Elevation 225 1" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_1.mdl" "Ron's Minitrain Props" "Elevation 225 1" 2 "NULL" "10.542684747187,53.001655382565,33" "0,67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_2.mdl" "Ron's Minitrain Props" "Elevation 225 2" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_2.mdl" "Ron's Minitrain Props" "Elevation 225 2" 2 "NULL" "12.826298771848,64.482158353518,33" "0,67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_3.mdl" "Ron's Minitrain Props" "Elevation 225 3" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_3.mdl" "Ron's Minitrain Props" "Elevation 225 3" 2 "NULL" "15.109912796510,75.962661324470,33" "0,67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_4.mdl" "Ron's Minitrain Props" "Elevation 225 4" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_4.mdl" "Ron's Minitrain Props" "Elevation 225 4" 2 "NULL" "17.393526821171,87.443164295423,33" "0,67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_5.mdl" "Ron's Minitrain Props" "Elevation 225 5" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_5.mdl" "Ron's Minitrain Props" "Elevation 225 5" 2 "NULL" "19.677140845832,98.923667266376,33" "0,67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_6.mdl" "Ron's Minitrain Props" "Elevation 225 6" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_225_6.mdl" "Ron's Minitrain Props" "Elevation 225 6" 2 "NULL" "21.960754870494,110.40417023733,33" "0,67.5,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_1.mdl" "Ron's Minitrain Props" "Elevation 45 1" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_1.mdl" "Ron's Minitrain Props" "Elevation 45 1" 2 "NULL" "40.565710805663,97.934289194337,33" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_2.mdl" "Ron's Minitrain Props" "Elevation 45 2" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_2.mdl" "Ron's Minitrain Props" "Elevation 45 2" 2 "NULL" "49.352507370067,119.14749262993,33" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_3.mdl" "Ron's Minitrain Props" "Elevation 45 3" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_3.mdl" "Ron's Minitrain Props" "Elevation 45 3" 2 "NULL" "58.13930393447,140.360696065530,33" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_4.mdl" "Ron's Minitrain Props" "Elevation 45 4" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_4.mdl" "Ron's Minitrain Props" "Elevation 45 4" 2 "NULL" "66.926100498874,161.57389950113,33" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_5.mdl" "Ron's Minitrain Props" "Elevation 45 5" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_5.mdl" "Ron's Minitrain Props" "Elevation 45 5" 2 "NULL" "75.712897063277,182.78710293672,33" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_6.mdl" "Ron's Minitrain Props" "Elevation 45 6" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_45_6.mdl" "Ron's Minitrain Props" "Elevation 45 6" 2 "NULL" "84.499693627681,204.00030637232,33" "0,45,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_1.mdl" "Ron's Minitrain Props" "Elevation 90 1" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_1.mdl" "Ron's Minitrain Props" "Elevation 90 1" 2 "NULL" "138.5,138.5,33" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_2.mdl" "Ron's Minitrain Props" "Elevation 90 2" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_2.mdl" "Ron's Minitrain Props" "Elevation 90 2" 2 "NULL" "168.5,168.5,33" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_3.mdl" "Ron's Minitrain Props" "Elevation 90 3" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_3.mdl" "Ron's Minitrain Props" "Elevation 90 3" 2 "NULL" "198.5,198.5,33" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_4.mdl" "Ron's Minitrain Props" "Elevation 90 4" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_4.mdl" "Ron's Minitrain Props" "Elevation 90 4" 2 "NULL" "228.5,228.5,33" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_5.mdl" "Ron's Minitrain Props" "Elevation 90 5" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_5.mdl" "Ron's Minitrain Props" "Elevation 90 5" 2 "NULL" "258.5,258.5,33" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_6.mdl" "Ron's Minitrain Props" "Elevation 90 6" 1 "NULL" "0,0,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/curves/elevation_90_6.mdl" "Ron's Minitrain Props" "Elevation 90 6" 2 "NULL" "288.5,288.5,33" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/ramps/elevation_ramp_128.mdl" "Ron's Minitrain Props" "Elevation Ramp 128" 1 "NULL" "0, 0, 1" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/ramps/elevation_ramp_128.mdl" "Ron's Minitrain Props" "Elevation Ramp 128" 2 "NULL" "0,144,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/ramps/elevation_ramp_256.mdl" "Ron's Minitrain Props" "Elevation Ramp 256" 1 "NULL" "0, 0, 1" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/ramps/elevation_ramp_256.mdl" "Ron's Minitrain Props" "Elevation Ramp 256" 2 "NULL" "0,272,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/ramps/elevation_ramp_512.mdl" "Ron's Minitrain Props" "Elevation Ramp 512" 1 "NULL" "0, 0, 1" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/ramps/elevation_ramp_512.mdl" "Ron's Minitrain Props" "Elevation Ramp 512" 2 "NULL" "0,528,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/bridge.mdl" "Ron's Minitrain Props" "Bridge" 1 "NULL" "0, 64,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/bridge.mdl" "Ron's Minitrain Props" "Bridge" 2 "NULL" "0,-64,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_1.mdl" "Ron's Minitrain Props" "Elevation 1" 1 "NULL" "0, 0.5,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_1.mdl" "Ron's Minitrain Props" "Elevation 1" 2 "NULL" "0,-0.5,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_1024.mdl" "Ron's Minitrain Props" "Elevation 1024" 1 "NULL" "0, 512,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_1024.mdl" "Ron's Minitrain Props" "Elevation 1024" 2 "NULL" "0,-512,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_128.mdl" "Ron's Minitrain Props" "Elevation 128" 1 "NULL" "0, 64,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_128.mdl" "Ron's Minitrain Props" "Elevation 128" 2 "NULL" "0,-64,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_16.mdl" "Ron's Minitrain Props" "Elevation 16" 1 "NULL" "0, 8,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_16.mdl" "Ron's Minitrain Props" "Elevation 16" 2 "NULL" "0,-8,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_2.mdl" "Ron's Minitrain Props" "Elevation 2" 1 "NULL" "0, 1,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_2.mdl" "Ron's Minitrain Props" "Elevation 2" 2 "NULL" "0,-1,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_256.mdl" "Ron's Minitrain Props" "Elevation 256" 1 "NULL" "0, 128,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_256.mdl" "Ron's Minitrain Props" "Elevation 256" 2 "NULL" "0,-128,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_32.mdl" "Ron's Minitrain Props" "Elevation 32" 1 "NULL" "0, 16,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_32.mdl" "Ron's Minitrain Props" "Elevation 32" 2 "NULL" "0,-16,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_4.mdl" "Ron's Minitrain Props" "Elevation 4" 1 "NULL" "0, 2,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_4.mdl" "Ron's Minitrain Props" "Elevation 4" 2 "NULL" "0,-2,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_512.mdl" "Ron's Minitrain Props" "Elevation 512" 1 "NULL" "0, 256,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_512.mdl" "Ron's Minitrain Props" "Elevation 512" 2 "NULL" "0,-256,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_64.mdl" "Ron's Minitrain Props" "Elevation 64" 1 "NULL" "0, 32,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_64.mdl" "Ron's Minitrain Props" "Elevation 64" 2 "NULL" "0,-32,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_8.mdl" "Ron's Minitrain Props" "Elevation 8" 1 "NULL" "0, 4,33" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/elevations/straight/elevation_8.mdl" "Ron's Minitrain Props" "Elevation 8" 2 "NULL" "0,-4,33" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/scenery/tunnel_64.mdl" "Ron's Minitrain Props" "Tunnel 64" 1 "NULL" " 0, 8.507, 1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/scenery/tunnel_64.mdl" "Ron's Minitrain Props" "Tunnel 64" 2 "NULL" "-64, 8.507, 1" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/straight/1.mdl" "Ron's Minitrain Props" "1" 1 "NULL" " 0, 8.507, 1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/straight/1.mdl" "Ron's Minitrain Props" "1" 2 "NULL" "-1, 8.507, 1" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/straight/2.mdl" "Ron's Minitrain Props" "2" 1 "NULL" " 0, 8.507, 1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/straight/2.mdl" "Ron's Minitrain Props" "2" 2 "NULL" "-2, 8.507, 1" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/straight/4.mdl" "Ron's Minitrain Props" "4" 1 "NULL" " 0, 8.507, 1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/straight/4.mdl" "Ron's Minitrain Props" "4" 2 "NULL" "-4, 8.507, 1" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/straight/8.mdl" "Ron's Minitrain Props" "8" 1 "NULL" " 0, 8.507, 1" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/minitrains/straight/8.mdl" "Ron's Minitrain Props" "8" 2 "NULL" "-8, 8.507, 1" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/rerailer.mdl" "SProps" "Rerailer" 1 "-1088.178,0,19.886" "-1280.383,0,7.618" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_h01.mdl" "SProps" "Ramp" 1 "NULL" "0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_h01.mdl" "SProps" "Ramp" 2 "NULL" "-2525.98,0,503.58" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_h02.mdl" "SProps" "225 Up" 1 "NULL" "0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_h02.mdl" "SProps" "225 Up" 2 "NULL" "-1258.828,0,261.268" "-22.5,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_h03.mdl" "SProps" "225 Down" 1 "NULL" "0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_h03.mdl" "SProps" "225 Down" 2 "NULL" "-1264.663,0,-247.177" "22.5,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s01.mdl" "SProps" "Straight 1x" 1 "NULL" " 0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s01.mdl" "SProps" "Straight 1x" 2 "NULL" "-162,0,7.624" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s02.mdl" "SProps" "Straight 2x" 1 "NULL" " 0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s02.mdl" "SProps" "Straight 2x" 2 "NULL" "-324,0,7.624" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s03.mdl" "SProps" "Straight 3x" 1 "NULL" " 0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s03.mdl" "SProps" "Straight 3x" 2 "NULL" "-486,0,7.624" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s04.mdl" "SProps" "Straight 4x" 1 "NULL" " 0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s04.mdl" "SProps" "Straight 4x" 2 "NULL" "-648,0,7.624" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s05.mdl" "SProps" "Straight 5x" 1 "NULL" " 0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s05.mdl" "SProps" "Straight 5x" 2 "NULL" "-1296.002,0,7.624" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s06.mdl" "SProps" "Straight 6x" 1 "NULL" " 0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_s06.mdl" "SProps" "Straight 6x" 2 "NULL" "-2592.002,0,7.624" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_t90_01.mdl" "SProps" "Turn 90 Small" 1 "NULL" "0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_t90_01.mdl" "SProps" "Turn 90 Small" 2 "NULL" "-825,825,7.624" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_t90_02.mdl" "SProps" "Turn 90 Big" 1 "NULL" "0,0,7.624" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sprops/trans/train/track_t90_02.mdl" "SProps" "Turn 90 Big" 2 "NULL" "-1650,1650.0009765625,7.624" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_16x.mdl" "Shinji85's Rails" "Straight 16x" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_16x.mdl" "Shinji85's Rails" "Straight 16x" 2 "NULL" "-2048,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_1x.mdl" "Shinji85's Rails" "Straight 1x" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_1x.mdl" "Shinji85's Rails" "Straight 1x" 2 "NULL" "-128,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_2x.mdl" "Shinji85's Rails" "Straight 2x" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_2x.mdl" "Shinji85's Rails" "Straight 2x" 2 "NULL" "-256,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_4x.mdl" "Shinji85's Rails" "Straight 4x" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_4x.mdl" "Shinji85's Rails" "Straight 4x" 2 "NULL" "-512,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_4x_crossing.mdl" "Shinji85's Rails" "Crossing 4x" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_4x_crossing.mdl" "Shinji85's Rails" "Crossing 4x" 2 "NULL" "-512,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_8x.mdl" "Shinji85's Rails" "Straight 8x" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_8x.mdl" "Shinji85's Rails" "Straight 8x" 2 "NULL" "-1024,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_bumper.mdl" "Shinji85's Rails" "Bumper" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cross_4x.mdl" "Shinji85's Rails" "Cross 4x" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cross_4x.mdl" "Shinji85's Rails" "Cross 4x" 2 "NULL" "-512,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cross_4x.mdl" "Shinji85's Rails" "Cross 4x" 3 "NULL" "-256,-256,7.346" "0,270,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cross_4x.mdl" "Shinji85's Rails" "Cross 4x" 4 "NULL" "-256,256,7.346" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cs.mdl" "Shinji85's Rails" "Counter Switch" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cs.mdl" "Shinji85's Rails" "Counter Switch" 2 "NULL" "-908.81165,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_csfix.mdl" "Shinji85's Rails" "Counter Switch Fix" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_csfix.mdl" "Shinji85's Rails" "Counter Switch Fix" 2 "NULL" "-115.18847,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_cc.mdl" "Shinji85's Rails" "Curve Cc" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_cc.mdl" "Shinji85's Rails" "Curve Cc" 2 "NULL" "-966.40515,128,7.346" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r1.mdl" "Shinji85's Rails" "Curve R1" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r1.mdl" "Shinji85's Rails" "Curve R1" 2 "NULL" "-1060.12341,139.56763,7.346" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r11.mdl" "Shinji85's Rails" "Curve R11" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r11.mdl" "Shinji85's Rails" "Curve R11" 2 "NULL" "-1086.11584,449.88458,7.346" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r12.mdl" "Shinji85's Rails" "Curve R12" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r12.mdl" "Shinji85's Rails" "Curve R12" 2 "NULL" "-905.09656,374.90414,7.346" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r13.mdl" "Shinji85's Rails" "Curve R13" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r13.mdl" "Shinji85's Rails" "Curve R13" 2 "NULL" "-724.07727,299.92276,7.346" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r2.mdl" "Shinji85's Rails" "Curve R2" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r2.mdl" "Shinji85's Rails" "Curve R2" 2 "NULL" "-993.86572,130.84471,7.346" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r3.mdl" "Shinji85's Rails" "Curve R3" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_curve_r3.mdl" "Shinji85's Rails" "Curve R3" 2 "NULL" "-927.60797,122.1218,7.346" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cx.mdl" "Shinji85's Rails" "Counter X" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cx.mdl" "Shinji85's Rails" "Counter X" 2 "NULL" "-362.51361,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cxfix.mdl" "Shinji85's Rails" "Counter X Fix" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_cxfix.mdl" "Shinji85's Rails" "Counter X Fix" 2 "NULL" "-149.48648,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_double_4x_crossing.mdl" "Shinji85's Rails" "Crossing Double 4x" 1 "NULL" "0,128,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_double_4x_crossing.mdl" "Shinji85's Rails" "Crossing Double 4x" 2 "NULL" "-512,128,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_double_4x_crossing.mdl" "Shinji85's Rails" "Crossing Double 4x" 3 "NULL" "0,-128,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_double_4x_crossing.mdl" "Shinji85's Rails" "Crossing Double 4x" 4 "NULL" "-512,-128,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_double_bumper.mdl" "Shinji85's Rails" "Bumper Double" 1 "NULL" "0,128,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_double_bumper.mdl" "Shinji85's Rails" "Bumper Double" 2 "NULL" "0,-128,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_l_switch.mdl" "Shinji85's Rails" "Left Switch" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_l_switch.mdl" "Shinji85's Rails" "Left Switch" 2 "NULL" "-1024,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_l_switch.mdl" "Shinji85's Rails" "Left Switch" 3 "NULL" "-966.40515,-128,7.346" "0,195,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_r_switch.mdl" "Shinji85's Rails" "Right Switch" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_r_switch.mdl" "Shinji85's Rails" "Right Switch" 2 "NULL" "-1024,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_r_switch.mdl" "Shinji85's Rails" "Right Switch" 3 "NULL" "-966.40515,128,7.346" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_x_junction.mdl" "Shinji85's Rails" "X Junction" 1 "NULL" "0,0,7.346" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_x_junction.mdl" "Shinji85's Rails" "X Junction" 2 "NULL" "-494.55,0,7.346" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_x_junction.mdl" "Shinji85's Rails" "X Junction" 3 "NULL" "-33.129,-123.63866,7.346" "0,-30,0" "NULL" +TRACKASSEMBLY_PIECES "models/shinji85/train/rail_x_junction.mdl" "Shinji85's Rails" "X Junction" 4 "NULL" "-461.42175,123.63649,7.346" "0,150,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrccross.mdl" "SligWolf's Bodygroup Car" "Switcher Cross" 1 "NULL" "500,0,0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrccross.mdl" "SligWolf's Bodygroup Car" "Switcher Cross" 2 "NULL" "-2673,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrccurve001.mdl" "SligWolf's Bodygroup Car" "U-Turn" 1 "NULL" "890, 748.009, 2.994" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrccurve001.mdl" "SligWolf's Bodygroup Car" "U-Turn" 2 "NULL" "890, 451.998, 2.994" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrccurve001.mdl" "SligWolf's Bodygroup Car" "U-Turn" 3 "NULL" "890, -452.001, 2.974" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrccurve001.mdl" "SligWolf's Bodygroup Car" "U-Turn" 4 "NULL" "890, -748.027, 2.974" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrclooping.mdl" "SligWolf's Bodygroup Car" "Loop 180" 1 "NULL" "810, -252.447, -0.005" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrclooping.mdl" "SligWolf's Bodygroup Car" "Loop 180" 2 "NULL" "-809.999, 136.997, -0.002" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrcloopingspecial.mdl" "SligWolf's Bodygroup Car" "LoopSwitch 180" 1 "NULL" "927.001, -194.403, -0.036" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrcloopingspecial.mdl" "SligWolf's Bodygroup Car" "LoopSwitch 180" 2 "NULL" "-809.999, 137.003, 350.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrcloopingspecial.mdl" "SligWolf's Bodygroup Car" "LoopSwitch 180" 3 "NULL" "-809.999, -527.972, 350.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrcramp.mdl" "SligWolf's Bodygroup Car" "Ramp 45" 1 "NULL" "1000, 0, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrcramp.mdl" "SligWolf's Bodygroup Car" "Ramp 45" 2 "NULL" "-641.92, 0, 269.672" "-45,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrctraffic_lights.mdl" "SligWolf's Bodygroup Car" "Start Lights" 1 "NULL" "0, -152.532, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrctraffic_lights.mdl" "SligWolf's Bodygroup Car" "Start Lights" 2 "NULL" "0, 152.554, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/bgcar/swrctraffic_lights.mdl" "SligWolf's Bodygroup Car" "Start Lights" 3 "NULL" "0, 0, 0.042" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/buffer_stop_12.mdl" "SligWolf's Mini Trains" "Buffer Stop (12)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_1_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_2_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_3_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_4_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_5_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_22p5.mdl" "SligWolf's Mini Trains" "Curve (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_45.mdl" "SligWolf's Mini Trains" "Curve (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_90.mdl" "SligWolf's Mini Trains" "Curve (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_s_big.mdl" "SligWolf's Mini Trains" "Curve S-Form (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_s_medium.mdl" "SligWolf's Mini Trains" "Curve S-Form (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/curve_6_s_small.mdl" "SligWolf's Mini Trains" "Curve S-Form (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/rerailer_380.mdl" "SligWolf's Mini Trains" "Rerailer (380)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/rerailer_380.mdl" "SligWolf's Mini Trains" "Rerailer (380)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/slope_144x32.mdl" "SligWolf's Mini Trains" "Slope (144x32)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/slope_144x32.mdl" "SligWolf's Mini Trains" "Slope (144x32)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/slope_272x32.mdl" "SligWolf's Mini Trains" "Slope (272x32)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/slope_272x32.mdl" "SligWolf's Mini Trains" "Slope (272x32)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/slope_528x32.mdl" "SligWolf's Mini Trains" "Slope (528x32)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/slope_528x32.mdl" "SligWolf's Mini Trains" "Slope (528x32)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_1024.mdl" "SligWolf's Mini Trains" "Straight (1024)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_1024.mdl" "SligWolf's Mini Trains" "Straight (1024)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_128.mdl" "SligWolf's Mini Trains" "Straight (128)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_128.mdl" "SligWolf's Mini Trains" "Straight (128)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_16.mdl" "SligWolf's Mini Trains" "Straight (16)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_16.mdl" "SligWolf's Mini Trains" "Straight (16)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_256.mdl" "SligWolf's Mini Trains" "Straight (256)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_256.mdl" "SligWolf's Mini Trains" "Straight (256)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_32.mdl" "SligWolf's Mini Trains" "Straight (32)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_32.mdl" "SligWolf's Mini Trains" "Straight (32)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_512.mdl" "SligWolf's Mini Trains" "Straight (512)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_512.mdl" "SligWolf's Mini Trains" "Straight (512)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_64.mdl" "SligWolf's Mini Trains" "Straight (64)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/straight_64.mdl" "SligWolf's Mini Trains" "Straight (64)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 3 "NULL" "!right" "!right" "sligwolf_minitrain_switch_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 4 "NULL" "!flipped_front" "!flipped_front" "sligwolf_minitrain_switch_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 5 "NULL" "!flipped_back" "!flipped_back" "sligwolf_minitrain_switch_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 6 "NULL" "!flipped_right" "!flipped_right" "sligwolf_minitrain_switch_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_1to3_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_1to3_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 3 "NULL" "!left" "!left" "sligwolf_minitrain_switch_1to3_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_1_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 4 "NULL" "!right" "!right" "sligwolf_minitrain_switch_1to3_1_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_1to3_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_1to3_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 3 "NULL" "!left" "!left" "sligwolf_minitrain_switch_1to3_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 4 "NULL" "!right" "!right" "sligwolf_minitrain_switch_1to3_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_1to3_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_1to3_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 3 "NULL" "!left" "!left" "sligwolf_minitrain_switch_1to3_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 4 "NULL" "!right" "!right" "sligwolf_minitrain_switch_1to3_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_1to3_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_1to3_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 3 "NULL" "!left" "!left" "sligwolf_minitrain_switch_1to3_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 4 "NULL" "!right" "!right" "sligwolf_minitrain_switch_1to3_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_1to3_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_1to3_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 3 "NULL" "!left" "!left" "sligwolf_minitrain_switch_1to3_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 4 "NULL" "!right" "!right" "sligwolf_minitrain_switch_1to3_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_1to3_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_1to3_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 3 "NULL" "!left" "!left" "sligwolf_minitrain_switch_1to3_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_1to3_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 4 "NULL" "!right" "!right" "sligwolf_minitrain_switch_1to3_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 3 "NULL" "!right" "!right" "sligwolf_minitrain_switch_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 4 "NULL" "!flipped_front" "!flipped_front" "sligwolf_minitrain_switch_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 5 "NULL" "!flipped_back" "!flipped_back" "sligwolf_minitrain_switch_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 6 "NULL" "!flipped_right" "!flipped_right" "sligwolf_minitrain_switch_2_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 3 "NULL" "!right" "!right" "sligwolf_minitrain_switch_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 4 "NULL" "!flipped_front" "!flipped_front" "sligwolf_minitrain_switch_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 5 "NULL" "!flipped_back" "!flipped_back" "sligwolf_minitrain_switch_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_3_128.mdl" "SligWolf's Mini Trains" "Switch 3 (128)" 6 "NULL" "!flipped_right" "!flipped_right" "sligwolf_minitrain_switch_3_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 3 "NULL" "!right" "!right" "sligwolf_minitrain_switch_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 4 "NULL" "!flipped_front" "!flipped_front" "sligwolf_minitrain_switch_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 5 "NULL" "!flipped_back" "!flipped_back" "sligwolf_minitrain_switch_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_4_128.mdl" "SligWolf's Mini Trains" "Switch 4 (128)" 6 "NULL" "!flipped_right" "!flipped_right" "sligwolf_minitrain_switch_4_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 3 "NULL" "!right" "!right" "sligwolf_minitrain_switch_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 4 "NULL" "!flipped_front" "!flipped_front" "sligwolf_minitrain_switch_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 5 "NULL" "!flipped_back" "!flipped_back" "sligwolf_minitrain_switch_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_5_128.mdl" "SligWolf's Mini Trains" "Switch 5 (128)" 6 "NULL" "!flipped_right" "!flipped_right" "sligwolf_minitrain_switch_5_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 2 "NULL" "!back" "!back" "sligwolf_minitrain_switch_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 3 "NULL" "!right" "!right" "sligwolf_minitrain_switch_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 4 "NULL" "!flipped_front" "!flipped_front" "sligwolf_minitrain_switch_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 5 "NULL" "!flipped_back" "!flipped_back" "sligwolf_minitrain_switch_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_6_128.mdl" "SligWolf's Mini Trains" "Switch 6 (128)" 6 "NULL" "!flipped_right" "!flipped_right" "sligwolf_minitrain_switch_6_128" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_n_160.mdl" "SligWolf's Mini Trains" "Switch 1 (160)" 1 "NULL" "!front_left" "!front_left" "sligwolf_minitrain_switch_n" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_n_160.mdl" "SligWolf's Mini Trains" "Switch 1 (160)" 2 "NULL" "!front_right" "!front_right" "sligwolf_minitrain_switch_n" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_n_160.mdl" "SligWolf's Mini Trains" "Switch 1 (160)" 3 "NULL" "!back_left" "!back_left" "sligwolf_minitrain_switch_n" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_n_160.mdl" "SligWolf's Mini Trains" "Switch 1 (160)" 4 "NULL" "!back_right" "!back_right" "sligwolf_minitrain_switch_n" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_n_160.mdl" "SligWolf's Mini Trains" "Switch 1 (160)" 5 "NULL" "!flipped_front_left" "!flipped_front_left" "sligwolf_minitrain_switch_n" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_n_160.mdl" "SligWolf's Mini Trains" "Switch 1 (160)" 6 "NULL" "!flipped_front_right" "!flipped_front_right" "sligwolf_minitrain_switch_n" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_n_160.mdl" "SligWolf's Mini Trains" "Switch 1 (160)" 7 "NULL" "!flipped_back_left" "!flipped_back_left" "sligwolf_minitrain_switch_n" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_n_160.mdl" "SligWolf's Mini Trains" "Switch 1 (160)" 8 "NULL" "!flipped_back_right" "!flipped_back_right" "sligwolf_minitrain_switch_n" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_y_1" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 2 "NULL" "!left" "!left" "sligwolf_minitrain_switch_y_1" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 3 "NULL" "!right" "!right" "sligwolf_minitrain_switch_y_1" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 4 "NULL" "!flipped_front" "!flipped_front" "sligwolf_minitrain_switch_y_1" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 5 "NULL" "!flipped_left" "!flipped_left" "sligwolf_minitrain_switch_y_1" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_128.mdl" "SligWolf's Mini Trains" "Switch 1 (128)" 6 "NULL" "!flipped_right" "!flipped_right" "sligwolf_minitrain_switch_y_1" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 1 "NULL" "!front" "!front" "sligwolf_minitrain_switch_y_2" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 2 "NULL" "!left" "!left" "sligwolf_minitrain_switch_y_2" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 3 "NULL" "!right" "!right" "sligwolf_minitrain_switch_y_2" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 4 "NULL" "!flipped_front" "!flipped_front" "sligwolf_minitrain_switch_y_2" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 5 "NULL" "!flipped_left" "!flipped_left" "sligwolf_minitrain_switch_y_2" +TRACKASSEMBLY_PIECES "models/sligwolf/minitrains/tracks/switch_y_2_128.mdl" "SligWolf's Mini Trains" "Switch 2 (128)" 6 "NULL" "!flipped_right" "!flipped_right" "sligwolf_minitrain_switch_y_2" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/buffer.mdl" "SligWolf's Modelpack" "Buffer Stop" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/curve_225.mdl" "SligWolf's Modelpack" "Curve (22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/curve_225.mdl" "SligWolf's Modelpack" "Curve (22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/curve_45.mdl" "SligWolf's Modelpack" "Curve (45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/curve_45.mdl" "SligWolf's Modelpack" "Curve (45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/curve_90.mdl" "SligWolf's Modelpack" "Curve (90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/curve_90.mdl" "SligWolf's Modelpack" "Curve (90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/straight_1024.mdl" "SligWolf's Modelpack" "Straight (1024)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/straight_1024.mdl" "SligWolf's Modelpack" "Straight (1024)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/straight_128.mdl" "SligWolf's Modelpack" "Straight (128)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/straight_128.mdl" "SligWolf's Modelpack" "Straight (128)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/straight_256.mdl" "SligWolf's Modelpack" "Straight (256)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/straight_256.mdl" "SligWolf's Modelpack" "Straight (256)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/straight_512.mdl" "SligWolf's Modelpack" "Straight (512)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/straight_512.mdl" "SligWolf's Modelpack" "Straight (512)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_l.mdl" "SligWolf's Modelpack" "Switch SL" 1 "NULL" "!front" "!front" "sligwolf_modelpack_switch_l" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_l.mdl" "SligWolf's Modelpack" "Switch SL" 2 "NULL" "!back" "!back" "sligwolf_modelpack_switch_l" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_l.mdl" "SligWolf's Modelpack" "Switch SL" 3 "NULL" "!left" "!left" "sligwolf_modelpack_switch_l" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_r.mdl" "SligWolf's Modelpack" "Switch SR" 1 "NULL" "!front" "!front" "sligwolf_modelpack_switch_r" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_r.mdl" "SligWolf's Modelpack" "Switch SR" 2 "NULL" "!back" "!back" "sligwolf_modelpack_switch_r" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_r.mdl" "SligWolf's Modelpack" "Switch SR" 3 "NULL" "!right" "!right" "sligwolf_modelpack_switch_r" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_y.mdl" "SligWolf's Modelpack" "Switch LR" 1 "NULL" "!front" "!front" "sligwolf_modelpack_switch_y" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_y.mdl" "SligWolf's Modelpack" "Switch LR" 2 "NULL" "!left" "!left" "sligwolf_modelpack_switch_y" +TRACKASSEMBLY_PIECES "models/sligwolf/modelpack/rails/switch_225_y.mdl" "SligWolf's Modelpack" "Switch LR" 3 "NULL" "!right" "!right" "sligwolf_modelpack_switch_y" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/rerailer_1.mdl" "SligWolf's Rerailer" "Double Short" 1 "-221.409, 0, 3.031" "219.412, 0, -5.411" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/rerailer_1.mdl" "SligWolf's Rerailer" "Double Short" 2 "-1103.05, 0, 0.009" "-1543.871, 0, -5.411" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/rerailer_2.mdl" "SligWolf's Rerailer" "Double Middle" 1 "-265.554, 0, 3.031" "219.412, 0, -5.407" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/rerailer_2.mdl" "SligWolf's Rerailer" "Double Middle" 2 "-1882.106, 0, 3.031" "-2367.072, 0, -5.412" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/rerailer_3.mdl" "SligWolf's Rerailer" "Double Long" 1 "-258.249, -0.01, -0.002" "219.415, 0, -5.409" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/rerailer_3.mdl" "SligWolf's Rerailer" "Double Long" 2 "-3124.199, -0.01, 2.997" "-3601.869, -0.377, -5.416" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/sw_rerailer_1.mdl" "SligWolf's Rerailer" "Single Short" 1 "-190.553,0,25.193" "211.414,0.015,-5.395" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/sw_rerailer_2.mdl" "SligWolf's Rerailer" "Single Middle" 1 "-190.553,0,25.193" "211.414,0.015,-5.395" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/rerailer/sw_rerailer_3.mdl" "SligWolf's Rerailer" "Single Long" 1 "-190.553,0,25.193" "211.414,0.015,-5.395" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_192.mdl" "SligWolf's Suspension Train" "Handrail (192)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_192.mdl" "SligWolf's Suspension Train" "Handrail (192)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_192.mdl" "SligWolf's Suspension Train" "Handrail (192)" 3 "NULL" "!handrail03" "!handrail03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_288.mdl" "SligWolf's Suspension Train" "Handrail (288)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_288.mdl" "SligWolf's Suspension Train" "Handrail (288)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_288.mdl" "SligWolf's Suspension Train" "Handrail (288)" 3 "NULL" "!handrail03" "!handrail03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_288.mdl" "SligWolf's Suspension Train" "Handrail (288)" 4 "NULL" "!handrail04" "!handrail04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_288.mdl" "SligWolf's Suspension Train" "Handrail (288)" 5 "NULL" "!handrail05" "!handrail05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_384.mdl" "SligWolf's Suspension Train" "Handrail (384)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_384.mdl" "SligWolf's Suspension Train" "Handrail (384)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_384.mdl" "SligWolf's Suspension Train" "Handrail (384)" 3 "NULL" "!handrail03" "!handrail03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_384.mdl" "SligWolf's Suspension Train" "Handrail (384)" 4 "NULL" "!handrail04" "!handrail04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_384.mdl" "SligWolf's Suspension Train" "Handrail (384)" 5 "NULL" "!handrail05" "!handrail05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_384.mdl" "SligWolf's Suspension Train" "Handrail (384)" 6 "NULL" "!handrail06" "!handrail06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_384.mdl" "SligWolf's Suspension Train" "Handrail (384)" 7 "NULL" "!handrail07" "!handrail07" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_48.mdl" "SligWolf's Suspension Train" "Handrail (48)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_48.mdl" "SligWolf's Suspension Train" "Handrail (48)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_48x48.mdl" "SligWolf's Suspension Train" "Handrail L-Shape (48 x 48)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_48x48.mdl" "SligWolf's Suspension Train" "Handrail L-Shape (48 x 48)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_96.mdl" "SligWolf's Suspension Train" "Handrail (96)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_96x96.mdl" "SligWolf's Suspension Train" "Handrail L-Shape (96 x 96)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_platform_96x96.mdl" "SligWolf's Suspension Train" "Handrail L-Shape (96 x 96)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_stairs_192.mdl" "SligWolf's Suspension Train" "Stairhandrail (192)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_stairs_192.mdl" "SligWolf's Suspension Train" "Stairhandrail (192)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_stairs_48.mdl" "SligWolf's Suspension Train" "Stairhandrail (48)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_stairs_48.mdl" "SligWolf's Suspension Train" "Stairhandrail (48)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_stairs_96.mdl" "SligWolf's Suspension Train" "Stairhandrail (96)" 1 "NULL" "!handrail01" "!handrail01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/handrails/handrail_stairs_96.mdl" "SligWolf's Suspension Train" "Stairhandrail (96)" 2 "NULL" "!handrail02" "!handrail02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmen_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmen_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmen_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmen_768x448.mdl" "SligWolf's Suspension Train" "Holder (768 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmen_768x448.mdl" "SligWolf's Suspension Train" "Holder (768 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmen_768x448.mdl" "SligWolf's Suspension Train" "Holder (768 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmenwinkel_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmenwinkel_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmenwinkel_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmenwinkel_512x448.mdl" "SligWolf's Suspension Train" "Holder (512 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmenwinkel_512x448.mdl" "SligWolf's Suspension Train" "Holder (512 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_barmenwinkel_512x448.mdl" "SligWolf's Suspension Train" "Holder (512 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_vohwinkel_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_vohwinkel_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_vohwinkel_1024x448.mdl" "SligWolf's Suspension Train" "Holder (1024 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_vohwinkel_512x448.mdl" "SligWolf's Suspension Train" "Holder (512 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_vohwinkel_512x448.mdl" "SligWolf's Suspension Train" "Holder (512 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holder_vohwinkel_512x448.mdl" "SligWolf's Suspension Train" "Holder (512 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_barmen_128x384.mdl" "SligWolf's Suspension Train" "Holderbeam (128 x 384)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_barmen_128x384.mdl" "SligWolf's Suspension Train" "Holderbeam (128 x 384)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_barmen_256x384.mdl" "SligWolf's Suspension Train" "Holderbeam (256 x 384)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_barmen_256x384.mdl" "SligWolf's Suspension Train" "Holderbeam (256 x 384)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_varresbeck_384.mdl" "SligWolf's Suspension Train" "Holderbeam (384)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_varresbeck_384.mdl" "SligWolf's Suspension Train" "Holderbeam (384)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_varresbeck_female_end_448.mdl" "SligWolf's Suspension Train" "Holderbeam - Female (448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_varresbeck_female_end_448.mdl" "SligWolf's Suspension Train" "Holderbeam - Female (448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_varresbeck_male_end_448.mdl" "SligWolf's Suspension Train" "Holderbeam - Male (448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_varresbeck_male_end_448.mdl" "SligWolf's Suspension Train" "Holderbeam - Male (448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_192.mdl" "SligWolf's Suspension Train" "Holderbeam (192)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_192.mdl" "SligWolf's Suspension Train" "Holderbeam (192)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_288.mdl" "SligWolf's Suspension Train" "Holderbeam (288)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_288.mdl" "SligWolf's Suspension Train" "Holderbeam (288)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_384.mdl" "SligWolf's Suspension Train" "Holderbeam (384)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_384.mdl" "SligWolf's Suspension Train" "Holderbeam (384)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_48.mdl" "SligWolf's Suspension Train" "Holderbeam (48)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_48.mdl" "SligWolf's Suspension Train" "Holderbeam (48)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_96.mdl" "SligWolf's Suspension Train" "Holderbeam (96)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbeam_vohwinkel_96.mdl" "SligWolf's Suspension Train" "Holderbeam (96)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbow_vohwinkel_64x64.mdl" "SligWolf's Suspension Train" "Holderbow (64 x 64)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderbow_vohwinkel_64x64.mdl" "SligWolf's Suspension Train" "Holderbow (64 x 64)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderconnector_female_64.mdl" "SligWolf's Suspension Train" "Holderconnector - Female (64)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderconnector_female_64.mdl" "SligWolf's Suspension Train" "Holderconnector - Female (64)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderconnector_female_64.mdl" "SligWolf's Suspension Train" "Holderconnector - Female (64)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderconnector_male_64.mdl" "SligWolf's Suspension Train" "Holderconnector - Male (64)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderconnector_male_64.mdl" "SligWolf's Suspension Train" "Holderconnector - Male (64)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderconnector_male_64.mdl" "SligWolf's Suspension Train" "Holderconnector - Male (64)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_192.mdl" "SligWolf's Suspension Train" "Holderladder (192)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_192.mdl" "SligWolf's Suspension Train" "Holderladder (192)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_192.mdl" "SligWolf's Suspension Train" "Holderladder (192)" 3 "NULL" "!holder01a" "!holder01a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_192.mdl" "SligWolf's Suspension Train" "Holderladder (192)" 4 "NULL" "!holder01b" "!holder01b" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_192.mdl" "SligWolf's Suspension Train" "Holderladder (192)" 5 "NULL" "!holder01c" "!holder01c" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_288.mdl" "SligWolf's Suspension Train" "Holderladder (288)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_288.mdl" "SligWolf's Suspension Train" "Holderladder (288)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_288.mdl" "SligWolf's Suspension Train" "Holderladder (288)" 3 "NULL" "!holder01a" "!holder01a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_288.mdl" "SligWolf's Suspension Train" "Holderladder (288)" 4 "NULL" "!holder01b" "!holder01b" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_288.mdl" "SligWolf's Suspension Train" "Holderladder (288)" 5 "NULL" "!holder01c" "!holder01c" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_384.mdl" "SligWolf's Suspension Train" "Holderladder (384)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_384.mdl" "SligWolf's Suspension Train" "Holderladder (384)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_384.mdl" "SligWolf's Suspension Train" "Holderladder (384)" 3 "NULL" "!holder01a" "!holder01a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_384.mdl" "SligWolf's Suspension Train" "Holderladder (384)" 4 "NULL" "!holder01b" "!holder01b" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_384.mdl" "SligWolf's Suspension Train" "Holderladder (384)" 5 "NULL" "!holder01c" "!holder01c" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_48.mdl" "SligWolf's Suspension Train" "Holderladder (48)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_48.mdl" "SligWolf's Suspension Train" "Holderladder (48)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_48.mdl" "SligWolf's Suspension Train" "Holderladder (48)" 3 "NULL" "!holder01a" "!holder01a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_48.mdl" "SligWolf's Suspension Train" "Holderladder (48)" 4 "NULL" "!holder01b" "!holder01b" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_48.mdl" "SligWolf's Suspension Train" "Holderladder (48)" 5 "NULL" "!holder01c" "!holder01c" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_96.mdl" "SligWolf's Suspension Train" "Holderladder (96)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_96.mdl" "SligWolf's Suspension Train" "Holderladder (96)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_96.mdl" "SligWolf's Suspension Train" "Holderladder (96)" 3 "NULL" "!holder01a" "!holder01a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_96.mdl" "SligWolf's Suspension Train" "Holderladder (96)" 4 "NULL" "!holder01b" "!holder01b" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderladder_96.mdl" "SligWolf's Suspension Train" "Holderladder (96)" 5 "NULL" "!holder01c" "!holder01c" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmen_192x448.mdl" "SligWolf's Suspension Train" "Holderleg (192 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmen_192x448.mdl" "SligWolf's Suspension Train" "Holderleg (192 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmen_192x448.mdl" "SligWolf's Suspension Train" "Holderleg (192 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmen_320x448.mdl" "SligWolf's Suspension Train" "Holderleg (320 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmen_320x448.mdl" "SligWolf's Suspension Train" "Holderleg (320 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmen_320x448.mdl" "SligWolf's Suspension Train" "Holderleg (320 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmenwinkel_160x448.mdl" "SligWolf's Suspension Train" "Holderleg (160 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmenwinkel_160x448.mdl" "SligWolf's Suspension Train" "Holderleg (160 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_barmenwinkel_160x448.mdl" "SligWolf's Suspension Train" "Holderleg (160 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_vohwinkel_160x448.mdl" "SligWolf's Suspension Train" "Holderleg (160 x 448)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_vohwinkel_160x448.mdl" "SligWolf's Suspension Train" "Holderleg (160 x 448)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holderleg_vohwinkel_160x448.mdl" "SligWolf's Suspension Train" "Holderleg (160 x 448)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holdermain_192x80.mdl" "SligWolf's Suspension Train" "Mainpiece (192 x 80)" 1 "NULL" "!holder01" "!holder01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holdermain_192x80.mdl" "SligWolf's Suspension Train" "Mainpiece (192 x 80)" 2 "NULL" "!holder02" "!holder02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/holders/holdermain_192x80.mdl" "SligWolf's Suspension Train" "Mainpiece (192 x 80)" 3 "NULL" "!holder03" "!holder03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1_96x96.mdl" "SligWolf's Suspension Train" "Platform 1A (96 x 96)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1_96x96.mdl" "SligWolf's Suspension Train" "Platform 1A (96 x 96)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1_96x96.mdl" "SligWolf's Suspension Train" "Platform 1A (96 x 96)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1_96x96.mdl" "SligWolf's Suspension Train" "Platform 1A (96 x 96)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1a_96x96.mdl" "SligWolf's Suspension Train" "Platform 1B (96 x 96)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1a_96x96.mdl" "SligWolf's Suspension Train" "Platform 1B (96 x 96)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1a_96x96.mdl" "SligWolf's Suspension Train" "Platform 1B (96 x 96)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1b_96x96.mdl" "SligWolf's Suspension Train" "Platform 1C (96 x 96)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1b_96x96.mdl" "SligWolf's Suspension Train" "Platform 1C (96 x 96)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1c_96x96.mdl" "SligWolf's Suspension Train" "Platform 1D (96 x 96)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_1c_96x96.mdl" "SligWolf's Suspension Train" "Platform 1D (96 x 96)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2_96x192.mdl" "SligWolf's Suspension Train" "Platform 2A (96 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2_96x192.mdl" "SligWolf's Suspension Train" "Platform 2A (96 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2_96x192.mdl" "SligWolf's Suspension Train" "Platform 2A (96 x 192)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2_96x192.mdl" "SligWolf's Suspension Train" "Platform 2A (96 x 192)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2_96x192.mdl" "SligWolf's Suspension Train" "Platform 2A (96 x 192)" 5 "NULL" "!platform05" "!platform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2_96x192.mdl" "SligWolf's Suspension Train" "Platform 2A (96 x 192)" 6 "NULL" "!platform06" "!platform06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2_96x192.mdl" "SligWolf's Suspension Train" "Platform 2A (96 x 192)" 7 "NULL" "!platform07" "!platform07" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2_96x192.mdl" "SligWolf's Suspension Train" "Platform 2A (96 x 192)" 8 "NULL" "!platform08" "!platform08" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2a_96x192.mdl" "SligWolf's Suspension Train" "Platform 2B (96 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2a_96x192.mdl" "SligWolf's Suspension Train" "Platform 2B (96 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2a_96x192.mdl" "SligWolf's Suspension Train" "Platform 2B (96 x 192)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2a_96x192.mdl" "SligWolf's Suspension Train" "Platform 2B (96 x 192)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2a_96x192.mdl" "SligWolf's Suspension Train" "Platform 2B (96 x 192)" 5 "NULL" "!platform05" "!platform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2b_96x192.mdl" "SligWolf's Suspension Train" "Platform 2C (96 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2b_96x192.mdl" "SligWolf's Suspension Train" "Platform 2C (96 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2b_96x192.mdl" "SligWolf's Suspension Train" "Platform 2C (96 x 192)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2b_96x192.mdl" "SligWolf's Suspension Train" "Platform 2C (96 x 192)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2b_96x192.mdl" "SligWolf's Suspension Train" "Platform 2C (96 x 192)" 5 "NULL" "!platform05" "!platform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2c_96x192.mdl" "SligWolf's Suspension Train" "Platform 2D (96 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2c_96x192.mdl" "SligWolf's Suspension Train" "Platform 2D (96 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2d_96x192.mdl" "SligWolf's Suspension Train" "Platform 2E (96 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2d_96x192.mdl" "SligWolf's Suspension Train" "Platform 2E (96 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2d_96x192.mdl" "SligWolf's Suspension Train" "Platform 2E (96 x 192)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2d_96x192.mdl" "SligWolf's Suspension Train" "Platform 2E (96 x 192)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2d_96x192.mdl" "SligWolf's Suspension Train" "Platform 2E (96 x 192)" 5 "NULL" "!platform05" "!platform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_2d_96x192.mdl" "SligWolf's Suspension Train" "Platform 2E (96 x 192)" 6 "NULL" "!platform06" "!platform06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 5 "NULL" "!platform05" "!platform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 6 "NULL" "!platform06" "!platform06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 7 "NULL" "!platform07" "!platform07" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 8 "NULL" "!platform08" "!platform08" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 9 "NULL" "!platform09" "!platform09" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 10 "NULL" "!platform10" "!platform10" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 11 "NULL" "!platform11" "!platform11" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3_192x192.mdl" "SligWolf's Suspension Train" "Platform 3A (192 x 192)" 12 "NULL" "!platform12" "!platform12" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 5 "NULL" "!platform05" "!platform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 6 "NULL" "!platform06" "!platform06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 7 "NULL" "!platform07" "!platform07" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 8 "NULL" "!platform08" "!platform08" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3a_192x192.mdl" "SligWolf's Suspension Train" "Platform 3B (192 x 192)" 9 "NULL" "!platform09" "!platform09" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3b_192x192.mdl" "SligWolf's Suspension Train" "Platform 3C (192 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3b_192x192.mdl" "SligWolf's Suspension Train" "Platform 3C (192 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3b_192x192.mdl" "SligWolf's Suspension Train" "Platform 3C (192 x 192)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3b_192x192.mdl" "SligWolf's Suspension Train" "Platform 3C (192 x 192)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3b_192x192.mdl" "SligWolf's Suspension Train" "Platform 3C (192 x 192)" 5 "NULL" "!platform05" "!platform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3b_192x192.mdl" "SligWolf's Suspension Train" "Platform 3C (192 x 192)" 6 "NULL" "!platform06" "!platform06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3c_192x192.mdl" "SligWolf's Suspension Train" "Platform 3D (192 x 192)" 1 "NULL" "!platform01" "!platform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3c_192x192.mdl" "SligWolf's Suspension Train" "Platform 3D (192 x 192)" 2 "NULL" "!platform02" "!platform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3c_192x192.mdl" "SligWolf's Suspension Train" "Platform 3D (192 x 192)" 3 "NULL" "!platform03" "!platform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3c_192x192.mdl" "SligWolf's Suspension Train" "Platform 3D (192 x 192)" 4 "NULL" "!platform04" "!platform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3c_192x192.mdl" "SligWolf's Suspension Train" "Platform 3D (192 x 192)" 5 "NULL" "!platform05" "!platform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/platforms/station_platform_3c_192x192.mdl" "SligWolf's Suspension Train" "Platform 3D (192 x 192)" 6 "NULL" "!platform06" "!platform06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/bufferstop_64.mdl" "SligWolf's Suspension Train" "Buffer Stop (64)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/crossing_t_1904.mdl" "SligWolf's Suspension Train" "T Crossing (1904, 2048 - 144)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/crossing_t_1904.mdl" "SligWolf's Suspension Train" "T Crossing (1904, 2048 - 144)" 2 "NULL" "!left" "!left" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/crossing_t_1904.mdl" "SligWolf's Suspension Train" "T Crossing (1904, 2048 - 144)" 3 "NULL" "!right" "!right" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/crossing_t_1904.mdl" "SligWolf's Suspension Train" "T Crossing (1904, 2048 - 144)" 4 "NULL" "!station" "!station" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/crossing_x_1904.mdl" "SligWolf's Suspension Train" "X Crossing (1904, 2048 - 144)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/crossing_x_1904.mdl" "SligWolf's Suspension Train" "X Crossing (1904, 2048 - 144)" 2 "NULL" "!left" "!left" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/crossing_x_1904.mdl" "SligWolf's Suspension Train" "X Crossing (1904, 2048 - 144)" 3 "NULL" "!right" "!right" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/crossing_x_1904.mdl" "SligWolf's Suspension Train" "X Crossing (1904, 2048 - 144)" 4 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_1024_22p5.mdl" "SligWolf's Suspension Train" "Curve (1024 - 22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_1024_22p5.mdl" "SligWolf's Suspension Train" "Curve (1024 - 22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_1024_45.mdl" "SligWolf's Suspension Train" "Curve (1024 - 45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_1024_45.mdl" "SligWolf's Suspension Train" "Curve (1024 - 45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_1024_90.mdl" "SligWolf's Suspension Train" "Curve (1024 - 90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_1024_90.mdl" "SligWolf's Suspension Train" "Curve (1024 - 90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_2048_22p5.mdl" "SligWolf's Suspension Train" "Curve (2048 - 22.5°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_2048_22p5.mdl" "SligWolf's Suspension Train" "Curve (2048 - 22.5°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_2048_45.mdl" "SligWolf's Suspension Train" "Curve (2048 - 45°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_2048_45.mdl" "SligWolf's Suspension Train" "Curve (2048 - 45°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_2048_90.mdl" "SligWolf's Suspension Train" "Curve (2048 - 90°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/curve_2048_90.mdl" "SligWolf's Suspension Train" "Curve (2048 - 90°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/rerailer_2048.mdl" "SligWolf's Suspension Train" "Rerailer (2048)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/rerailer_2048.mdl" "SligWolf's Suspension Train" "Rerailer (2048)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/rerailer_2048.mdl" "SligWolf's Suspension Train" "Rerailer (2048)" 3 "NULL" "!station" "!station" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/slope_4096x480_8.mdl" "SligWolf's Suspension Train" "Slope (4096 x 480 - 8°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/slope_4096x480_8.mdl" "SligWolf's Suspension Train" "Slope (4096 x 480 - 8°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/slope_4096x480_8.mdl" "SligWolf's Suspension Train" "Slope (4096 x 480 - 8°)" 3 "NULL" "!middle" "!middle" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/slope_half_down_2048_8.mdl" "SligWolf's Suspension Train" "Slope Down (2048 - 8°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/slope_half_down_2048_8.mdl" "SligWolf's Suspension Train" "Slope Down (2048 - 8°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/slope_half_up_2048_8.mdl" "SligWolf's Suspension Train" "Slope Up (2048 - 8°)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/slope_half_up_2048_8.mdl" "SligWolf's Suspension Train" "Slope Up (2048 - 8°)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_1024.mdl" "SligWolf's Suspension Train" "Straight (1024)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_1024.mdl" "SligWolf's Suspension Train" "Straight (1024)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_128.mdl" "SligWolf's Suspension Train" "Straight (128)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_128.mdl" "SligWolf's Suspension Train" "Straight (128)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_144_full_gauge.mdl" "SligWolf's Suspension Train" "Straight (144 - Full Gauge)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_144_full_gauge.mdl" "SligWolf's Suspension Train" "Straight (144 - Full Gauge)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_16.mdl" "SligWolf's Suspension Train" "Straight (16)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_16.mdl" "SligWolf's Suspension Train" "Straight (16)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_2048.mdl" "SligWolf's Suspension Train" "Straight (2048)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_2048.mdl" "SligWolf's Suspension Train" "Straight (2048)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_2048.mdl" "SligWolf's Suspension Train" "Straight (2048)" 3 "NULL" "!station" "!station" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_256.mdl" "SligWolf's Suspension Train" "Straight (256)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_256.mdl" "SligWolf's Suspension Train" "Straight (256)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_32.mdl" "SligWolf's Suspension Train" "Straight (32)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_32.mdl" "SligWolf's Suspension Train" "Straight (32)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_512.mdl" "SligWolf's Suspension Train" "Straight (512)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_512.mdl" "SligWolf's Suspension Train" "Straight (512)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_64.mdl" "SligWolf's Suspension Train" "Straight (64)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_64.mdl" "SligWolf's Suspension Train" "Straight (64)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_72_half_gauge.mdl" "SligWolf's Suspension Train" "Straight (72 - Half Gauge)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/straight_72_half_gauge.mdl" "SligWolf's Suspension Train" "Straight (72 - Half Gauge)" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/turningloop_1024.mdl" "SligWolf's Suspension Train" "TurningLoop (1024)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/turningloop_1024.mdl" "SligWolf's Suspension Train" "TurningLoop (1024)" 2 "NULL" "!up_holder" "!up_holder" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/turningloop_2048.mdl" "SligWolf's Suspension Train" "TurningLoop (2048)" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/turningloop_2048.mdl" "SligWolf's Suspension Train" "TurningLoop (2048)" 2 "NULL" "!left_holder" "!left_holder" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/turningloop_2048.mdl" "SligWolf's Suspension Train" "TurningLoop (2048)" 3 "NULL" "!up_holder" "!up_holder" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/rails/turningloop_2048.mdl" "SligWolf's Suspension Train" "TurningLoop (2048)" 4 "NULL" "!right_holder" "!right_holder" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1a_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1a_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1a_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1a_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1a_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1a_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1a_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1a_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1b_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1b_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1b_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1b_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1b_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1b_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1b_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1b_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1c_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1c_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1c_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1c_48x96x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 96 x 24)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1c_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1c_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1c_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_1c_wide_48x192x28.mdl" "SligWolf's Suspension Train" "Stairs S (48 x 192 x 24)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2a_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2a_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2a_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2a_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2a_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2a_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2a_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2a_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2b_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2b_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2b_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2b_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2b_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2b_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2b_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2b_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2c_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2c_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2c_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2c_96x96x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 96 x 48)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2c_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2c_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2c_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_2c_wide_96x192x48.mdl" "SligWolf's Suspension Train" "Stairs M (96 x 192 x 48)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3a_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3a_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3a_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3a_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3a_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3a_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3a_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3a_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3b_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3b_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3b_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3b_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3b_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3b_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3b_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3b_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3c_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3c_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3c_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3c_192x96x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 96 x 96)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3c_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 1 "NULL" "!stairs01" "!stairs01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3c_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 2 "NULL" "!stairs02" "!stairs02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3c_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 3 "NULL" "!stairs03" "!stairs03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stairs/station_stairs_3c_wide_192x192x96.mdl" "SligWolf's Suspension Train" "Stairs L (192 x 192 x 96)" 4 "NULL" "!stairs04" "!stairs04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_1a.mdl" "SligWolf's Suspension Train" "Prebuild A" 1 "NULL" "!station01" "!station01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_1a_half.mdl" "SligWolf's Suspension Train" "Prebuild A" 1 "NULL" "!station01" "!station01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_1a_half.mdl" "SligWolf's Suspension Train" "Prebuild A" 2 "NULL" "!station02" "!station02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_1b.mdl" "SligWolf's Suspension Train" "Prebuild B" 1 "NULL" "!station01" "!station01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_1b_half.mdl" "SligWolf's Suspension Train" "Prebuild B" 1 "NULL" "!station01" "!station01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_1b_half.mdl" "SligWolf's Suspension Train" "Prebuild B" 2 "NULL" "!station02" "!station02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 1 "NULL" "!station01" "!station01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 2 "NULL" "!smallplatform01" "!smallplatform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 3 "NULL" "!smallplatform02" "!smallplatform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 4 "NULL" "!smallplatform03" "!smallplatform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 5 "NULL" "!smallplatform04" "!smallplatform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 6 "NULL" "!smallplatform05" "!smallplatform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 7 "NULL" "!smallplatform06" "!smallplatform06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 8 "NULL" "!smallplatform07" "!smallplatform07" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 9 "NULL" "!smallplatform08" "!smallplatform08" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 10 "NULL" "!smallplatform09" "!smallplatform09" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 11 "NULL" "!smallplatform10" "!smallplatform10" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 12 "NULL" "!smallplatform11" "!smallplatform11" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 13 "NULL" "!smallplatform12" "!smallplatform12" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 14 "NULL" "!smallplatform13" "!smallplatform13" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 15 "NULL" "!smallplatform14" "!smallplatform14" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 16 "NULL" "!smallplatform15" "!smallplatform15" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 17 "NULL" "!smallplatform16" "!smallplatform16" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 18 "NULL" "!smallplatform17" "!smallplatform17" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 19 "NULL" "!smallplatform18" "!smallplatform18" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 20 "NULL" "!smallplatform19" "!smallplatform19" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 21 "NULL" "!smallplatform20" "!smallplatform20" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 22 "NULL" "!smallplatform21" "!smallplatform21" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 23 "NULL" "!smallplatform22" "!smallplatform22" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 24 "NULL" "!smallplatform23" "!smallplatform23" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 25 "NULL" "!smallplatform24" "!smallplatform24" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 26 "NULL" "!smallplatform25" "!smallplatform25" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 27 "NULL" "!smallplatform26" "!smallplatform26" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 28 "NULL" "!smallplatform27" "!smallplatform27" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 29 "NULL" "!smallplatform28" "!smallplatform28" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 30 "NULL" "!bigplatform01" "!bigplatform01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 31 "NULL" "!bigplatform02" "!bigplatform02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 32 "NULL" "!bigplatform03" "!bigplatform03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 33 "NULL" "!bigplatform04" "!bigplatform04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 34 "NULL" "!bigplatform05" "!bigplatform05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 35 "NULL" "!bigplatform06" "!bigplatform06" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 36 "NULL" "!bigplatform07" "!bigplatform07" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 37 "NULL" "!bigplatform07a" "!bigplatform07a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 38 "NULL" "!bigplatform08" "!bigplatform08" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 39 "NULL" "!bigplatform09" "!bigplatform09" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 40 "NULL" "!bigplatform10" "!bigplatform10" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 41 "NULL" "!bigplatform11" "!bigplatform11" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 42 "NULL" "!bigplatform12" "!bigplatform12" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 43 "NULL" "!bigplatform13" "!bigplatform13" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 44 "NULL" "!bigplatform13a" "!bigplatform13a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 45 "NULL" "!bigplatform14" "!bigplatform14" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 46 "NULL" "!bigplatform15" "!bigplatform15" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 47 "NULL" "!bigplatform16" "!bigplatform16" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 48 "NULL" "!bigplatform17" "!bigplatform17" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 49 "NULL" "!bigplatform18" "!bigplatform18" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 50 "NULL" "!bigplatform19" "!bigplatform19" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 51 "NULL" "!bigplatform20" "!bigplatform20" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 52 "NULL" "!bigplatform20a" "!bigplatform20a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 53 "NULL" "!bigplatform21" "!bigplatform21" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 54 "NULL" "!bigplatform22" "!bigplatform22" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 55 "NULL" "!bigplatform23" "!bigplatform23" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 56 "NULL" "!bigplatform24" "!bigplatform24" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 57 "NULL" "!bigplatform25" "!bigplatform25" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 58 "NULL" "!bigplatform26" "!bigplatform26" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank.mdl" "SligWolf's Suspension Train" "Blank" 59 "NULL" "!bigplatform26a" "!bigplatform26a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 1 "NULL" "!station01" "!station01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 2 "NULL" "!station02" "!station02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 3 "NULL" "!smallplatform15" "!smallplatform15" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 4 "NULL" "!smallplatform16" "!smallplatform16" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 5 "NULL" "!smallplatform17" "!smallplatform17" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 6 "NULL" "!smallplatform18" "!smallplatform18" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 7 "NULL" "!smallplatform19" "!smallplatform19" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 8 "NULL" "!smallplatform20" "!smallplatform20" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 9 "NULL" "!smallplatform21" "!smallplatform21" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 10 "NULL" "!smallplatform22" "!smallplatform22" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 11 "NULL" "!smallplatform23" "!smallplatform23" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 12 "NULL" "!smallplatform24" "!smallplatform24" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 13 "NULL" "!smallplatform25" "!smallplatform25" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 14 "NULL" "!smallplatform26" "!smallplatform26" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 15 "NULL" "!smallplatform27" "!smallplatform27" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 16 "NULL" "!smallplatform28" "!smallplatform28" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 17 "NULL" "!bigplatform14" "!bigplatform14" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 18 "NULL" "!bigplatform15" "!bigplatform15" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 19 "NULL" "!bigplatform16" "!bigplatform16" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 20 "NULL" "!bigplatform17" "!bigplatform17" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 21 "NULL" "!bigplatform18" "!bigplatform18" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 22 "NULL" "!bigplatform19" "!bigplatform19" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 23 "NULL" "!bigplatform20" "!bigplatform20" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 24 "NULL" "!bigplatform20a" "!bigplatform20a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 25 "NULL" "!bigplatform21" "!bigplatform21" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 26 "NULL" "!bigplatform22" "!bigplatform22" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 27 "NULL" "!bigplatform23" "!bigplatform23" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 28 "NULL" "!bigplatform24" "!bigplatform24" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 29 "NULL" "!bigplatform25" "!bigplatform25" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 30 "NULL" "!bigplatform26" "!bigplatform26" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_blank_half.mdl" "SligWolf's Suspension Train" "Blank" 31 "NULL" "!bigplatform26a" "!bigplatform26a" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_industrial.mdl" "SligWolf's Suspension Train" "Industrial" 1 "NULL" "!station01" "!station01" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_industrial.mdl" "SligWolf's Suspension Train" "Industrial" 2 "NULL" "!station02" "!station02" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_industrial.mdl" "SligWolf's Suspension Train" "Industrial" 3 "NULL" "!station03" "!station03" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_industrial.mdl" "SligWolf's Suspension Train" "Industrial" 4 "NULL" "!station04" "!station04" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/stations/station_industrial.mdl" "SligWolf's Suspension Train" "Industrial" 5 "NULL" "!station05" "!station05" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_2way_1536.mdl" "SligWolf's Suspension Train" "Turntable 2 Way (1536)" 1 "NULL" "!front" "!front" "sligwolf_wpsuspensiontrain_turntable_2way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_2way_1536.mdl" "SligWolf's Suspension Train" "Turntable 2 Way (1536)" 2 "NULL" "!back" "!back" "sligwolf_wpsuspensiontrain_turntable_2way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_4way_1536.mdl" "SligWolf's Suspension Train" "Turntable 4 Way (1536)" 1 "NULL" "!front" "!front" "sligwolf_wpsuspensiontrain_turntable_4way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_4way_1536.mdl" "SligWolf's Suspension Train" "Turntable 4 Way (1536)" 2 "NULL" "!back" "!back" "sligwolf_wpsuspensiontrain_turntable_4way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_4way_1536.mdl" "SligWolf's Suspension Train" "Turntable 4 Way (1536)" 3 "NULL" "!front2" "!front2" "sligwolf_wpsuspensiontrain_turntable_4way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_4way_1536.mdl" "SligWolf's Suspension Train" "Turntable 4 Way (1536)" 4 "NULL" "!back2" "!back2" "sligwolf_wpsuspensiontrain_turntable_4way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_8way_1536.mdl" "SligWolf's Suspension Train" "Turntable 8 Way (1536)" 1 "NULL" "!front" "!front" "sligwolf_wpsuspensiontrain_turntable_8way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_8way_1536.mdl" "SligWolf's Suspension Train" "Turntable 8 Way (1536)" 2 "NULL" "!back" "!back" "sligwolf_wpsuspensiontrain_turntable_8way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_8way_1536.mdl" "SligWolf's Suspension Train" "Turntable 8 Way (1536)" 3 "NULL" "!front2" "!front2" "sligwolf_wpsuspensiontrain_turntable_8way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_8way_1536.mdl" "SligWolf's Suspension Train" "Turntable 8 Way (1536)" 4 "NULL" "!back2" "!back2" "sligwolf_wpsuspensiontrain_turntable_8way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_8way_1536.mdl" "SligWolf's Suspension Train" "Turntable 8 Way (1536)" 5 "NULL" "!front3" "!front3" "sligwolf_wpsuspensiontrain_turntable_8way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_8way_1536.mdl" "SligWolf's Suspension Train" "Turntable 8 Way (1536)" 6 "NULL" "!back3" "!back3" "sligwolf_wpsuspensiontrain_turntable_8way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_8way_1536.mdl" "SligWolf's Suspension Train" "Turntable 8 Way (1536)" 7 "NULL" "!front4" "!front4" "sligwolf_wpsuspensiontrain_turntable_8way" +TRACKASSEMBLY_PIECES "models/sligwolf/wpsuspensiontrain/turntable/turntable_ring_8way_1536.mdl" "SligWolf's Suspension Train" "Turntable 8 Way (1536)" 8 "NULL" "!back4" "!back4" "sligwolf_wpsuspensiontrain_turntable_8way" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_bow.mdl" "SligWolf's Tiny Hover Racer" "Bow x8" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_bow.mdl" "SligWolf's Tiny Hover Racer" "Bow x8" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_bow_small.mdl" "SligWolf's Tiny Hover Racer" "Bow x4" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_bow_small.mdl" "SligWolf's Tiny Hover Racer" "Bow x4" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_1_45.mdl" "SligWolf's Tiny Hover Racer" "Curve 1 45°" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_1_45.mdl" "SligWolf's Tiny Hover Racer" "Curve 1 45°" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_1_45_s.mdl" "SligWolf's Tiny Hover Racer" "Curve 1 45° S-Shape Left" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_1_45_s.mdl" "SligWolf's Tiny Hover Racer" "Curve 1 45° S-Shape Left" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_1_45_s_i.mdl" "SligWolf's Tiny Hover Racer" "Curve 1 45° S-Shape Right" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_1_45_s_i.mdl" "SligWolf's Tiny Hover Racer" "Curve 1 45° S-Shape Right" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_1_90.mdl" "SligWolf's Tiny Hover Racer" "Curve 1 90°" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_1_90.mdl" "SligWolf's Tiny Hover Racer" "Curve 1 90°" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_2_45.mdl" "SligWolf's Tiny Hover Racer" "Curve 2 45°" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_2_45.mdl" "SligWolf's Tiny Hover Racer" "Curve 2 45°" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_2_45_s.mdl" "SligWolf's Tiny Hover Racer" "Curve 2 45° S-Shape Left" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_2_45_s.mdl" "SligWolf's Tiny Hover Racer" "Curve 2 45° S-Shape Left" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_2_45_s_i.mdl" "SligWolf's Tiny Hover Racer" "Curve 2 45° S-Shape Right" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_2_45_s_i.mdl" "SligWolf's Tiny Hover Racer" "Curve 2 45° S-Shape Right" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_2_90.mdl" "SligWolf's Tiny Hover Racer" "Curve 2 90°" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_2_90.mdl" "SligWolf's Tiny Hover Racer" "Curve 2 90°" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_3_45.mdl" "SligWolf's Tiny Hover Racer" "Curve 3 45°" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_3_45.mdl" "SligWolf's Tiny Hover Racer" "Curve 3 45°" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_3_45_s.mdl" "SligWolf's Tiny Hover Racer" "Curve 3 45° S-Shape Left" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_3_45_s.mdl" "SligWolf's Tiny Hover Racer" "Curve 3 45° S-Shape Left" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_3_45_s_i.mdl" "SligWolf's Tiny Hover Racer" "Curve 3 45° S-Shape Right" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_3_45_s_i.mdl" "SligWolf's Tiny Hover Racer" "Curve 3 45° S-Shape Right" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_3_90.mdl" "SligWolf's Tiny Hover Racer" "Curve 3 90°" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_curve_3_90.mdl" "SligWolf's Tiny Hover Racer" "Curve 3 90°" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop1.mdl" "SligWolf's Tiny Hover Racer" "Looping x4 Left" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop1.mdl" "SligWolf's Tiny Hover Racer" "Looping x4 Left" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop1i.mdl" "SligWolf's Tiny Hover Racer" "Looping x4 Right" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop1i.mdl" "SligWolf's Tiny Hover Racer" "Looping x4 Right" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop2.mdl" "SligWolf's Tiny Hover Racer" "Looping x8 Left" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop2.mdl" "SligWolf's Tiny Hover Racer" "Looping x8 Left" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop2i.mdl" "SligWolf's Tiny Hover Racer" "Looping x8 Right" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop2i.mdl" "SligWolf's Tiny Hover Racer" "Looping x8 Right" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop_quarter.mdl" "SligWolf's Tiny Hover Racer" "Quater Looping x8" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_loop_quarter.mdl" "SligWolf's Tiny Hover Racer" "Quater Looping x8" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_ramp.mdl" "SligWolf's Tiny Hover Racer" "Ramp x8" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_ramp.mdl" "SligWolf's Tiny Hover Racer" "Ramp x8" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_ramp_small.mdl" "SligWolf's Tiny Hover Racer" "Ramp x4" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_ramp_small.mdl" "SligWolf's Tiny Hover Racer" "Ramp x4" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x4_long.mdl" "SligWolf's Tiny Hover Racer" "Straight x4 L" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x4_long.mdl" "SligWolf's Tiny Hover Racer" "Straight x4 L" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x4_mid.mdl" "SligWolf's Tiny Hover Racer" "Straight x4 M" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x4_mid.mdl" "SligWolf's Tiny Hover Racer" "Straight x4 M" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x4_small.mdl" "SligWolf's Tiny Hover Racer" "Straight x4 S" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x4_small.mdl" "SligWolf's Tiny Hover Racer" "Straight x4 S" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_long.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 L" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_long.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 L" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_mid.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 M" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_mid.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 M" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_small.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 S" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_small.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 S" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_splitter.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 splitter" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_splitter.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 splitter" 2 "NULL" "!back_right" "!back_right" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_splitter.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 splitter" 3 "NULL" "!back_left" "!back_left" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_to_x4.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 to x4" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_straight_x8_to_x4.mdl" "SligWolf's Tiny Hover Racer" "Straight x8 to x4" 2 "NULL" "!back" "!back" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_trackend_x4.mdl" "SligWolf's Tiny Hover Racer" "Entrance x4" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/sligwolf/tinyhoverracer/hover_trackend_x8.mdl" "SligWolf's Tiny Hover Racer" "Entrance x8" 1 "NULL" "!front" "!front" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot16x16.mdl" "StevenTechno's Buildings 1.0" "Lot 16x16" 1 "NULL" "-268, 575, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot16x16.mdl" "StevenTechno's Buildings 1.0" "Lot 16x16" 2 "NULL" "-268, -577.002, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot16x16fence.mdl" "StevenTechno's Buildings 1.0" "Lot 16x16fence" 1 "NULL" "-268, 575, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot16x16fence.mdl" "StevenTechno's Buildings 1.0" "Lot 16x16fence" 2 "NULL" "-268, -577.002, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot32x32.mdl" "StevenTechno's Buildings 1.0" "Lot 32x32" 1 "NULL" "-268, 1152.002, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot32x32.mdl" "StevenTechno's Buildings 1.0" "Lot 32x32" 2 "NULL" "-267.999, -1151.292, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot32x32fence.mdl" "StevenTechno's Buildings 1.0" "Lot 32x32fence" 1 "NULL" "-268, 1152.002, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot32x32fence.mdl" "StevenTechno's Buildings 1.0" "Lot 32x32fence" 2 "NULL" "-267.999, -1151.292, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot8x8.mdl" "StevenTechno's Buildings 1.0" "Lot 8x8" 1 "NULL" "-268, 288, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot8x8.mdl" "StevenTechno's Buildings 1.0" "Lot 8x8" 2 "NULL" "-268, -287.996, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot8x8fence.mdl" "StevenTechno's Buildings 1.0" "Lot 8x8fence" 1 "NULL" "-268, 288, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/emptylots/lot8x8fence.mdl" "StevenTechno's Buildings 1.0" "Lot 8x8fence" 2 "NULL" "-268, -287.996, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/housing/3_0apartments_0.mdl" "StevenTechno's Buildings 1.0" "Apartments 0" 1 "NULL" "-268, 612.001, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/housing/3_0apartments_0.mdl" "StevenTechno's Buildings 1.0" "Apartments 0" 2 "NULL" "-268, -612, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/housing/3_1apartments_1.mdl" "StevenTechno's Buildings 1.0" "Apartments 1" 1 "NULL" "-268, 1248, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/housing/3_1apartments_1.mdl" "StevenTechno's Buildings 1.0" "Apartments 1" 2 "NULL" "-268, -1200, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/housing/3_3apartments_3.mdl" "StevenTechno's Buildings 1.0" "Apartments 3" 1 "NULL" "-268.008, 574.913, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/housing/3_3apartments_3.mdl" "StevenTechno's Buildings 1.0" "Apartments 3" 2 "NULL" "-268, -577, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_2skyscraper1.mdl" "StevenTechno's Buildings 1.0" "Skyscraper1" 1 "NULL" "0, -916, 3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_2skyscraper1.mdl" "StevenTechno's Buildings 1.0" "Skyscraper1" 2 "NULL" "0, 916, 3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_2skyscraper1.mdl" "StevenTechno's Buildings 1.0" "Skyscraper1" 3 "NULL" "-340, 1256, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_2skyscraper1.mdl" "StevenTechno's Buildings 1.0" "Skyscraper1" 4 "NULL" "-2172, 1256, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_2skyscraper1.mdl" "StevenTechno's Buildings 1.0" "Skyscraper1" 5 "NULL" "-2512, 916, 3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_2skyscraper1.mdl" "StevenTechno's Buildings 1.0" "Skyscraper1" 6 "NULL" "-2512, -916, 3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_2skyscraper1.mdl" "StevenTechno's Buildings 1.0" "Skyscraper1" 7 "NULL" "-2172, -1256, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_2skyscraper1.mdl" "StevenTechno's Buildings 1.0" "Skyscraper1" 8 "NULL" "-340, -1256, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_3skyscraper2.mdl" "StevenTechno's Buildings 1.0" "Skyscraper2" 1 "NULL" "0, -916, 3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_3skyscraper2.mdl" "StevenTechno's Buildings 1.0" "Skyscraper2" 2 "NULL" "0, 916, 3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_3skyscraper2.mdl" "StevenTechno's Buildings 1.0" "Skyscraper2" 3 "NULL" "-340, 1256, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_3skyscraper2.mdl" "StevenTechno's Buildings 1.0" "Skyscraper2" 4 "NULL" "-2172, 1256, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_3skyscraper2.mdl" "StevenTechno's Buildings 1.0" "Skyscraper2" 5 "NULL" "-2512, 916, 3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_3skyscraper2.mdl" "StevenTechno's Buildings 1.0" "Skyscraper2" 6 "NULL" "-2512, -916, 3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_3skyscraper2.mdl" "StevenTechno's Buildings 1.0" "Skyscraper2" 7 "NULL" "-2172, -1256, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_3skyscraper2.mdl" "StevenTechno's Buildings 1.0" "Skyscraper2" 8 "NULL" "-340, -1256, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_4skyscraper3.mdl" "StevenTechno's Buildings 1.0" "Skyscraper3" 1 "NULL" "0, -1492, 3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_4skyscraper3.mdl" "StevenTechno's Buildings 1.0" "Skyscraper3" 2 "NULL" "0, 1492, 3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_4skyscraper3.mdl" "StevenTechno's Buildings 1.0" "Skyscraper3" 3 "NULL" "-340, 1832, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_4skyscraper3.mdl" "StevenTechno's Buildings 1.0" "Skyscraper3" 4 "NULL" "-2172, 1832, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_4skyscraper3.mdl" "StevenTechno's Buildings 1.0" "Skyscraper3" 5 "NULL" "-2512, 1492, 3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_4skyscraper3.mdl" "StevenTechno's Buildings 1.0" "Skyscraper3" 6 "NULL" "-2512, -1492, 3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_4skyscraper3.mdl" "StevenTechno's Buildings 1.0" "Skyscraper3" 7 "NULL" "-2172, -1832, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/misc/6_4skyscraper3.mdl" "StevenTechno's Buildings 1.0" "Skyscraper3" 8 "NULL" "-340, -1832, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/recreational/5_1club_lgbt.mdl" "StevenTechno's Buildings 1.0" "Club Lgbt" 1 "NULL" "-268, 720, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/recreational/5_1club_lgbt.mdl" "StevenTechno's Buildings 1.0" "Club Lgbt" 2 "NULL" "-268, -720, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/recreational/5_2stripclub.mdl" "StevenTechno's Buildings 1.0" "Stripclub" 1 "NULL" "-268, 736, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/recreational/5_2stripclub.mdl" "StevenTechno's Buildings 1.0" "Stripclub" 2 "NULL" "-268, -736, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy1x1.mdl" "StevenTechno's Buildings 1.0" "Road 1x1" 1 "NULL" "0,0,316.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy1x1.mdl" "StevenTechno's Buildings 1.0" "Road 1x1" 2 "NULL" "-72,0,316.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 1" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 1" 2 "NULL" "-1632,1152,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 1" 3 "NULL" "-2304,1152,315.031616" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 1" 4 "NULL" "-2976,1152,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 1" 5 "NULL" "-2976.007,-1151.975,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 1" 6 "NULL" "-2304,-1152,315.031616" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 1" 7 "NULL" "-1632,-1152,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 1" 8 "NULL" "-4608,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_10roadsdwhwybridge1x16.mdl" "StevenTechno's Buildings 1.0" "Road Bridge1x16" 1 "NULL" "0,0,60.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_10roadsdwhwybridge1x16.mdl" "StevenTechno's Buildings 1.0" "Road Bridge1x16" 2 "NULL" "-1152,0,60.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_11roadsdwhwybridge1x32.mdl" "StevenTechno's Buildings 1.0" "Road Bridge1x32" 1 "NULL" "0,0,60.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_11roadsdwhwybridge1x32.mdl" "StevenTechno's Buildings 1.0" "Road Bridge1x32" 2 "NULL" "-2304,0,60.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_12roadsdwhwybridge1x64.mdl" "StevenTechno's Buildings 1.0" "Road Bridge1x64" 1 "NULL" "0,0,60.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_12roadsdwhwybridge1x64.mdl" "StevenTechno's Buildings 1.0" "Road Bridge1x64" 2 "NULL" "-4608,0,60.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 2" 1 "NULL" "0,-671.994,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 2" 2 "NULL" "0,0,315.031616" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 2" 3 "NULL" "0,671.995,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl" "StevenTechno's Buildings 1.0" "Road Ramp 2" 4 "NULL" "-4608,0,315.031616" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl" "StevenTechno's Buildings 1.0" "Road Ramp Stop" 1 "NULL" "0,-671.994,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl" "StevenTechno's Buildings 1.0" "Road Ramp Stop" 2 "NULL" "0,0,315.031616" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl" "StevenTechno's Buildings 1.0" "Road Ramp Stop" 3 "NULL" "0,671.995,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl" "StevenTechno's Buildings 1.0" "Road Ramp Stop" 4 "NULL" "-4160,0,15.202" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_2roadsdwhwy1x4.mdl" "StevenTechno's Buildings 1.0" "Road 1x4" 1 "NULL" "0,0,316.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_2roadsdwhwy1x4.mdl" "StevenTechno's Buildings 1.0" "Road 1x4" 2 "NULL" "-288,0,316.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_3roadsdwhwy1x8.mdl" "StevenTechno's Buildings 1.0" "Road 1x8" 1 "NULL" "0,0,316.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_3roadsdwhwy1x8.mdl" "StevenTechno's Buildings 1.0" "Road 1x8" 2 "NULL" "-576,0,316.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_4roadsdwhwy1x16.mdl" "StevenTechno's Buildings 1.0" "Road 1x16" 1 "NULL" "0,0,316.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_4roadsdwhwy1x16.mdl" "StevenTechno's Buildings 1.0" "Road 1x16" 2 "NULL" "-1152,0,316.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_5roadsdwhwy1x32.mdl" "StevenTechno's Buildings 1.0" "Road 1x32" 1 "NULL" "0,0,316.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_5roadsdwhwy1x32.mdl" "StevenTechno's Buildings 1.0" "Road 1x32" 2 "NULL" "-2304,0,316.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_6roadsdwhwy1x64.mdl" "StevenTechno's Buildings 1.0" "Road 1x64" 1 "NULL" "0,0,316.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_6roadsdwhwy1x64.mdl" "StevenTechno's Buildings 1.0" "Road 1x64" 2 "NULL" "-4608,0,316.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_7roadsdwhwy_turn1.mdl" "StevenTechno's Buildings 1.0" "Road Turn" 1 "NULL" "0,0,316.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_7roadsdwhwy_turn1.mdl" "StevenTechno's Buildings 1.0" "Road Turn" 2 "NULL" "-1692,1692,316.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_8roadsdwhwybridge1x4.mdl" "StevenTechno's Buildings 1.0" "Road Bridge 1x4" 1 "NULL" "0,0,60.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_8roadsdwhwybridge1x4.mdl" "StevenTechno's Buildings 1.0" "Road Bridge 1x4" 2 "NULL" "-288,0,60.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_9roadsdwhwybridge1x8.mdl" "StevenTechno's Buildings 1.0" "Road Bridge 1x8" 1 "NULL" "0,0,60.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwhighway/1_9roadsdwhwybridge1x8.mdl" "StevenTechno's Buildings 1.0" "Road Bridge 1x8" 2 "NULL" "-576,0,60.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_0roadsdwsidewalktransfer.mdl" "StevenTechno's Buildings 1.0" "Roadsdwsidewalktransfer" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_0roadsdwsidewalktransfer.mdl" "StevenTechno's Buildings 1.0" "Roadsdwsidewalktransfer" 2 "NULL" "-376,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_10roadsdwsidewalk1x32.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x32" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_10roadsdwsidewalk1x32.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x32" 2 "NULL" "-2304,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 4way" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 4way" 2 "NULL" "-540,540,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 4way" 3 "NULL" "-1080,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 4way" 4 "NULL" "-540,-540,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 3way" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 3way" 2 "NULL" "-540,540,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 3way" 3 "NULL" "-540,-540,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_13roadsdwsidewalk_int_2way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 2way" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_13roadsdwsidewalk_int_2way.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Int 2way" 2 "NULL" "-540,540,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_14roadsdwsidewalk_turn_1.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Turn 1" 1 "NULL" "0,-4,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_14roadsdwsidewalk_turn_1.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Turn 1" 2 "NULL" "-540,-544,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_15roadsdwsidewalk_turn_2.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Turn 2" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_15roadsdwsidewalk_turn_2.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk Turn 2" 2 "NULL" "-1692,1692,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_1roadsdwsidewalk1x1.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x1" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_1roadsdwsidewalk1x1.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x1" 2 "NULL" "-72,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_2roadsdwsidewalk1x2.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x2" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_2roadsdwsidewalk1x2.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x2" 2 "NULL" "-144,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_3roadsdwsidewalk1x3.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x3" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_3roadsdwsidewalk1x3.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x3" 2 "NULL" "-216,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_4roadsdwsidewalk1x4.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x4" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_4roadsdwsidewalk1x4.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x4" 2 "NULL" "-288,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_5roadsdwsidewalk1x5.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x5" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_5roadsdwsidewalk1x5.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x5" 2 "NULL" "-360,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_6roadsdwsidewalk1x6.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x6" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_6roadsdwsidewalk1x6.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x6" 2 "NULL" "-432,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_7roadsdwsidewalk1x7.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x7" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_7roadsdwsidewalk1x7.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x7" 2 "NULL" "-504,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_8roadsdwsidewalk1x8.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x8" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_8roadsdwsidewalk1x8.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x8" 2 "NULL" "-576,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_9roadsdwsidewalk1x16.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x16" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadsdwsidewalk/0_9roadsdwsidewalk1x16.mdl" "StevenTechno's Buildings 1.0" "Road Sidewalk 1x16" 2 "NULL" "-1152,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_10road_dl_sdw_1x32.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x32" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_10road_dl_sdw_1x32.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x32" 2 "NULL" "-2304,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 4w" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 4w" 2 "NULL" "-340,340,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 4w" 3 "NULL" "-680,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 4w" 4 "NULL" "-340,-340,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 3w" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 3w" 2 "NULL" "-340,340,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 3w" 3 "NULL" "-340,-340,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_13road_intersection_2w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 2w" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_13road_intersection_2w.mdl" "StevenTechno's Buildings 1.0" "Road Intersect 2w" 2 "NULL" "-340,-340,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_14road_intersection_deadend.mdl" "StevenTechno's Buildings 1.0" "Road Intersect Deadend" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_15road_intersection_turn1.mdl" "StevenTechno's Buildings 1.0" "Road Intersect Turn1" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_15road_intersection_turn1.mdl" "StevenTechno's Buildings 1.0" "Road Intersect Turn1" 2 "NULL" "-340,-340,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_16road_intersection_turn2_16.mdl" "StevenTechno's Buildings 1.0" "Road Intersect Turn" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_16road_intersection_turn2_16.mdl" "StevenTechno's Buildings 1.0" "Road Intersect Turn" 2 "NULL" "-1564,1564,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_1road_dl_sdw_1x1.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x1" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_1road_dl_sdw_1x1.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x1" 2 "NULL" "-72,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_2road_dl_sdw_1x2.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x2" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_2road_dl_sdw_1x2.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x2" 2 "NULL" "-144,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_3road_dl_sdw_1x3.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x3" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_3road_dl_sdw_1x3.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x3" 2 "NULL" "-216,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_4road_dl_sdw_1x4.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x4" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_4road_dl_sdw_1x4.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x4" 2 "NULL" "-288,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_5road_dl_sdw_1x5.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x5" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/roadswsidewalk/2_5road_dl_sdw_1x5.mdl" "StevenTechno's Buildings 1.0" "Road Dl Sdw 1x5" 2 "NULL" "-360,0,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/schultz/stores/4_0office.mdl" "StevenTechno's Buildings 1.0" "Office" 1 "NULL" "-267.986, 616.053, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/schultz/stores/4_0office.mdl" "StevenTechno's Buildings 1.0" "Office" 2 "NULL" "-268, -608, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/schultz/stores/4_1garage.mdl" "StevenTechno's Buildings 1.0" "Garage" 1 "NULL" "-268, 698, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/schultz/stores/4_1garage.mdl" "StevenTechno's Buildings 1.0" "Garage" 2 "NULL" "-268, -598, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_1gas_station_a.mdl" "StevenTechno's Buildings 1.0" "Gas Station A" 1 "NULL" "-268, 604, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_1gas_station_a.mdl" "StevenTechno's Buildings 1.0" "Gas Station A" 2 "NULL" "-268, -620, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_1gas_station_b.mdl" "StevenTechno's Buildings 1.0" "Gas Station B" 1 "NULL" "-268, 612, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_1gas_station_b.mdl" "StevenTechno's Buildings 1.0" "Gas Station B" 2 "NULL" "-268, -612, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_2pcshop.mdl" "StevenTechno's Buildings 1.0" "Pcshop" 1 "NULL" "-268, 432, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_2pcshop.mdl" "StevenTechno's Buildings 1.0" "Pcshop" 2 "NULL" "-268, -432, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_3gunshop.mdl" "StevenTechno's Buildings 1.0" "Gunshop" 1 "NULL" "-268, 504.001, 3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_3gunshop.mdl" "StevenTechno's Buildings 1.0" "Gunshop" 2 "NULL" "-268, -504, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_4bank.mdl" "StevenTechno's Buildings 1.0" "Bank" 1 "NULL" "-268, 504, 2.031232" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack/stores/4_4bank.mdl" "StevenTechno's Buildings 1.0" "Bank" 2 "NULL" "-268, -504, 2.031232" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-0_empty_lot_x8.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X8" 1 "NULL" "-268, 288,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-0_empty_lot_x8.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X8" 2 "NULL" "-268,-288,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-1_empty_lot_x16.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X16" 1 "NULL" "-268, 576,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-1_empty_lot_x16.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X16" 2 "NULL" "-268,-576,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-2_empty_lot_x32.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X32" 1 "NULL" "-268, 1152,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-2_empty_lot_x32.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X32" 2 "NULL" "-268,-1152,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-3_empty_lot_x64.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X64" 1 "NULL" "-268, 2304,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-3_empty_lot_x64.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X64" 2 "NULL" "-268,-2304,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-4_empty_lot_x128.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X128" 1 "NULL" "-268, 4608,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-4_empty_lot_x128.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X128" 2 "NULL" "-268,-4608,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-5_empty_lot_8x4.mdl" "StevenTechno's Buildings 2.0" "Empty Lot 8x4" 1 "NULL" "-268, 288,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-5_empty_lot_8x4.mdl" "StevenTechno's Buildings 2.0" "Empty Lot 8x4" 2 "NULL" "-268,-288,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-6_empty_lot_x16x8.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X16x8" 1 "NULL" "-268, 576,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-6_empty_lot_x16x8.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X16x8" 2 "NULL" "-268,-576,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-7_empty_lot_x32x16.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X32x16" 1 "NULL" "-268, 1152,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-7_empty_lot_x32x16.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X32x16" 2 "NULL" "-268,-1152,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-8_empty_lot_x64x32.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X64x32" 1 "NULL" "-268, 2304,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-8_empty_lot_x64x32.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X64x32" 2 "NULL" "-268,-2304,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-9_empty_lot_x128x64.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X128x64" 1 "NULL" "-268, 4608,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/emptylots/0-9_empty_lot_x128x64.mdl" "StevenTechno's Buildings 2.0" "Empty Lot X128x64" 2 "NULL" "-268,-4608,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-0_apartments.mdl" "StevenTechno's Buildings 2.0" "Apartments" 1 "NULL" "-268, 616,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-0_apartments.mdl" "StevenTechno's Buildings 2.0" "Apartments" 2 "NULL" "-268,-608,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-0_apartments_nodoors.mdl" "StevenTechno's Buildings 2.0" "Apartments Nodoors" 1 "NULL" "-268, 616,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-0_apartments_nodoors.mdl" "StevenTechno's Buildings 2.0" "Apartments Nodoors" 2 "NULL" "-268,-608,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-1_apartments.mdl" "StevenTechno's Buildings 2.0" "Apartments" 1 "NULL" "-268, 1072,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-1_apartments.mdl" "StevenTechno's Buildings 2.0" "Apartments" 2 "NULL" "-268,-1016,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-1_apartments_nodoors.mdl" "StevenTechno's Buildings 2.0" "Apartments Nodoors" 1 "NULL" "-268, 1072,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-1_apartments_nodoors.mdl" "StevenTechno's Buildings 2.0" "Apartments Nodoors" 2 "NULL" "-268,-1016,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-2_apartments.mdl" "StevenTechno's Buildings 2.0" "Apartments" 1 "NULL" "-268, 576,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-2_apartments.mdl" "StevenTechno's Buildings 2.0" "Apartments" 2 "NULL" "-268,-576,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-2_apartments_nodoors.mdl" "StevenTechno's Buildings 2.0" "Apartments Nodoors" 1 "NULL" "-268, 576,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-2_apartments_nodoors.mdl" "StevenTechno's Buildings 2.0" "Apartments Nodoors" 2 "NULL" "-268,-576,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-3_apartments.mdl" "StevenTechno's Buildings 2.0" "Apartments" 1 "NULL" "-268, 900,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-3_apartments.mdl" "StevenTechno's Buildings 2.0" "Apartments" 2 "NULL" "-268,-900,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-3_apartments_nodoors.mdl" "StevenTechno's Buildings 2.0" "Apartments Nodoors" 1 "NULL" "-268, 900,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/housing/1-3_apartments_nodoors.mdl" "StevenTechno's Buildings 2.0" "Apartments Nodoors" 2 "NULL" "-268,-900,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-0_car_garage.mdl" "StevenTechno's Buildings 2.0" "Car Garage" 1 "NULL" "-268, 936,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-0_car_garage.mdl" "StevenTechno's Buildings 2.0" "Car Garage" 2 "NULL" "-268,-936,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-0_car_garage_nodoors.mdl" "StevenTechno's Buildings 2.0" "Car Garage Nodoors" 1 "NULL" "-268, 936,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-0_car_garage_nodoors.mdl" "StevenTechno's Buildings 2.0" "Car Garage Nodoors" 2 "NULL" "-268,-936,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-1_office_building.mdl" "StevenTechno's Buildings 2.0" "Office Building" 1 "NULL" "-268, 1224,4.0625" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-1_office_building.mdl" "StevenTechno's Buildings 2.0" "Office Building" 2 "NULL" "-268,-1224,4.0625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-1_office_building_nodoors.mdl" "StevenTechno's Buildings 2.0" "Office Building Nodoors" 1 "NULL" "-268, 1224,4.0625" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-1_office_building_nodoors.mdl" "StevenTechno's Buildings 2.0" "Office Building Nodoors" 2 "NULL" "-268,-1224,4.0625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-2_lgbt_club_a.mdl" "StevenTechno's Buildings 2.0" "Lgbt Club A" 1 "NULL" "-268, 936,4.0625" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-2_lgbt_club_a.mdl" "StevenTechno's Buildings 2.0" "Lgbt Club A" 2 "NULL" "-268,-936,4.0625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-2_lgbt_club_a_nodoors.mdl" "StevenTechno's Buildings 2.0" "Lgbt Club A Nodoors" 1 "NULL" "-268, 936,4.0625" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-2_lgbt_club_a_nodoors.mdl" "StevenTechno's Buildings 2.0" "Lgbt Club A Nodoors" 2 "NULL" "-268,-936,4.0625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-3_strip_club_a.mdl" "StevenTechno's Buildings 2.0" "Strip Club A" 1 "NULL" "-268, 1080,1.0625" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-3_strip_club_a.mdl" "StevenTechno's Buildings 2.0" "Strip Club A" 2 "NULL" "-268,-1080,1.0625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-3_strip_club_a_nodoors.mdl" "StevenTechno's Buildings 2.0" "Strip Club A Nodoors" 1 "NULL" "-268, 1080,1.0625" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-3_strip_club_a_nodoors.mdl" "StevenTechno's Buildings 2.0" "Strip Club A Nodoors" 2 "NULL" "-268,-1080,1.0625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-4_gas_stop.mdl" "StevenTechno's Buildings 2.0" "Gas Stop" 1 "NULL" "-268, 792,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-4_gas_stop.mdl" "StevenTechno's Buildings 2.0" "Gas Stop" 2 "NULL" "-268,-792,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-4_gas_stop_nodoors.mdl" "StevenTechno's Buildings 2.0" "Gas Stop Nodoors" 1 "NULL" "-268, 792,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-4_gas_stop_nodoors.mdl" "StevenTechno's Buildings 2.0" "Gas Stop Nodoors" 2 "NULL" "-268,-792,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-5_pc_shop.mdl" "StevenTechno's Buildings 2.0" "Pc Shop" 1 "NULL" "-268, 576,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-5_pc_shop.mdl" "StevenTechno's Buildings 2.0" "Pc Shop" 2 "NULL" "-268,-576,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-5_pc_shop_nodoors.mdl" "StevenTechno's Buildings 2.0" "Pc Shop Nodoors" 1 "NULL" "-268, 576,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-5_pc_shop_nodoors.mdl" "StevenTechno's Buildings 2.0" "Pc Shop Nodoors" 2 "NULL" "-268,-576,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-6_gun_shop.mdl" "StevenTechno's Buildings 2.0" "Gun Shop" 1 "NULL" "-268, 684,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-6_gun_shop.mdl" "StevenTechno's Buildings 2.0" "Gun Shop" 2 "NULL" "-268,-684,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-6_gun_shop_nodoors.mdl" "StevenTechno's Buildings 2.0" "Gun Shop Nodoors" 1 "NULL" "-268, 684,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-6_gun_shop_nodoors.mdl" "StevenTechno's Buildings 2.0" "Gun Shop Nodoors" 2 "NULL" "-268,-684,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-7_bank.mdl" "StevenTechno's Buildings 2.0" "Bank" 1 "NULL" "-268, 792,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-7_bank.mdl" "StevenTechno's Buildings 2.0" "Bank" 2 "NULL" "-268,-792,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-7_bank_nodoors.mdl" "StevenTechno's Buildings 2.0" "Bank Nodoors" 1 "NULL" "-268, 792,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-7_bank_nodoors.mdl" "StevenTechno's Buildings 2.0" "Bank Nodoors" 2 "NULL" "-268,-792,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-8_parking_garage.mdl" "StevenTechno's Buildings 2.0" "Parking Garage" 1 "NULL" "-268, 784,3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-8_parking_garage.mdl" "StevenTechno's Buildings 2.0" "Parking Garage" 2 "NULL" "-268,-800,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-9_school_house.mdl" "StevenTechno's Buildings 2.0" "School House" 1 "NULL" "-268, 1328,1.0625" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-9_school_house.mdl" "StevenTechno's Buildings 2.0" "School House" 2 "NULL" "-268,-1336,1.0625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-9_school_house_nodoors.mdl" "StevenTechno's Buildings 2.0" "School House Nodoors" 1 "NULL" "-268, 1328,1.0625" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/public/2-9_school_house_nodoors.mdl" "StevenTechno's Buildings 2.0" "School House Nodoors" 2 "NULL" "-268,-1336,1.0625" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-0_skyscraper_a.mdl" "StevenTechno's Buildings 2.0" "Skyscraper A" 1 "NULL" "0,860,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-0_skyscraper_a.mdl" "StevenTechno's Buildings 2.0" "Skyscraper A" 2 "NULL" "-428,1288,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-0_skyscraper_a.mdl" "StevenTechno's Buildings 2.0" "Skyscraper A" 3 "NULL" "-2148,1288,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-0_skyscraper_a.mdl" "StevenTechno's Buildings 2.0" "Skyscraper A" 4 "NULL" "-2576,860,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-0_skyscraper_a.mdl" "StevenTechno's Buildings 2.0" "Skyscraper A" 5 "NULL" "-2576,-860,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-0_skyscraper_a.mdl" "StevenTechno's Buildings 2.0" "Skyscraper A" 6 "NULL" "-2148,-1288,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-0_skyscraper_a.mdl" "StevenTechno's Buildings 2.0" "Skyscraper A" 7 "NULL" "-428,-1288,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-0_skyscraper_a.mdl" "StevenTechno's Buildings 2.0" "Skyscraper A" 8 "NULL" "0,-860,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-1_skyscraper_b.mdl" "StevenTechno's Buildings 2.0" "Skyscraper B" 1 "NULL" "0,860,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-1_skyscraper_b.mdl" "StevenTechno's Buildings 2.0" "Skyscraper B" 2 "NULL" "-428,1288,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-1_skyscraper_b.mdl" "StevenTechno's Buildings 2.0" "Skyscraper B" 3 "NULL" "-2148,1288,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-1_skyscraper_b.mdl" "StevenTechno's Buildings 2.0" "Skyscraper B" 4 "NULL" "-2576,860,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-1_skyscraper_b.mdl" "StevenTechno's Buildings 2.0" "Skyscraper B" 5 "NULL" "-2576,-860,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-1_skyscraper_b.mdl" "StevenTechno's Buildings 2.0" "Skyscraper B" 6 "NULL" "-2148,-1288,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-1_skyscraper_b.mdl" "StevenTechno's Buildings 2.0" "Skyscraper B" 7 "NULL" "-428,-1288,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-1_skyscraper_b.mdl" "StevenTechno's Buildings 2.0" "Skyscraper B" 8 "NULL" "0,-860,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-2_skyscraper_c.mdl" "StevenTechno's Buildings 2.0" "Skyscraper C" 1 "NULL" "76,1584,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-2_skyscraper_c.mdl" "StevenTechno's Buildings 2.0" "Skyscraper C" 2 "NULL" "-356,2016,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-2_skyscraper_c.mdl" "StevenTechno's Buildings 2.0" "Skyscraper C" 3 "NULL" "-2516,2016,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-2_skyscraper_c.mdl" "StevenTechno's Buildings 2.0" "Skyscraper C" 4 "NULL" "-2948,1584,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-2_skyscraper_c.mdl" "StevenTechno's Buildings 2.0" "Skyscraper C" 5 "NULL" "-2948,-1584,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-2_skyscraper_c.mdl" "StevenTechno's Buildings 2.0" "Skyscraper C" 6 "NULL" "-2516,-2016,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-2_skyscraper_c.mdl" "StevenTechno's Buildings 2.0" "Skyscraper C" 7 "NULL" "-356,-2016,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-2_skyscraper_c.mdl" "StevenTechno's Buildings 2.0" "Skyscraper C" 8 "NULL" "76,-1584,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-3_skyscraper_d.mdl" "StevenTechno's Buildings 2.0" "Skyscraper D" 1 "NULL" "-1,1008,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-3_skyscraper_d.mdl" "StevenTechno's Buildings 2.0" "Skyscraper D" 2 "NULL" "-433,1440,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-3_skyscraper_d.mdl" "StevenTechno's Buildings 2.0" "Skyscraper D" 3 "NULL" "-2449,1440,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-3_skyscraper_d.mdl" "StevenTechno's Buildings 2.0" "Skyscraper D" 4 "NULL" "-2881,1008,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-3_skyscraper_d.mdl" "StevenTechno's Buildings 2.0" "Skyscraper D" 5 "NULL" "-2881,-1008,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-3_skyscraper_d.mdl" "StevenTechno's Buildings 2.0" "Skyscraper D" 6 "NULL" "-2449,-1440,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-3_skyscraper_d.mdl" "StevenTechno's Buildings 2.0" "Skyscraper D" 7 "NULL" "-433,-1440,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-3_skyscraper_d.mdl" "StevenTechno's Buildings 2.0" "Skyscraper D" 8 "NULL" "-1,-1008,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-4_skyscraper_e.mdl" "StevenTechno's Buildings 2.0" "Skyscraper E" 1 "NULL" "-1,1008,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-4_skyscraper_e.mdl" "StevenTechno's Buildings 2.0" "Skyscraper E" 2 "NULL" "-433,1440,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-4_skyscraper_e.mdl" "StevenTechno's Buildings 2.0" "Skyscraper E" 3 "NULL" "-2449,1440,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-4_skyscraper_e.mdl" "StevenTechno's Buildings 2.0" "Skyscraper E" 4 "NULL" "-2881,1008,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-4_skyscraper_e.mdl" "StevenTechno's Buildings 2.0" "Skyscraper E" 5 "NULL" "-2881,-1008,3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-4_skyscraper_e.mdl" "StevenTechno's Buildings 2.0" "Skyscraper E" 6 "NULL" "-2449,-1440,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-4_skyscraper_e.mdl" "StevenTechno's Buildings 2.0" "Skyscraper E" 7 "NULL" "-433,-1440,3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/buildingspack2/skyscraper/3-4_skyscraper_e.mdl" "StevenTechno's Buildings 2.0" "Skyscraper E" 8 "NULL" "-1,-1008,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/connectors/2-0_single_to_double_connector.mdl" "StevenTechno's Buildings 2.0" "Single To Double Connector" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/connectors/2-0_single_to_double_connector.mdl" "StevenTechno's Buildings 2.0" "Single To Double Connector" 2 "NULL" "-576,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-0_double_lane_x1.mdl" "StevenTechno's Buildings 2.0" "Double Lane X1" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-0_double_lane_x1.mdl" "StevenTechno's Buildings 2.0" "Double Lane X1" 2 "NULL" "-72,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-1_double_lane_x2.mdl" "StevenTechno's Buildings 2.0" "Double Lane X2" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-1_double_lane_x2.mdl" "StevenTechno's Buildings 2.0" "Double Lane X2" 2 "NULL" "-144,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-2_double_lane_x4.mdl" "StevenTechno's Buildings 2.0" "Double Lane X4" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-2_double_lane_x4.mdl" "StevenTechno's Buildings 2.0" "Double Lane X4" 2 "NULL" "-288,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-3_double_lane_x8.mdl" "StevenTechno's Buildings 2.0" "Double Lane X8" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-3_double_lane_x8.mdl" "StevenTechno's Buildings 2.0" "Double Lane X8" 2 "NULL" "-576,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-4_double_lane_x16.mdl" "StevenTechno's Buildings 2.0" "Double Lane X16" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-4_double_lane_x16.mdl" "StevenTechno's Buildings 2.0" "Double Lane X16" 2 "NULL" "-1152,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-5_double_lane_x32.mdl" "StevenTechno's Buildings 2.0" "Double Lane X32" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-5_double_lane_x32.mdl" "StevenTechno's Buildings 2.0" "Double Lane X32" 2 "NULL" "-2304,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-6_double_lane_x64.mdl" "StevenTechno's Buildings 2.0" "Double Lane X64" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-6_double_lane_x64.mdl" "StevenTechno's Buildings 2.0" "Double Lane X64" 2 "NULL" "-4608,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-7_double_lane_x128.mdl" "StevenTechno's Buildings 2.0" "Double Lane X128" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_lane/1-7_double_lane_x128.mdl" "StevenTechno's Buildings 2.0" "Double Lane X128" 2 "NULL" "-9216,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-0_intersect_double_lane_a.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane A" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-0_intersect_double_lane_a.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane A" 2 "NULL" "-628 , 628, 3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-0_intersect_double_lane_a.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane A" 3 "NULL" "-1256, 0, 3.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-0_intersect_double_lane_a.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane A" 4 "NULL" "-628 ,-628, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-1_intersect_double_lane_b.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane B" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-1_intersect_double_lane_b.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane B" 2 "NULL" "-628 , 628, 3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-1_intersect_double_lane_b.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane B" 3 "NULL" "-628 ,-628, 3.03125" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-2_intersect_double_lane_c.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane C" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-2_intersect_double_lane_c.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane C" 2 "NULL" "-628 , 628, 3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-3_intersect_double_lane_d.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane D" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-3_intersect_double_lane_d.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane D" 2 "NULL" "-628,-628, 3.03125" "0, -90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-4_intersect_double_lane_e.mdl" "StevenTechno's Buildings 2.0" "Intersect Double Lane E" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-5_turn_double_lane_a.mdl" "StevenTechno's Buildings 2.0" "Turn Double Lane A" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-5_turn_double_lane_a.mdl" "StevenTechno's Buildings 2.0" "Turn Double Lane A" 2 "NULL" "-628,628,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-6_turn_double_lane_b.mdl" "StevenTechno's Buildings 2.0" "Turn Double Lane B" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-6_turn_double_lane_b.mdl" "StevenTechno's Buildings 2.0" "Turn Double Lane B" 2 "NULL" "-2860,2860,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-7_turn_double_lane_c.mdl" "StevenTechno's Buildings 2.0" "Turn Double Lane C" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/double_turns/4-7_turn_double_lane_c.mdl" "StevenTechno's Buildings 2.0" "Turn Double Lane C" 2 "NULL" "-5164,5164,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-0_highway_entrance_type_a_a.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type A A" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-0_highway_entrance_type_a_a.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type A A" 2 "NULL" "-2716, 556, 3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-0_highway_entrance_type_a_a.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type A A" 3 "NULL" "-5432,0,3.03125" "0, 180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-0_highway_entrance_type_a_a.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type A A" 4 "NULL" "-2716,-556, 3.03125" "0, -90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-10_highway_x64.mdl" "StevenTechno's Buildings 2.0" "Highway X64" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-10_highway_x64.mdl" "StevenTechno's Buildings 2.0" "Highway X64" 2 "NULL" "-4608,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-11_highway_x128.mdl" "StevenTechno's Buildings 2.0" "Highway X128" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-11_highway_x128.mdl" "StevenTechno's Buildings 2.0" "Highway X128" 2 "NULL" "-9216,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-1_highway_entrance_type_a_b.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type A B" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-1_highway_entrance_type_a_b.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type A B" 2 "NULL" "-2580, 0, 3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-2_highway_entrance_type_b_a.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type B A" 1 "NULL" "0,-4,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-2_highway_entrance_type_b_a.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type B A" 2 "NULL" "-2304, 1148, 315.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-2_highway_entrance_type_b_a.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type B A" 3 "NULL" "-4608,-4,3.03125" "0, 180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-2_highway_entrance_type_b_a.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type B A" 4 "NULL" "-2304,-1156, 315.03125" "0, -90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-3_highway_entrance_type_b_b.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type B B" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-3_highway_entrance_type_b_b.mdl" "StevenTechno's Buildings 2.0" "Highway Entrance Type B B" 2 "NULL" "-2736, 0, 315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-4_highway_blank_x1.mdl" "StevenTechno's Buildings 2.0" "Highway Blank X1" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-4_highway_blank_x1.mdl" "StevenTechno's Buildings 2.0" "Highway Blank X1" 2 "NULL" "-72,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-4_highway_dash_x1.mdl" "StevenTechno's Buildings 2.0" "Highway Dash X1" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-4_highway_dash_x1.mdl" "StevenTechno's Buildings 2.0" "Highway Dash X1" 2 "NULL" "-72,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-5_highway_x2.mdl" "StevenTechno's Buildings 2.0" "Highway X2" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-5_highway_x2.mdl" "StevenTechno's Buildings 2.0" "Highway X2" 2 "NULL" "-144,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-6_highway_x4.mdl" "StevenTechno's Buildings 2.0" "Highway X4" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-6_highway_x4.mdl" "StevenTechno's Buildings 2.0" "Highway X4" 2 "NULL" "-288,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-7_highway_x8.mdl" "StevenTechno's Buildings 2.0" "Highway X8" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-7_highway_x8.mdl" "StevenTechno's Buildings 2.0" "Highway X8" 2 "NULL" "-576,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-8_highway_x16.mdl" "StevenTechno's Buildings 2.0" "Highway X16" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-8_highway_x16.mdl" "StevenTechno's Buildings 2.0" "Highway X16" 2 "NULL" "-1152,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-9_highway_x32.mdl" "StevenTechno's Buildings 2.0" "Highway X32" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway/5-9_highway_x32.mdl" "StevenTechno's Buildings 2.0" "Highway X32" 2 "NULL" "-2304,0,315.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-0_highway_blank_x1.mdl" "StevenTechno's Buildings 2.0" "Highway Blank X1" 1 "NULL" "0,0,91.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-0_highway_blank_x1.mdl" "StevenTechno's Buildings 2.0" "Highway Blank X1" 2 "NULL" "-72,0,91.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-0_highway_dash_x1.mdl" "StevenTechno's Buildings 2.0" "Highway Dash X1" 1 "NULL" "0,0,91.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-0_highway_dash_x1.mdl" "StevenTechno's Buildings 2.0" "Highway Dash X1" 2 "NULL" "-72,0,91.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-1_highway_x2.mdl" "StevenTechno's Buildings 2.0" "Highway X2" 1 "NULL" "0,0,91.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-1_highway_x2.mdl" "StevenTechno's Buildings 2.0" "Highway X2" 2 "NULL" "-144,0,91.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-2_highway_x8.mdl" "StevenTechno's Buildings 2.0" "Highway X8" 1 "NULL" "0,0,91.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-2_highway_x8.mdl" "StevenTechno's Buildings 2.0" "Highway X8" 2 "NULL" "-576,0,91.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-3_highway_x32.mdl" "StevenTechno's Buildings 2.0" "Highway X32" 1 "NULL" "0,0,91.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-3_highway_x32.mdl" "StevenTechno's Buildings 2.0" "Highway X32" 2 "NULL" "-2304,0,91.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-4_highway_x64.mdl" "StevenTechno's Buildings 2.0" "Highway X64" 1 "NULL" "0,0,91.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-4_highway_x64.mdl" "StevenTechno's Buildings 2.0" "Highway X64" 2 "NULL" "-4608,0,91.03125" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-5_highway_turn_a.mdl" "StevenTechno's Buildings 2.0" "Highway Turn A" 1 "NULL" "0,-82,90.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-5_highway_turn_a.mdl" "StevenTechno's Buildings 2.0" "Highway Turn A" 2 "NULL" "-628,546,90.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-6_highway_turn_b.mdl" "StevenTechno's Buildings 2.0" "Highway Turn B" 1 "NULL" "0,0,91.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_bridge/6-6_highway_turn_b.mdl" "StevenTechno's Buildings 2.0" "Highway Turn B" 2 "NULL" "-2860,2860,91.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_turns/6-0_highway_turn_a.mdl" "StevenTechno's Buildings 2.0" "Highway Turn A" 1 "NULL" "0,-82,314.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_turns/6-0_highway_turn_a.mdl" "StevenTechno's Buildings 2.0" "Highway Turn A" 2 "NULL" "-628,546,314.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_turns/6-1_highway_turn_b.mdl" "StevenTechno's Buildings 2.0" "Highway Turn B" 1 "NULL" "0,0,315.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/highway_turns/6-1_highway_turn_b.mdl" "StevenTechno's Buildings 2.0" "Highway Turn B" 2 "NULL" "-2860,2860,315.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-0_single_lane_x1.mdl" "StevenTechno's Buildings 2.0" "Single Lane X1" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-0_single_lane_x1.mdl" "StevenTechno's Buildings 2.0" "Single Lane X1" 2 "NULL" "-72,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-1_single_lane_x2.mdl" "StevenTechno's Buildings 2.0" "Single Lane X2" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-1_single_lane_x2.mdl" "StevenTechno's Buildings 2.0" "Single Lane X2" 2 "NULL" "-144,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-2_single_lane_x4.mdl" "StevenTechno's Buildings 2.0" "Single Lane X4" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-2_single_lane_x4.mdl" "StevenTechno's Buildings 2.0" "Single Lane X4" 2 "NULL" "-288,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-3_single_lane_x8.mdl" "StevenTechno's Buildings 2.0" "Single Lane X8" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-3_single_lane_x8.mdl" "StevenTechno's Buildings 2.0" "Single Lane X8" 2 "NULL" "-576,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-4_single_lane_x16.mdl" "StevenTechno's Buildings 2.0" "Single Lane X16" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-4_single_lane_x16.mdl" "StevenTechno's Buildings 2.0" "Single Lane X16" 2 "NULL" "-1152,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-5_single_lane_x32.mdl" "StevenTechno's Buildings 2.0" "Single Lane X32" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-5_single_lane_x32.mdl" "StevenTechno's Buildings 2.0" "Single Lane X32" 2 "NULL" "-2304,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-6_single_lane_x64.mdl" "StevenTechno's Buildings 2.0" "Single Lane X64" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-6_single_lane_x64.mdl" "StevenTechno's Buildings 2.0" "Single Lane X64" 2 "NULL" "-4608,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-7_single_lane_x128_phys.mdl" "StevenTechno's Buildings 2.0" "Single Lane X128 Phys" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_lane/0-7_single_lane_x128_phys.mdl" "StevenTechno's Buildings 2.0" "Single Lane X128 Phys" 2 "NULL" "-9216,0,3.03125" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-0_intersect_single_lane_a.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane A" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-0_intersect_single_lane_a.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane A" 2 "NULL" "-432, 432, 3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-0_intersect_single_lane_a.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane A" 3 "NULL" "-864, 0, 3.03125" "0, 180,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-0_intersect_single_lane_a.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane A" 4 "NULL" "-432,-432, 3.03125" "0, -90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-1_intersect_single_lane_b.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane B" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-1_intersect_single_lane_b.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane B" 2 "NULL" "-436, 432, 3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-1_intersect_single_lane_b.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane B" 3 "NULL" "-436,-432, 3.03125" "0, -90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-2_intersect_single_lane_c.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane C" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-2_intersect_single_lane_c.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane C" 2 "NULL" "-436, 432, 3.03125" "0, 90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-3_intersect_single_lane_d.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane D" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-3_intersect_single_lane_d.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane D" 2 "NULL" "-436,-432, 3.03125" "0, -90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-4_intersect_single_lane_e.mdl" "StevenTechno's Buildings 2.0" "Intersect Single Lane E" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-5_turn_single_lane_a.mdl" "StevenTechno's Buildings 2.0" "Turn Single Lane A" 1 "NULL" " 0, -4,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-5_turn_single_lane_a.mdl" "StevenTechno's Buildings 2.0" "Turn Single Lane A" 2 "NULL" "-428,424,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-6_turn_single_lane_b.mdl" "StevenTechno's Buildings 2.0" "Turn Single Lane B" 1 "NULL" "0,0,3.03125" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/roads_pack/single_turns/3-6_turn_single_lane_b.mdl" "StevenTechno's Buildings 2.0" "Turn Single Lane B" 2 "NULL" "-1508,1508,3.03125" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/jump/jumphigh.mdl" "Trackmania United Props" "Jumphigh" 1 "NULL" "-242.82343,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/jump/jumplow.mdl" "Trackmania United Props" "Jumplow" 1 "NULL" "-242.82343,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/checkpoint.mdl" "Trackmania United Props" "Checkpoint" 1 "NULL" " 480,0,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/checkpoint.mdl" "Trackmania United Props" "Checkpoint" 2 "NULL" "-480,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/checkpointground.mdl" "Trackmania United Props" "Checkpointground" 1 "NULL" "-180,0,0" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/endingpoint.mdl" "Trackmania United Props" "Endingpoint" 1 "NULL" "255,0,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/endingpoint.mdl" "Trackmania United Props" "Endingpoint" 2 "NULL" "-255,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/loopleft.mdl" "Trackmania United Props" "Loopleft" 1 "NULL" "31.69263,15,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/loopleft.mdl" "Trackmania United Props" "Loopleft" 2 "NULL" "31.69263,-1905,2574.34" "0,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/loopright.mdl" "Trackmania United Props" "Loopright" 1 "NULL" "28.85986,-15,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/loopright.mdl" "Trackmania United Props" "Loopright" 2 "NULL" "28.85986,1905,2574.34" "0,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/misc/startingpoint.mdl" "Trackmania United Props" "Startingpoint" 1 "NULL" "-477.88706,0.09363,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/dipmiddle.mdl" "Trackmania United Props" "Dipmiddle" 1 "NULL" " 477.1748,0,65.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/dipmiddle.mdl" "Trackmania United Props" "Dipmiddle" 2 "NULL" "-482.8252,0,65.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/obstaclenomiddle.mdl" "Trackmania United Props" "Obstaclenomiddle" 1 "NULL" " 477.1748,0,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/obstaclenomiddle.mdl" "Trackmania United Props" "Obstaclenomiddle" 2 "NULL" "-482.8252,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/obstaclex.mdl" "Trackmania United Props" "Obstaclex" 1 "NULL" " 477.1748,0,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/obstaclex.mdl" "Trackmania United Props" "Obstaclex" 2 "NULL" "-482.8252,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/pillardouble.mdl" "Trackmania United Props" "Pillardouble" 1 "NULL" " 477.1748,0,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/pillardouble.mdl" "Trackmania United Props" "Pillardouble" 2 "NULL" "-482.8252,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/pillarmiddle.mdl" "Trackmania United Props" "Pillarmiddle" 1 "NULL" " 477.1748,0,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/pillarmiddle.mdl" "Trackmania United Props" "Pillarmiddle" 2 "NULL" "-482.8252,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/pillartriple.mdl" "Trackmania United Props" "Pillartriple" 1 "NULL" " 477.1748,0,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/obstacle/pillartriple.mdl" "Trackmania United Props" "Pillartriple" 2 "NULL" "-482.8252,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/straight/boost.mdl" "Trackmania United Props" "Boost" 1 "NULL" " 478.86475,0,5.65527" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/straight/boost.mdl" "Trackmania United Props" "Boost" 2 "NULL" "-481.13525,0,5.65527" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/straight/straightstart.mdl" "Trackmania United Props" "Straightstart" 1 "NULL" "-122.82617,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/straight/straightx1.mdl" "Trackmania United Props" "Straightx1" 1 "NULL" " 480,0,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/straight/straightx1.mdl" "Trackmania United Props" "Straightx1" 2 "NULL" "-480,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/straight/trackstart.mdl" "Trackmania United Props" "Trackstart" 1 "NULL" "-9.6377,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/90big.mdl" "Trackmania United Props" "90big" 1 "NULL" "-2378.70115,-984.12146,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/90big.mdl" "Trackmania United Props" "90big" 2 "NULL" "981.29665,2375.87769,5.65723" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/90med.mdl" "Trackmania United Props" "90med" 1 "NULL" "700.11916,1697.05518,5.65723" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/90med.mdl" "Trackmania United Props" "90med" 2 "NULL" "-1699.87913,-702.94385,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/90small.mdl" "Trackmania United Props" "90small" 1 "NULL" "418.94192,1018.23267,5.65723" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/90small.mdl" "Trackmania United Props" "90small" 2 "NULL" "-1021.05686,-421.76636,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/l.mdl" "Trackmania United Props" "L" 1 "NULL" "-391.19399,-91.63025,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/l.mdl" "Trackmania United Props" "L" 2 "NULL" "88.80608,388.36523,5.65723" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/sbigleft.mdl" "Trackmania United Props" "Sbigleft" 1 "NULL" "1983.89588,1142.77014,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/sbigleft.mdl" "Trackmania United Props" "Sbigleft" 2 "NULL" "-1856.09961,-777.21912,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/sbigright.mdl" "Trackmania United Props" "Sbigright" 1 "NULL" " 1983.89088,-1142.76953,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/sbigright.mdl" "Trackmania United Props" "Sbigright" 2 "NULL" "-1856.09950,777.21912,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/smedleft.mdl" "Trackmania United Props" "Smedleft" 1 "NULL" " 1351.56785,517.28467,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/smedleft.mdl" "Trackmania United Props" "Smedleft" 2 "NULL" "-1528.42796,-442.71533,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/smedright.mdl" "Trackmania United Props" "Smedright" 1 "NULL" "1430.14109,-565.99805,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/smedright.mdl" "Trackmania United Props" "Smedright" 2 "NULL" "-1449.85471,394.00171,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/ssmallleft.mdl" "Trackmania United Props" "Ssmallleft" 1 "NULL" "958.12136,480.43057,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/ssmallleft.mdl" "Trackmania United Props" "Ssmallleft" 2 "NULL" "-961.83547,-479.56793,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/ssmallright.mdl" "Trackmania United Props" "Ssmallright" 1 "NULL" "958.12327,-530.2124,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/ssmallright.mdl" "Trackmania United Props" "Ssmallright" 2 "NULL" "-961.83323,429.78589,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/t.mdl" "Trackmania United Props" "T" 1 "NULL" "13.46277,465.00085,5.65723" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/t.mdl" "Trackmania United Props" "T" 2 "NULL" "-465.00076,-14.71875,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/t.mdl" "Trackmania United Props" "T" 3 "NULL" "492.17401,-14.99945,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/x.mdl" "Trackmania United Props" "X" 1 "NULL" "477.174,0.00024,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/x.mdl" "Trackmania United Props" "X" 2 "NULL" "-2.69753,-479.99927,5.65723" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/x.mdl" "Trackmania United Props" "X" 3 "NULL" "-482.82501,0,5.65723" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/x.mdl" "Trackmania United Props" "X" 4 "NULL" "-2.82444,479.99878,5.65723" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/yin.mdl" "Trackmania United Props" "Yin" 1 "NULL" "-31.29919,0,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/yin.mdl" "Trackmania United Props" "Yin" 2 "NULL" "1888.66163,-960,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/yin.mdl" "Trackmania United Props" "Yin" 3 "NULL" "1888.66163,960,5.65723" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/yout.mdl" "Trackmania United Props" "Yout" 1 "NULL" "-27.11389,0,5.65723" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/yout.mdl" "Trackmania United Props" "Yout" 2 "NULL" "1412.886,-1440,5.65723" "0,-90,0" "NULL" +TRACKASSEMBLY_PIECES "models/nokillnando/trackmania/ground/turns/yout.mdl" "Trackmania United Props" "Yout" 3 "NULL" "1412.886,1440,5.65723" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/support/support_a.mdl" "Transrapid" "Support A" 1 "NULL" "0,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_1024.mdl" "Transrapid" "Straight 1024" 1 "NULL" " 512,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_1024.mdl" "Transrapid" "Straight 1024" 2 "NULL" "-512,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_1024_support.mdl" "Transrapid" "Straight 1024 Support" 1 "NULL" " 512,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_1024_support.mdl" "Transrapid" "Straight 1024 Support" 2 "NULL" "-512,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_128.mdl" "Transrapid" "Straight 128" 1 "NULL" " 64,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_128.mdl" "Transrapid" "Straight 128" 2 "NULL" "-64,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_2048.mdl" "Transrapid" "Straight 2048" 1 "NULL" " 1024,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_2048.mdl" "Transrapid" "Straight 2048" 2 "NULL" "-1024,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_2048_support.mdl" "Transrapid" "Straight 2048 Support" 1 "NULL" " 1024,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_2048_support.mdl" "Transrapid" "Straight 2048 Support" 2 "NULL" "-1024,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_256.mdl" "Transrapid" "Straight 256" 1 "NULL" " 128,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_256.mdl" "Transrapid" "Straight 256" 2 "NULL" "-128,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_4096.mdl" "Transrapid" "Straight 4096" 1 "NULL" " 2048,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_4096.mdl" "Transrapid" "Straight 4096" 2 "NULL" "-2048,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_4096_support.mdl" "Transrapid" "Straight 4096 Support" 1 "NULL" " 2048,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_4096_support.mdl" "Transrapid" "Straight 4096 Support" 2 "NULL" "-2048,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_512.mdl" "Transrapid" "Straight 512" 1 "NULL" " 256,0,3.984" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/ron/maglev/track/straight/straight_512.mdl" "Transrapid" "Straight 512" 2 "NULL" "-256,0,3.984" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/funnel.mdl" "XQM Ball Rails" "Funnel" 1 "NULL" "2.206, 0.003, 4.282" "90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/loop_left.mdl" "XQM Ball Rails" "Loop Left" 1 "NULL" "13.7315, 41.726, -0.968" "0,22.5,-2.2585" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/loop_left.mdl" "XQM Ball Rails" "Loop Left" 2 "NULL" "-13.7315, -41.726, -0.968" "0,-157.5,-2.2585" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/loop_right.mdl" "XQM Ball Rails" "Loop Right" 1 "NULL" "13.864, -41.787, -0.953" "0,-22.5,2.433" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/loop_right.mdl" "XQM Ball Rails" "Loop Right" 2 "NULL" "-13.562, 41.789, -0.952" "0,157.5,2.433" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_down_15.mdl" "XQM Ball Rails" "Slope Down 15" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_down_15.mdl" "XQM Ball Rails" "Slope Down 15" 2 "NULL" "-20.245, -0.018, -4.13" "15,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_down_30.mdl" "XQM Ball Rails" "Slope Down 30" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_down_30.mdl" "XQM Ball Rails" "Slope Down 30" 2 "NULL" "-32.078, 0.022, -9.114" "30,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_down_45.mdl" "XQM Ball Rails" "Slope Down 45" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_down_45.mdl" "XQM Ball Rails" "Slope Down 45" 2 "NULL" "-42.144, -0.011, -16.998" "45,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_down_90.mdl" "XQM Ball Rails" "Slope Down 90" 1 "NULL" "38, 0.019, 30.42" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_down_90.mdl" "XQM Ball Rails" "Slope Down 90" 2 "NULL" "-30.418, -0.009, -37.98" "90,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_up_15.mdl" "XQM Ball Rails" "Slope Up 15" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_up_15.mdl" "XQM Ball Rails" "Slope Up 15" 2 "NULL" "-15.521, 0.014, -1.009" "-15,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_up_30.mdl" "XQM Ball Rails" "Slope Up 30" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_up_30.mdl" "XQM Ball Rails" "Slope Up 30" 2 "NULL" "-22.871, -0.019, 2.152" "-30,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_up_45.mdl" "XQM Ball Rails" "Slope Up 45" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_up_45.mdl" "XQM Ball Rails" "Slope Up 45" 2 "NULL" "-29.149, 0.006, 7.109" "-45,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_up_90.mdl" "XQM Ball Rails" "Slope Up 90" 1 "NULL" "6.004, 0.005, 15.322" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/slope_up_90.mdl" "XQM Ball Rails" "Slope Up 90" 2 "NULL" "-44.066, -0.011, 65.001" "-90,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_1.mdl" "XQM Ball Rails" "Straight 1" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_1.mdl" "XQM Ball Rails" "Straight 1" 2 "NULL" "-6, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_16.mdl" "XQM Ball Rails" "Straight 16" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_16.mdl" "XQM Ball Rails" "Straight 16" 2 "NULL" "-186, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_2.mdl" "XQM Ball Rails" "Straight 2" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_2.mdl" "XQM Ball Rails" "Straight 2" 2 "NULL" "-18, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_4.mdl" "XQM Ball Rails" "Straight 4" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_4.mdl" "XQM Ball Rails" "Straight 4" 2 "NULL" "-42, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_8.mdl" "XQM Ball Rails" "Straight 8" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/straight_8.mdl" "XQM Ball Rails" "Straight 8" 2 "NULL" "-90, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_1.mdl" "XQM Ball Rails" "Tunnel 1" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_1.mdl" "XQM Ball Rails" "Tunnel 1" 2 "NULL" "-6, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_16.mdl" "XQM Ball Rails" "Tunnel 16" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_16.mdl" "XQM Ball Rails" "Tunnel 16" 2 "NULL" "-186, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_2.mdl" "XQM Ball Rails" "Tunnel 2" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_2.mdl" "XQM Ball Rails" "Tunnel 2" 2 "NULL" "-18, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_4.mdl" "XQM Ball Rails" "Tunnel 4" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_4.mdl" "XQM Ball Rails" "Tunnel 4" 2 "NULL" "-42, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_8.mdl" "XQM Ball Rails" "Tunnel 8" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/tunnel_8.mdl" "XQM Ball Rails" "Tunnel 8" 2 "NULL" "-90, 0, -2.25" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_15.mdl" "XQM Ball Rails" "Turn 15" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_15.mdl" "XQM Ball Rails" "Turn 15" 2 "NULL" "-17.591, 3.105, -2.25, -1.009" "0,165,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_180.mdl" "XQM Ball Rails" "Turn 180" 1 "NULL" "52.789, 44.753, -2.273" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_180.mdl" "XQM Ball Rails" "Turn 180" 2 "NULL" "-52.808, 44.743, -2.238" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_30.mdl" "XQM Ball Rails" "Turn 30" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_30.mdl" "XQM Ball Rails" "Turn 30" 2 "NULL" "-28.676, 7.705, -2.252" "0,150,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_45.mdl" "XQM Ball Rails" "Turn 45" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_45.mdl" "XQM Ball Rails" "Turn 45" 2 "NULL" "-38.2, 15.001, -2.261" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_90.mdl" "XQM Ball Rails" "Turn 90" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/turn_90.mdl" "XQM Ball Rails" "Turn 90" 2 "NULL" "-58.848, 56.855, -2.255" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/twist_45_left.mdl" "XQM Ball Rails" "Twist 45 Left" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/twist_45_left.mdl" "XQM Ball Rails" "Twist 45 Left" 2 "NULL" "-90, 0, -2.25" "0,180,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/twist_45_right.mdl" "XQM Ball Rails" "Twist 45 Right" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/twist_45_right.mdl" "XQM Ball Rails" "Twist 45 Right" 2 "NULL" "-90, 0, -2.25" "0,180,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/twist_90_left.mdl" "XQM Ball Rails" "Twist 90 Left" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/twist_90_left.mdl" "XQM Ball Rails" "Twist 90 Left" 2 "NULL" "-186, 0, -2.25" "0,180,-90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/twist_90_right.mdl" "XQM Ball Rails" "Twist 90 Right" 1 "NULL" "6, 0, -2.25" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/rails/twist_90_right.mdl" "XQM Ball Rails" "Twist 90 Right" 2 "NULL" "-186, 0, -2.25" "0,180,-90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_left_1.mdl" "XQM Coaster" "Bank Start Left 1" 1 "NULL" "150.199, 0.032, 4.885" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_left_1.mdl" "XQM Coaster" "Bank Start Left 1" 2 "NULL" "-150.168, -0.014, 4.881" "0,180,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_left_2.mdl" "XQM Coaster" "Bank Start Left 2" 1 "NULL" "300.199, -0.011, 4.895" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_left_2.mdl" "XQM Coaster" "Bank Start Left 2" 2 "NULL" "-300.198, 0.032, 4.914" "0,180,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_left_3.mdl" "XQM Coaster" "Bank Start Left 3" 1 "NULL" "449.378, -0.025, 4.893" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_left_3.mdl" "XQM Coaster" "Bank Start Left 3" 2 "NULL" "-449.801, 0.018, 4.896" "0,180,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_left_4.mdl" "XQM Coaster" "Bank Start Left 4" 1 "NULL" "599.802, -0.013, 4.883" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_left_4.mdl" "XQM Coaster" "Bank Start Left 4" 2 "NULL" "-600.198, -0.015, 4.902" "0,-180,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_right_1.mdl" "XQM Coaster" "Bank Start Right 1" 1 "NULL" "149.7, -0.005, 4.88" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_right_1.mdl" "XQM Coaster" "Bank Start Right 1" 2 "NULL" "-149.7, 0.024, 4.865" "0,180,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_right_2.mdl" "XQM Coaster" "Bank Start Right 2" 1 "NULL" "299.790,-0.021,4.885" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_right_2.mdl" "XQM Coaster" "Bank Start Right 2" 2 "NULL" "-299.790,0.007,4.862" "0,180,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_right_3.mdl" "XQM Coaster" "Bank Start Right 3" 1 "NULL" "449.8, -0.018, 4.896" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_right_3.mdl" "XQM Coaster" "Bank Start Right 3" 2 "NULL" "-449.802, -0.003, 4.853" "0,-180,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_right_4.mdl" "XQM Coaster" "Bank Start Right 4" 1 "NULL" "600.194, -0.017, 4.888" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_start_right_4.mdl" "XQM Coaster" "Bank Start Right 4" 2 "NULL" "-600.199, 0.025, 4.872" "0,180,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_180_1.mdl" "XQM Coaster" "Bank Turn 180 1" 1 "NULL" "73.8, 14.45, 4.887" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_180_1.mdl" "XQM Coaster" "Bank Turn 180 1" 2 "NULL" "73.46, -372.816, 4.902" "0,0,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_180_2.mdl" "XQM Coaster" "Bank Turn 180 2" 1 "NULL" "146.8, 28.715, 4.888" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_180_2.mdl" "XQM Coaster" "Bank Turn 180 2" 2 "NULL" "147.376, -737.938, 4.911" "0,0,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_180_3.mdl" "XQM Coaster" "Bank Turn 180 3" 1 "NULL" "220.191, 43.001, 4.907" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_180_3.mdl" "XQM Coaster" "Bank Turn 180 3" 2 "NULL" "220.813, -1105.46, 4.883" "0,0,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_180_4.mdl" "XQM Coaster" "Bank Turn 180 4" 1 "NULL" "293.308, -1472.996, 4.916" "0,0,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_180_4.mdl" "XQM Coaster" "Bank Turn 180 4" 2 "NULL" "292.8, 57.26, 4.89" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_45_1.mdl" "XQM Coaster" "Bank Turn 45 1" 1 "NULL" "74.199, 14.457, 4.888" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_45_1.mdl" "XQM Coaster" "Bank Turn 45 1" 2 "NULL" "-63.081, -42.297, 4.912" "0,-135,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_45_2.mdl" "XQM Coaster" "Bank Turn 45 2" 1 "NULL" "147.199, 28.717, 4.886" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_45_2.mdl" "XQM Coaster" "Bank Turn 45 2" 2 "NULL" "-124.087, -83.935, 4.901" "0,-135,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_45_3.mdl" "XQM Coaster" "Bank Turn 45 3" 1 "NULL" "219.8, 42.98, 4.887" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_45_3.mdl" "XQM Coaster" "Bank Turn 45 3" 2 "NULL" "-185.808, -125.258, 4.908" "0,-135,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_45_4.mdl" "XQM Coaster" "Bank Turn 45 4" 1 "NULL" "292.799, 57.249, 4.89" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_45_4.mdl" "XQM Coaster" "Bank Turn 45 4" 2 "NULL" "-247.727, -166.794, 4.908" "0,-135,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_90_1.mdl" "XQM Coaster" "Bank Turn 90 1" 1 "NULL" "73.8, 14.448, 4.895" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_90_1.mdl" "XQM Coaster" "Bank Turn 90 1" 2 "NULL" "-119.757, -178.862, 4.909" "0,-90,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_90_2.mdl" "XQM Coaster" "Bank Turn 90 2" 1 "NULL" "147.2, 28.719, 4.887" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_90_2.mdl" "XQM Coaster" "Bank Turn 90 2" 2 "NULL" "-235.985, -355.128, 4.904" "0,-90,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_90_3.mdl" "XQM Coaster" "Bank Turn 90 3" 1 "NULL" "220.199, 42.985, 4.89" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_90_3.mdl" "XQM Coaster" "Bank Turn 90 3" 2 "NULL" "-353.929, -531.719, 4.91" "0,-90,-45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_90_4.mdl" "XQM Coaster" "Bank Turn 90 4" 1 "NULL" "292.790,57.259,4.881" "0,0,45" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/bank_turn_90_4.mdl" "XQM Coaster" "Bank Turn 90 4" 2 "NULL" "-471.864,-707.923,4.910" "0,-90.00,-45.00" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_1.mdl" "XQM Coaster" "Slope 225 1" 1 "NULL" "75.790,-0.013,-2.414" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_1.mdl" "XQM Coaster" "Slope 225 1" 2 "NULL" "-70.806,-0.003,26.580" "-22.5,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_2.mdl" "XQM Coaster" "Slope 225 2" 1 "NULL" "149.8, -0.013, -9.62" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_2.mdl" "XQM Coaster" "Slope 225 2" 2 "NULL" "-141.814, 0.004, 48.442" "-22.5,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_3.mdl" "XQM Coaster" "Slope 225 3" 1 "NULL" "225.199, -0.016, -16.814" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_3.mdl" "XQM Coaster" "Slope 225 3" 2 "NULL" "-214.187, 0.006, 70.463" "-22.5,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_4.mdl" "XQM Coaster" "Slope 225 4" 1 "NULL" "298.8, -0.013, -24.02" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_4.mdl" "XQM Coaster" "Slope 225 4" 2 "NULL" "-285.799, 0.019, 92.158" "-22.5,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_down_1.mdl" "XQM Coaster" "Slope 225 Down 1" 1 "NULL" " -73.800, -0.013, 11.999" " 0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_down_1.mdl" "XQM Coaster" "Slope 225 Down 1" 2 "NULL" " 72.814, -0.013, -16.992" "22.5,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_down_2.mdl" "XQM Coaster" "Slope 225 Down 2" 1 "NULL" "-148.626, -0.013, 19.510" " 0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_down_2.mdl" "XQM Coaster" "Slope 225 Down 2" 2 "NULL" " 134.806, -0.011, -36.762" "22.5,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_down_3.mdl" "XQM Coaster" "Slope 225 Down 3" 1 "NULL" "-224.899, 0.010, 25.763" " 0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_down_3.mdl" "XQM Coaster" "Slope 225 Down 3" 2 "NULL" " 202.547, -0.014, -57.473" "22.5,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_down_4.mdl" "XQM Coaster" "Slope 225 Down 4" 1 "NULL" "-300.319, 0.017, 32.110" " 0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_225_down_4.mdl" "XQM Coaster" "Slope 225 Down 4" 2 "NULL" " 268.600, 0.052, -77.783" "22.5,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_1.mdl" "XQM Coaster" "Slope 45 1" 1 "NULL" "74.8, -0.013, -9.758" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_1.mdl" "XQM Coaster" "Slope 45 1" 2 "NULL" "-59.846, 0.021, 45.855" "-45,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_2.mdl" "XQM Coaster" "Slope 45 2" 1 "NULL" "-148.199, 0.021, -24.085" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_2.mdl" "XQM Coaster" "Slope 45 2" 2 "NULL" "121.828, -0.004, 88.131" "-45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_3.mdl" "XQM Coaster" "Slope 45 3" 1 "NULL" "-221.204, 0.005, -38.364" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_3.mdl" "XQM Coaster" "Slope 45 3" 2 "NULL" "183.612, -0.018, 129.084" "-45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_4.mdl" "XQM Coaster" "Slope 45 4" 1 "NULL" "-293.8, -0.013, -52.661" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_4.mdl" "XQM Coaster" "Slope 45 4" 2 "NULL" "245.168, -0.007, 170.857" "-45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_down_1.mdl" "XQM Coaster" "Slope 45 Down 1" 1 "NULL" "-71.199, -0.013, 18.809" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_down_1.mdl" "XQM Coaster" "Slope 45 Down 1" 2 "NULL" " 63.815, -0.021, -37.126" "45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_down_2.mdl" "XQM Coaster" "Slope 45 Down 2" 1 "NULL" "-144.8, -0.013, 33.103" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_down_2.mdl" "XQM Coaster" "Slope 45 Down 2" 2 "NULL" "125.217, -0.014, -78.778" "45,0,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_down_3.mdl" "XQM Coaster" "Slope 45 Down 3" 1 "NULL" "217.199, -0.013, 47.332" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_down_3.mdl" "XQM Coaster" "Slope 45 Down 3" 2 "NULL" "-187.587, 0.003, -120.127" "45,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_down_4.mdl" "XQM Coaster" "Slope 45 Down 4" 1 "NULL" "290.79, -0.013, 61.604" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_45_down_4.mdl" "XQM Coaster" "Slope 45 Down 4" 2 "NULL" "-249.142, 0.017, -161.855" "45, 180, 0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_1.mdl" "XQM Coaster" "Slope 90 1" 1 "NULL" "75, -0.016, -9.757" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_1.mdl" "XQM Coaster" "Slope 90 1" 2 "NULL" "-115.988, 0.017, 181.075" "-90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_2.mdl" "XQM Coaster" "Slope 90 2" 1 "NULL" "-148.198, -0.013, -24.085" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_2.mdl" "XQM Coaster" "Slope 90 2" 2 "NULL" " 233.158, 0.013, 358.192" "-90, 180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_3.mdl" "XQM Coaster" "Slope 90 3" 1 "NULL" "-221.1, -0.013, -38.366" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_3.mdl" "XQM Coaster" "Slope 90 3" 2 "NULL" "351.2, -0.013, 533.582" "-90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_4.mdl" "XQM Coaster" "Slope 90 4" 1 "NULL" "-293.701, -0.013, -52.661" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_4.mdl" "XQM Coaster" "Slope 90 4" 2 "NULL" "468.482, -0.013, 710.225" "-90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_down_1.mdl" "XQM Coaster" "Slope 90 Down 1" 1 "NULL" "-70.793, -0.038, 18.807" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_down_1.mdl" "XQM Coaster" "Slope 90 Down 1" 2 "NULL" "119.415, -0.013, -171.482" "90,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_down_2.mdl" "XQM Coaster" "Slope 90 Down 2" 1 "NULL" "-144.804, -0.013, 33.103" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_down_2.mdl" "XQM Coaster" "Slope 90 Down 2" 2 "NULL" "237.418, -0.013, -349.306" "90,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_down_3.mdl" "XQM Coaster" "Slope 90 Down 3" 1 "NULL" "217.199, -0.013, 47.332" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_down_3.mdl" "XQM Coaster" "Slope 90 Down 3" 2 "NULL" "-355.101, 0.01, -524.496" "90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_down_4.mdl" "XQM Coaster" "Slope 90 Down 4" 1 "NULL" "290.8, -0.013, 61.604" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/slope_90_down_4.mdl" "XQM Coaster" "Slope 90 Down 4" 2 "NULL" "-473.228, -0.013, -701.956" "90,0,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_left_1.mdl" "XQM Coaster" "Special Full Corkscrew Left 1" 1 "NULL" "149.695, -0.02, 4.886" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_left_1.mdl" "XQM Coaster" "Special Full Corkscrew Left 1" 2 "NULL" "-2249.721, 0.014, 4.888" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_left_2.mdl" "XQM Coaster" "Special Full Corkscrew Left 2" 1 "NULL" "1350.218, 0.029, 4.883" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_left_2.mdl" "XQM Coaster" "Special Full Corkscrew Left 2" 2 "NULL" "-3450.199, -0.009, 4.887" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_left_3.mdl" "XQM Coaster" "Special Full Corkscrew Left 3" 1 "NULL" "2550, -0.013, 4.886" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_left_3.mdl" "XQM Coaster" "Special Full Corkscrew Left 3" 2 "NULL" "-4650.203, 0.023, 4.886" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_left_4.mdl" "XQM Coaster" "Special Full Corkscrew Left 4" 1 "NULL" "3749.804, -0.001, 4.888" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_left_4.mdl" "XQM Coaster" "Special Full Corkscrew Left 4" 2 "NULL" "-5849.8, 0.036, 4.888" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_right_1.mdl" "XQM Coaster" "Special Full Corkscrew Right 1" 1 "NULL" "150, -0.013, 4.886" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_right_1.mdl" "XQM Coaster" "Special Full Corkscrew Right 1" 2 "NULL" "-2250, -0.013, 4.886" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_right_3.mdl" "XQM Coaster" "Special Full Corkscrew Right 3" 1 "NULL" "2550.2, -0.012, 4.886" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_right_3.mdl" "XQM Coaster" "Special Full Corkscrew Right 3" 2 "NULL" "-4650.14, -0.013, 4.886" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_right_4.mdl" "XQM Coaster" "Special Full Corkscrew Right 4" 1 "NULL" "3749.790,-0.019,4.879" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_corkscrew_right_4.mdl" "XQM Coaster" "Special Full Corkscrew Right 4" 2 "NULL" "-5849.795, 0.008, 4.884" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_loop_3.mdl" "XQM Coaster" "Special Full Loop 3" 1 "NULL" "14.2, 67.584, -279.931" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_loop_3.mdl" "XQM Coaster" "Special Full Loop 3" 2 "NULL" "-0.172, -67.619, -279.937" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_loop_4.mdl" "XQM Coaster" "Special Full Loop 4" 1 "NULL" "2.16, 89.53, -307.495" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_full_loop_4.mdl" "XQM Coaster" "Special Full Loop 4" 2 "NULL" "-18.191, -72.398, -307.642" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_left_1.mdl" "XQM Coaster" "Special Half Corkscrew Left 1" 1 "NULL" "150.079, -0.009, 4.878" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_left_1.mdl" "XQM Coaster" "Special Half Corkscrew Left 1" 2 "NULL" "-1050.198, -0.036, 4.877" "0,180,-180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_left_2.mdl" "XQM Coaster" "Special Half Corkscrew Left 2" 1 "NULL" "299.8, -0.013, 4.884" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_left_2.mdl" "XQM Coaster" "Special Half Corkscrew Left 2" 2 "NULL" "-2099.8, -0.013, 4.883" "0,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_left_3.mdl" "XQM Coaster" "Special Half Corkscrew Left 3" 1 "NULL" "449.801, -0.014, 4.882" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_left_3.mdl" "XQM Coaster" "Special Half Corkscrew Left 3" 2 "NULL" "-3149.802, -0.028, 4.871" "0,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_left_4.mdl" "XQM Coaster" "Special Half Corkscrew Left 4" 1 "NULL" "599.801, -0.014, 4.888" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_left_4.mdl" "XQM Coaster" "Special Half Corkscrew Left 4" 2 "NULL" "-4199.8, -0.013, 4.881" "0,-180,-180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_right_1.mdl" "XQM Coaster" "Special Half Corkscrew Right 1" 1 "NULL" "150.199, 0.013, 4.886" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_right_1.mdl" "XQM Coaster" "Special Half Corkscrew Right 1" 2 "NULL" "-1050.199, -0.01, 4.886" "0,180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_right_2.mdl" "XQM Coaster" "Special Half Corkscrew Right 2" 1 "NULL" "1126.907, -0.013, 4.883, 4.9" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_right_2.mdl" "XQM Coaster" "Special Half Corkscrew Right 2" 2 "NULL" "-1272.492, -0.164, 4.883" "0,-180,-180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_right_3.mdl" "XQM Coaster" "Special Half Corkscrew Right 3" 1 "NULL" "1349.823, -0.012, 4.883" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_right_3.mdl" "XQM Coaster" "Special Half Corkscrew Right 3" 2 "NULL" "-2249.7, -0.013, 4.884" "0,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_right_4.mdl" "XQM Coaster" "Special Half Corkscrew Right 4" 1 "NULL" "1950.199, -0.017, 4.889" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_half_corkscrew_right_4.mdl" "XQM Coaster" "Special Half Corkscrew Right 4" 2 "NULL" "-2850.199, -0.047, 4.88" "0,-180,180" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_2.mdl" "XQM Coaster" "Special Helix Middle 2" 1 "NULL" "189.277, 59.435, 41.118" "0,90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_2.mdl" "XQM Coaster" "Special Helix Middle 2" 2 "NULL" "-192.302, 46.789, -17.492" "22.5,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_3.mdl" "XQM Coaster" "Special Helix Middle 3" 1 "NULL" "-285.755, -96.647, 32.538" "0,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_3.mdl" "XQM Coaster" "Special Helix Middle 3" 2 "NULL" "281.393, -79.204, -55.216" "22.5,-90,90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_4.mdl" "XQM Coaster" "Special Helix Middle 4" 1 "NULL" "322.424, -72.015, 15.907" "0,-90,90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_4.mdl" "XQM Coaster" "Special Helix Middle 4" 2 "NULL" "-419.735, -44.894, 132.706" "-22.5,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_full_2.mdl" "XQM Coaster" "Special Helix Middle Full 2" 1 "NULL" "-207.841, 30.414, 100.219" "-22.5,-90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_full_2.mdl" "XQM Coaster" "Special Helix Middle Full 2" 2 "NULL" "-207.993, 7.31, -17.474" "22.5,90,90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_full_3.mdl" "XQM Coaster" "Special Helix Middle Full 3" 1 "NULL" "281.359, -6.612, 120.391" "-22.5,90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_full_3.mdl" "XQM Coaster" "Special Helix Middle Full 3" 2 "NULL" "281.371, 28.004, -55.354" "22.5,-90,90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_full_4.mdl" "XQM Coaster" "Special Helix Middle Full 4" 1 "NULL" "322.609, 52.146, 251.028" "0,90,-90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_helix_middle_full_4.mdl" "XQM Coaster" "Special Helix Middle Full 4" 2 "NULL" "322.431, 5.79, 15.895" "0,-90,90" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_station.mdl" "XQM Coaster" "Special Station" 1 "NULL" "150.194, -0.045, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_station.mdl" "XQM Coaster" "Special Station" 2 "NULL" "-150.184, -0.045, 4.887" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_left_2.mdl" "XQM Coaster" "Special Sturn Left 2" 1 "NULL" "149.8, 36.553, 4.886" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_left_2.mdl" "XQM Coaster" "Special Sturn Left 2" 2 "NULL" "-149.8, -36.54, 4.886" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_left_3.mdl" "XQM Coaster" "Special Sturn Left 3" 1 "NULL" "225.159, 36.552, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_left_3.mdl" "XQM Coaster" "Special Sturn Left 3" 2 "NULL" "-225.2, -36.559, 4.886" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_left_4.mdl" "XQM Coaster" "Special Sturn Left 4" 1 "NULL" "299.8, 36.623, 4.886" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_left_4.mdl" "XQM Coaster" "Special Sturn Left 4" 2 "NULL" "-299.8, -36.6, 4.886" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_right_2.mdl" "XQM Coaster" "Special Sturn Right 2" 1 "NULL" "150.189, -36.538, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_right_2.mdl" "XQM Coaster" "Special Sturn Right 2" 2 "NULL" "-150.199, 36.554, 4.887" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_right_3.mdl" "XQM Coaster" "Special Sturn Right 3" 1 "NULL" "225.199, -36.549, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_right_3.mdl" "XQM Coaster" "Special Sturn Right 3" 2 "NULL" "-225.099, 36.55, 4.887" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_right_4.mdl" "XQM Coaster" "Special Sturn Right 4" 1 "NULL" "300.2, -36.649, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/special_sturn_right_4.mdl" "XQM Coaster" "Special Sturn Right 4" 2 "NULL" "-300.195, 36.561, 4.887" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/straight_1.mdl" "XQM Coaster" "Straight 1" 1 "NULL" "74.802, -0.013, 4.886, 0" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/straight_1.mdl" "XQM Coaster" "Straight 1" 2 "NULL" "-74.803, -0.013, 4.886" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/straight_2.mdl" "XQM Coaster" "Straight 2" 1 "NULL" "149.805, -0.013, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/straight_2.mdl" "XQM Coaster" "Straight 2" 2 "NULL" "-149.805, -0.013, 4.887" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/straight_3.mdl" "XQM Coaster" "Straight 3" 1 "NULL" "225.206, -0.013, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/straight_3.mdl" "XQM Coaster" "Straight 3" 2 "NULL" "-225.196, -0.013, 4.887" "0,-180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/straight_4.mdl" "XQM Coaster" "Straight 4" 1 "NULL" "300.164, -0.013, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/straight_4.mdl" "XQM Coaster" "Straight 4" 2 "NULL" "-300.189, -0.013, 4.887" "0,180,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_1.mdl" "XQM Coaster" "Turn 180 1" 1 "NULL" "72.8, 367.527, 4.894" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_1.mdl" "XQM Coaster" "Turn 180 1" 2 "NULL" "72.8, -14.286, 4.894" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_2.mdl" "XQM Coaster" "Turn 180 2" 1 "NULL" "146.198, -28.561, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_2.mdl" "XQM Coaster" "Turn 180 2" 2 "NULL" "146.041, 735.053, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_3.mdl" "XQM Coaster" "Turn 180 3" 1 "NULL" "218.767, -42.833, 4.888" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_3.mdl" "XQM Coaster" "Turn 180 3" 2 "NULL" "218.767, 1100.169, 4.91" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_4.mdl" "XQM Coaster" "Turn 180 4" 1 "NULL" "292.283, -57.102, 4.896" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_4.mdl" "XQM Coaster" "Turn 180 4" 2 "NULL" "292.283, 1468.9, 4.896" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_tight_2.mdl" "XQM Coaster" "Turn 180 Tight 2" 1 "NULL" "93.769, 96.842, 4.9" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_tight_2.mdl" "XQM Coaster" "Turn 180 Tight 2" 2 "NULL" "-93.912, 96.841, 4.9" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_tight_3.mdl" "XQM Coaster" "Turn 180 Tight 3" 1 "NULL" "138.58, 144.2, 4.906" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_tight_3.mdl" "XQM Coaster" "Turn 180 Tight 3" 2 "NULL" "-142.846, 144.192, 4.888" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_tight_4.mdl" "XQM Coaster" "Turn 180 Tight 4" 1 "NULL" "184.588, 191.8, 4.905" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_180_tight_4.mdl" "XQM Coaster" "Turn 180 Tight 4" 2 "NULL" "-190.323, 191.8, 4.905" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_45_1.mdl" "XQM Coaster" "Turn 45 1" 1 "NULL" "73.232, -14.287, 4.894" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_45_1.mdl" "XQM Coaster" "Turn 45 1" 2 "NULL" "-62.119, 41.771, 4.888" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_45_2.mdl" "XQM Coaster" "Turn 45 2" 1 "NULL" "145.801, -28.557, 4.893" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_45_2.mdl" "XQM Coaster" "Turn 45 2" 2 "NULL" "-123.848, 83.091, 4.921" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_45_3.mdl" "XQM Coaster" "Turn 45 3" 1 "NULL" "218.8, -42.829, 4.899" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_45_3.mdl" "XQM Coaster" "Turn 45 3" 2 "NULL" "-184.844, 124.707, 4.88" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_45_4.mdl" "XQM Coaster" "Turn 45 4" 1 "NULL" "292.197, -57.102, 4.896" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_45_4.mdl" "XQM Coaster" "Turn 45 4" 2 "NULL" "-246.823, 166.305, 4.888" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_1.mdl" "XQM Coaster" "Turn 90 1" 1 "NULL" "73.199, -14.286, 4.894" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_1.mdl" "XQM Coaster" "Turn 90 1" 2 "NULL" "-117.904, 176.785, 4.888" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_2.mdl" "XQM Coaster" "Turn 90 2" 1 "NULL" "145.748, -28.566, 4.883" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_2.mdl" "XQM Coaster" "Turn 90 2" 2 "NULL" "-235.851, 352.965, 4.883" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_3.mdl" "XQM Coaster" "Turn 90 3" 1 "NULL" "219.199, -42.829, 4.9" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_3.mdl" "XQM Coaster" "Turn 90 3" 2 "NULL" "-352.072, 529.25, 4.888" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_4.mdl" "XQM Coaster" "Turn 90 4" 1 "NULL" "292.695, -57.102, 4.897" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_4.mdl" "XQM Coaster" "Turn 90 4" 2 "NULL" "-470.379, 706.175, 4.887" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_tight_1.mdl" "XQM Coaster" "Turn 90 Tight 1" 1 "NULL" "68.201, -27.47, 4.907" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_tight_1.mdl" "XQM Coaster" "Turn 90 Tight 1" 2 "NULL" "-27.469, 68.408, 4.907" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_tight_2.mdl" "XQM Coaster" "Turn 90 Tight 2" 1 "NULL" "134.784, -54.932, 4.883" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_tight_2.mdl" "XQM Coaster" "Turn 90 Tight 2" 2 "NULL" "-54.9, 134.79, 4.908" "0, 90, 0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_tight_3.mdl" "XQM Coaster" "Turn 90 Tight 3" 1 "NULL" "203.169, -82.386, 4.885" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_tight_3.mdl" "XQM Coaster" "Turn 90 Tight 3" 2 "NULL" "-82.342, 203.198, 4.884" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_tight_4.mdl" "XQM Coaster" "Turn 90 Tight 4" 1 "NULL" "270.8, -109.856, 4.889" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_90_tight_4.mdl" "XQM Coaster" "Turn 90 Tight 4" 2 "NULL" "-109.812, 270.799, 4.89" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_180_1.mdl" "XQM Coaster" "Turn Slope 180 1" 1 "NULL" "61.949, -171.786, -85.113" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_180_1.mdl" "XQM Coaster" "Turn Slope 180 1" 2 "NULL" "61.849, 210.026, 94.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_180_2.mdl" "XQM Coaster" "Turn Slope 180 2" 1 "NULL" "145.79, -377.307, -51.364" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_180_2.mdl" "XQM Coaster" "Turn Slope 180 2" 2 "NULL" "145.64, 386.277, 128.636" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_180_3.mdl" "XQM Coaster" "Turn Slope 180 3" 1 "NULL" "219.186, -560.329, -73.863" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_180_3.mdl" "XQM Coaster" "Turn Slope 180 3" 2 "NULL" "219.938, 582.673, 106.137" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_180_4.mdl" "XQM Coaster" "Turn Slope 180 4" 1 "NULL" "292.682, -57.062, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_180_4.mdl" "XQM Coaster" "Turn Slope 180 4" 2 "NULL" "292.882, 1468.926, 184.888" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_45_1.mdl" "XQM Coaster" "Turn Slope 45 1" 1 "NULL" "73.214, -14.287, 4.889" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_45_1.mdl" "XQM Coaster" "Turn Slope 45 1" 2 "NULL" "-62.103, 41.809, 49.893" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_45_2.mdl" "XQM Coaster" "Turn Slope 45 2" 1 "NULL" "145.789, -28.557, 4.888" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_45_2.mdl" "XQM Coaster" "Turn Slope 45 2" 2 "NULL" "-123.816, 83.09, 49.885" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_45_3.mdl" "XQM Coaster" "Turn Slope 45 3" 1 "NULL" "218.817, -42.829, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_45_3.mdl" "XQM Coaster" "Turn Slope 45 3" 2 "NULL" "-184.823, 124.712, 49.888" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_45_4.mdl" "XQM Coaster" "Turn Slope 45 4" 1 "NULL" "292.295, -57.102, 4.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_45_4.mdl" "XQM Coaster" "Turn Slope 45 4" 2 "NULL" "-246.825, 166.303, 49.887" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_90_1.mdl" "XQM Coaster" "Turn Slope 90 1" 1 "NULL" "151.949, -115.536, -28.863" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_90_1.mdl" "XQM Coaster" "Turn Slope 90 1" 2 "NULL" "-39.186, 75.539, 61.137" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_90_2.mdl" "XQM Coaster" "Turn Slope 90 2" 1 "NULL" "247.052, -129.807, -17.611" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_90_2.mdl" "XQM Coaster" "Turn Slope 90 2" 2 "NULL" "-134.631, 251.731, 72.387" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_90_3.mdl" "XQM Coaster" "Turn Slope 90 3" 1 "NULL" "342.55, -166.589, -6.356" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_90_3.mdl" "XQM Coaster" "Turn Slope 90 3" 2 "NULL" "-228.353, 405.104, 83.627" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_90_4.mdl" "XQM Coaster" "Turn Slope 90 4" 1 "NULL" "461.445, -180.852, -6.363" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_90_4.mdl" "XQM Coaster" "Turn Slope 90 4" 2 "NULL" "-301.622, 582.445, 83.635" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_180_1.mdl" "XQM Coaster" "Turn Slope Down 180 1" 1 "NULL" "73.2, -149.286, 128.637" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_180_1.mdl" "XQM Coaster" "Turn Slope Down 180 1" 2 "NULL" "73.099, 232.527, -51.363" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_180_2.mdl" "XQM Coaster" "Turn Slope Down 180 2" 1 "NULL" "145.8, -287.306, 117.387" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_180_2.mdl" "XQM Coaster" "Turn Slope Down 180 2" 2 "NULL" "145.6, 476.307, -62.612" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_180_3.mdl" "XQM Coaster" "Turn Slope Down 180 3" 1 "NULL" "219.196, -391.579, 117.387" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_180_3.mdl" "XQM Coaster" "Turn Slope Down 180 3" 2 "NULL" "219.948, 751.399, -62.61" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_180_4.mdl" "XQM Coaster" "Turn Slope Down 180 4" 1 "NULL" "292.681, -630.852, 117.391" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_180_4.mdl" "XQM Coaster" "Turn Slope Down 180 4" 2 "NULL" "292.833, 895.14, -62.613" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_45_1.mdl" "XQM Coaster" "Turn Slope Down 45 1" 1 "NULL" "73.199, -14.286, 49.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_45_1.mdl" "XQM Coaster" "Turn Slope Down 45 1" 2 "NULL" "-62.097, 41.783, 4.886" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_45_2.mdl" "XQM Coaster" "Turn Slope Down 45 2" 1 "NULL" "145.79, -28.558, 49.879" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_45_2.mdl" "XQM Coaster" "Turn Slope Down 45 2" 2 "NULL" "-123.833, 83.088, 4.892" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_45_3.mdl" "XQM Coaster" "Turn Slope Down 45 3" 1 "NULL" "219.197, -42.829, 49.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_45_3.mdl" "XQM Coaster" "Turn Slope Down 45 3" 2 "NULL" "-185.095, 124.99, 4.888" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_45_4.mdl" "XQM Coaster" "Turn Slope Down 45 4" 1 "NULL" "292.695, -57.102, 49.887" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_45_4.mdl" "XQM Coaster" "Turn Slope Down 45 4" 2 "NULL" "-247.123, 166.602, 4.888" "0,135,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_90_1.mdl" "XQM Coaster" "Turn Slope Down 90 1" 1 "NULL" "128.858, -14.281, 72.387" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_90_1.mdl" "XQM Coaster" "Turn Slope Down 90 1" 2 "NULL" "-61.682, 176.749, -17.61" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_90_2.mdl" "XQM Coaster" "Turn Slope Down 90 2" 1 "NULL" "179.55, -28.557, 61.136" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_90_2.mdl" "XQM Coaster" "Turn Slope Down 90 2" 2 "NULL" "-202.131, 352.976, -28.864" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_90_3.mdl" "XQM Coaster" "Turn Slope Down 90 3" 1 "NULL" "241.3, -42.829, 61.136" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_90_3.mdl" "XQM Coaster" "Turn Slope Down 90 3" 2 "NULL" "-329.578, 528.859, -28.864" "0,90,0" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_90_4.mdl" "XQM Coaster" "Turn Slope Down 90 4" 1 "NULL" "292.296, -57.102, 94.89" "NULL" "NULL" +TRACKASSEMBLY_PIECES "models/xqm/coastertrack/turn_slope_down_90_4.mdl" "XQM Coaster" "Turn Slope Down 90 4" 2 "NULL" "-470.372, 705.791, 4.886" "0,90,0" "NULL" diff --git a/data/trackassembly/exp/sv_TRACKASSEMBLY_ADDITIONS.txt b/data/trackassembly/exp/sv_TRACKASSEMBLY_ADDITIONS.txt deleted file mode 100644 index d3a9646f..00000000 --- a/data/trackassembly/exp/sv_TRACKASSEMBLY_ADDITIONS.txt +++ /dev/null @@ -1,8 +0,0 @@ -# StoreExternalDatabase( INS ): 01/22/17 17:15:10 [ LUA ] -# Data settings: MODELBASE,MODELADD,ENTCLASS,LINEID,POSOFF,ANGOFF,MOVETYPE,PHYSINIT,DRSHADOW,PHMOTION,PHYSLEEP,SETSOLID - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/sw_lever.mdl","buttonswitch",1,"-100,125,0","NULL",-1,-1,-1,0,-1,-1}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/rail_r_switcher1.mdl","prop_dynamic",2,"NULL","NULL",6,6,-1,-1,1,6}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/rail_r_switcher2.mdl","prop_dynamic",3,"NULL","NULL",6,6,-1,0,-1,0}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/sw_lever.mdl","buttonswitch",1,"-100,-125,0","0,180,0",-1,-1,-1,0,-1,-1}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/rail_l_switcher1.mdl","prop_dynamic",2,"NULL","NULL",6,6,-1,-1,1,6}) - asmlib.InsertRecord("ADDITIONS", {"models/shinji85/train/rail_l_switcher2.mdl","prop_dynamic",3,"NULL","NULL",6,6,-1,0,-1,0}) diff --git a/data/trackassembly/exp/sv_TRACKASSEMBLY_PHYSPROPERTIES.txt b/data/trackassembly/exp/sv_TRACKASSEMBLY_PHYSPROPERTIES.txt deleted file mode 100644 index edc68261..00000000 --- a/data/trackassembly/exp/sv_TRACKASSEMBLY_PHYSPROPERTIES.txt +++ /dev/null @@ -1,91 +0,0 @@ -# StoreExternalDatabase( INS ): 01/22/17 17:15:10 [ LUA ] -# Data settings: TYPE,LINEID,NAME - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",1,"default"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",2,"default_silent"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",3,"floatingstandable"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",4,"item"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",5,"ladder"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",6,"no_decal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",7,"player"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Special",8,"player_control_clip"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",1,"brick"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",2,"concrete"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",3,"concrete_block"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",4,"gravel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Concrete",5,"rock"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",1,"canister"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",2,"chain"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",3,"chainlink"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",4,"combine_metal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",5,"crowbar"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",6,"floating_metal_barrel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",7,"grenade"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",8,"gunship"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",9,"metal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",10,"metal_barrel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",11,"metal_bouncy"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",12,"Metal_Box"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",13,"metal_seafloorcar"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",14,"metalgrate"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",15,"metalpanel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",16,"metalvent"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",17,"metalvehicle"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",18,"paintcan"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",19,"popcan"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",20,"roller"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",21,"slipperymetal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",22,"solidmetal"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",23,"strider"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Metal",24,"weapon"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",1,"wood"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",2,"Wood_Box"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",3,"Wood_Furniture"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",4,"Wood_Plank"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",5,"Wood_Panel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Wood",6,"Wood_Solid"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",1,"dirt"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",2,"grass"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",3,"gravel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",4,"mud"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",5,"quicksand"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",6,"sand"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",7,"slipperyslime"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Terrain",8,"antlionsand"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Liquid",1,"slime"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Liquid",2,"water"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Liquid",3,"wade"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Frozen",1,"snow"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Frozen",2,"ice"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Frozen",3,"gmod_ice"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Miscellaneous",1,"carpet"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Miscellaneous",2,"ceiling_tile"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Miscellaneous",3,"computer"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Miscellaneous",4,"pottery"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",1,"alienflesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",2,"antlion"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",3,"armorflesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",4,"bloodyflesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",5,"flesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",6,"foliage"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",7,"watermelon"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Organic",8,"zombieflesh"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",1,"jeeptire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",2,"jalopytire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",3,"rubber"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",4,"rubbertire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",5,"slidingrubbertire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",6,"slidingrubbertire_front"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",7,"slidingrubbertire_rear"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",8,"brakingrubbertire"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",9,"tile"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",10,"paper"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",11,"papercup"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",12,"cardboard"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",13,"plaster"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",14,"plastic_barrel"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",15,"plastic_barrel_buoyant"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",16,"Plastic_Box"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",17,"plastic"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",18,"glass"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",19,"glassbottle"}) - asmlib.InsertRecord("PHYSPROPERTIES", {"Manufactured",20,"combine_glass"}) diff --git a/data/trackassembly/exp/sv_TRACKASSEMBLY_PIECES.txt b/data/trackassembly/exp/sv_TRACKASSEMBLY_PIECES.txt deleted file mode 100644 index ff679a57..00000000 --- a/data/trackassembly/exp/sv_TRACKASSEMBLY_PIECES.txt +++ /dev/null @@ -1,2366 +0,0 @@ -# StoreExternalDatabase( INS ): 01/22/17 17:15:09 [ LUA ] -# Data settings: MODEL,TYPE,NAME,LINEID,POINT,ORIGIN,ANGLE,CLASS - asmlib.InsertRecord("PIECES", {"models/craptrax/curve_cs_std/curve_cs_std_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curve_cs_std/curve_cs_std_damaged.mdl","Battleship's abandoned rails","#",2,"","-966.40771,127.97242,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curve_cs_std/curve_cs_std_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curve_cs_std/curve_cs_std_nodamage.mdl","Battleship's abandoned rails","#",2,"","-966.40771,127.97242,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver1/curve_r1_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver1/curve_r1_damaged.mdl","Battleship's abandoned rails","#",2,"","-1060.13232,139.53517,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver1/curve_r1_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver1/curve_r1_nodamage.mdl","Battleship's abandoned rails","#",2,"","-1060.13232,139.53517,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver11/curve_r11_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver11/curve_r11_damaged.mdl","Battleship's abandoned rails","#",2,"","-1086.07532,450.1528,-16.110403","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver11/curve_r11_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver11/curve_r11_nodamage.mdl","Battleship's abandoned rails","#",2,"","-1086.07532,450.1528,-16.110403","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver2/curve_r2_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver2/curve_r2_damaged.mdl","Battleship's abandoned rails","#",2,"","-993.86975,130.8159,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver2/curve_r2_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver2/curve_r2_nodamage.mdl","Battleship's abandoned rails","#",2,"","-993.86975,130.8159,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver3/curve_r3_damaged.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver3/curve_r3_damaged.mdl","Battleship's abandoned rails","#",2,"","-927.61951,122.07793,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver3/curve_r3_nodamage.mdl","Battleship's abandoned rails","#",1,"","0,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/curver3/curve_r3_nodamage.mdl","Battleship's abandoned rails","#",2,"","-927.61951,122.07793,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight1x/straight_1x_damaged.mdl","Battleship's abandoned rails","#",1,"","64,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight1x/straight_1x_damaged.mdl","Battleship's abandoned rails","#",2,"","-64,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight1x/straight_1x_nodamage.mdl","Battleship's abandoned rails","#",1,"","64,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight1x/straight_1x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-64,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight2x/straight_2x_damaged.mdl","Battleship's abandoned rails","#",1,"","128,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight2x/straight_2x_damaged.mdl","Battleship's abandoned rails","#",2,"","-128,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight2x/straight_2x_nodamage.mdl","Battleship's abandoned rails","#",1,"","128,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight2x/straight_2x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-128,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight3x/straight_3x_damaged.mdl","Battleship's abandoned rails","#",1,"","192,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight3x/straight_3x_damaged.mdl","Battleship's abandoned rails","#",2,"","-192,0,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight3x/straight_3x_nodamage.mdl","Battleship's abandoned rails","#",1,"","192,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight3x/straight_3x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-192,0,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight4x/straight_4x_damaged.mdl","Battleship's abandoned rails","#",1,"","256,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight4x/straight_4x_damaged.mdl","Battleship's abandoned rails","#",2,"","-256,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight4x/straight_4x_nodamage.mdl","Battleship's abandoned rails","#",1,"","256,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight4x/straight_4x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-256,0,-16.110403","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight8x/straight_8x_damaged.mdl","Battleship's abandoned rails","#",1,"","512,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight8x/straight_8x_damaged.mdl","Battleship's abandoned rails","#",2,"","-512,0,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight8x/straight_8x_nodamage.mdl","Battleship's abandoned rails","#",1,"","512,0,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight8x/straight_8x_nodamage.mdl","Battleship's abandoned rails","#",2,"","-512,0,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight_cs_std/straight_cs_std_damaged.mdl","Battleship's abandoned rails","#",1,"","454.40574,0.01251,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight_cs_std/straight_cs_std_damaged.mdl","Battleship's abandoned rails","#",2,"","-454.40574,0.01248,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight_cs_std/straight_cs_std_nodamage.mdl","Battleship's abandoned rails","#",1,"","454.40574,0.01251,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/straight_cs_std/straight_cs_std_nodamage.mdl","Battleship's abandoned rails","#",2,"","-454.40574,0.01248,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_left_std/switch_left_base_std.mdl","Battleship's abandoned rails","#",1,"","512,-0.000545,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_left_std/switch_left_base_std.mdl","Battleship's abandoned rails","#",2,"","-512,-0.000545,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_left_std/switch_left_base_std.mdl","Battleship's abandoned rails","#",3,"","-454.49805,-128.04355,-16.110403","0,-165,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_right_std/switch_right_base_std.mdl","Battleship's abandoned rails","#",1,"","512,3e-005,-16.110403","",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_right_std/switch_right_base_std.mdl","Battleship's abandoned rails","#",2,"","-512,-3e-005,-16.110403","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/craptrax/switch_right_std/switch_right_base_std.mdl","Battleship's abandoned rails","#",3,"","-454.48437,128.0936,-16.110403","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/misc/cross.mdl","Bobster's two feet rails","#",1,"","83,0,3.015","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/misc/cross.mdl","Bobster's two feet rails","#",2,"","0.003,83,3.015","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/misc/cross.mdl","Bobster's two feet rails","#",3,"","-83,0.003,3.015","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/misc/cross.mdl","Bobster's two feet rails","#",4,"","0,-83,3.015","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_1024.mdl","Bobster's two feet rails","#",2,"","249.471,49.621,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_2048.mdl","Bobster's two feet rails","#",2,"","498.941,99.246,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_left_512.mdl","Bobster's two feet rails","#",2,"","124.735,24.812,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_1024.mdl","Bobster's two feet rails","#",2,"","249.471,-49.623,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_2048.mdl","Bobster's two feet rails","#",2,"","498.945,-99.237,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_225_right_512.mdl","Bobster's two feet rails","#",2,"","124.736,-24.811,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_1024.mdl","Bobster's two feet rails","#",2,"","460.962,190.936,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_2048.mdl","Bobster's two feet rails","#",2,"","921.925,381.872,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_left_512.mdl","Bobster's two feet rails","#",2,"","230.481,95.468,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_1024.mdl","Bobster's two feet rails","#",2,"","460.963,-190.936,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_2048.mdl","Bobster's two feet rails","#",2,"","921.925,-381.872,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_45_right_512.mdl","Bobster's two feet rails","#",2,"","230.481,-95.469,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_1024.mdl","Bobster's two feet rails","#",2,"","651.898,651.898,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_2048.mdl","Bobster's two feet rails","#",2,"","1303.797,1303.797,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_left_512.mdl","Bobster's two feet rails","#",2,"","325.949,325.95,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_1024.mdl","Bobster's two feet rails","#",2,"","651.898,-651.899,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_2048.mdl","Bobster's two feet rails","#",2,"","1303.797,-1303.797,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_90_right_512.mdl","Bobster's two feet rails","#",2,"","325.949,-325.949,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_1024.mdl","Bobster's two feet rails","#",2,"","651.899,651.898,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_2048.mdl","Bobster's two feet rails","#",2,"","1303.797,1303.797,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_left_512.mdl","Bobster's two feet rails","#",2,"","325.949,325.949,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_1024.mdl","Bobster's two feet rails","#",2,"","651.926,-651.874,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_2048.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_2048.mdl","Bobster's two feet rails","#",2,"","1303.798,-1303.797,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_bank_90_right_512.mdl","Bobster's two feet rails","#",2,"","325.949,-325.949,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_1024.mdl","Bobster's two feet rails","#",2,"","249.471,49.621,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_left_512.mdl","Bobster's two feet rails","#",2,"","124.735,24.812,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_1024.mdl","Bobster's two feet rails","#",2,"","249.471,-49.623,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_225_right_512.mdl","Bobster's two feet rails","#",2,"","124.736,-24.811,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_1024.mdl","Bobster's two feet rails","#",2,"","460.962,190.936,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_left_512.mdl","Bobster's two feet rails","#",2,"","230.481,95.468,3.016","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_1024.mdl","Bobster's two feet rails","#",2,"","460.963,-190.936,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_45_right_512.mdl","Bobster's two feet rails","#",2,"","230.481,-95.469,3.016","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_1024.mdl","Bobster's two feet rails","#",2,"","651.898,651.898,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_left_512.mdl","Bobster's two feet rails","#",2,"","325.949,325.95,3.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_1024.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_1024.mdl","Bobster's two feet rails","#",2,"","651.898,-651.899,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_512.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/curves/curve_rack_90_right_512.mdl","Bobster's two feet rails","#",2,"","325.949,-325.949,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_1024.mdl","Bobster's two feet rails","#",1,"","512,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_1024.mdl","Bobster's two feet rails","#",2,"","-512,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_128.mdl","Bobster's two feet rails","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_128.mdl","Bobster's two feet rails","#",2,"","-64,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_16.mdl","Bobster's two feet rails","#",1,"0,-32,1.5","8,0,3.017","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_16.mdl","Bobster's two feet rails","#",2,"0,32,1.5","-8,0,3.017","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_2048.mdl","Bobster's two feet rails","#",1,"","1024,0,3.017","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_2048.mdl","Bobster's two feet rails","#",2,"","-1024,0,3.017","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_256.mdl","Bobster's two feet rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_256.mdl","Bobster's two feet rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_32.mdl","Bobster's two feet rails","#",1,"0,-32,1.5","16,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_32.mdl","Bobster's two feet rails","#",2,"0,32,1.5","-16,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_4096.mdl","Bobster's two feet rails","#",1,"","2048,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_4096.mdl","Bobster's two feet rails","#",2,"","-2048,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_512.mdl","Bobster's two feet rails","#",1,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_512.mdl","Bobster's two feet rails","#",2,"","-256,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_64.mdl","Bobster's two feet rails","#",1,"","32,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_64.mdl","Bobster's two feet rails","#",2,"","-32,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_bank_left.mdl","Bobster's two feet rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_bank_left.mdl","Bobster's two feet rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_bank_right.mdl","Bobster's two feet rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_bank_right.mdl","Bobster's two feet rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_1024.mdl","Bobster's two feet rails","#",1,"","512,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_1024.mdl","Bobster's two feet rails","#",2,"","-512,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_128.mdl","Bobster's two feet rails","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_128.mdl","Bobster's two feet rails","#",2,"","-64,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_16.mdl","Bobster's two feet rails","#",1,"0,-32,1.5","8,0,3.017","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_16.mdl","Bobster's two feet rails","#",2,"0,32,1.5","-8,0,3.017","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_256.mdl","Bobster's two feet rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_256.mdl","Bobster's two feet rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_32.mdl","Bobster's two feet rails","#",1,"0,-32,1.5","16,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_32.mdl","Bobster's two feet rails","#",2,"0,32,1.5","-16,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_512.mdl","Bobster's two feet rails","#",1,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_512.mdl","Bobster's two feet rails","#",2,"","-256,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_64.mdl","Bobster's two feet rails","#",1,"","32,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/straight_rack_64.mdl","Bobster's two feet rails","#",2,"","-32,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl","Bobster's two feet rails","#",2,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_switched.mdl","Bobster's two feet rails","#",3,"","262.471,49.622,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl","Bobster's two feet rails","#",2,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_left_unswitched.mdl","Bobster's two feet rails","#",3,"","262.471,49.622,3.016","0,22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl","Bobster's two feet rails","#",2,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_switched.mdl","Bobster's two feet rails","#",3,"","262.472,-49.622,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl","Bobster's two feet rails","#",1,"","0,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl","Bobster's two feet rails","#",2,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/bobsters_trains/rails/2ft/switches/switch_right_unswitched.mdl","Bobster's two feet rails","#",3,"","262.472,-49.622,3.016","0,-22.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/blocks/cube025x025x025.mdl","Develop PHX","x1",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/blocks/cube05x05x05.mdl","Develop PHX","x2",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/blocks/cube075x075x075.mdl","Develop PHX","x3",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/blocks/cube1x1x1.mdl","Develop PHX","x4",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height06/size_1/cube_6x6x6.mdl","Develop Sprops","x1",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height12/size_1/cube_12x12x12.mdl","Develop Sprops","x2",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/non_set/cube_18x18x18.mdl","Develop Sprops","x3",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height24/size_1/cube_24x24x24.mdl","Develop Sprops","x4",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height36/size_1/cube_36x36x36.mdl","Develop Sprops","x5",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/cuboids/height48/size_1/cube_48x48x48.mdl","Develop Sprops","x6",1,"","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/props_c17/furniturewashingmachine001a.mdl","Develop Test","#",1,"","-0.05,0.006,21.934","#@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_c17/furniturewashingmachine001a.mdl","Develop Test","#",2,"","-0.05,0.006,-21.922","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/225l.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/225l.mdl","G Scale Track Pack","#",2,"","-196.060471,-39.081982,1.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/225r.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/225r.mdl","G Scale Track Pack","#",2,"","-196.060471,39.081982,1.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/45l.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/45l.mdl","G Scale Track Pack","#",2,"","-362,-150,1.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/45r.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/45r.mdl","G Scale Track Pack","#",2,"","-362,150,1.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/90l.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/90l.mdl","G Scale Track Pack","#",2,"","-512,-512,1.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/90r.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/90r.mdl","G Scale Track Pack","#",2,"","-512,512,1.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_s.mdl","G Scale Track Pack","#",3,"","-196.060471,-39.081982,1.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_s.mdl","G Scale Track Pack","#",3,"","-392,-78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_s.mdl","G Scale Track Pack","#",4,"","-136,-78,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_s.mdl","G Scale Track Pack","#",3,"","-392,-78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/l225_t.mdl","G Scale Track Pack","#",3,"","-196.060471,-39.081982,1.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_t.mdl","G Scale Track Pack","#",3,"","-392,-78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/l225_t.mdl","G Scale Track Pack","#",4,"","-136,-78,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/l225_t.mdl","G Scale Track Pack","#",3,"","-392,-78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0032.mdl","G Scale Track Pack","#",1,"","32,0,2.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0032.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0064.mdl","G Scale Track Pack","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0064.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0128.mdl","G Scale Track Pack","#",1,"","128,0,5.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0128.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0256.mdl","G Scale Track Pack","#",1,"","256,0,9.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0256.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0512.mdl","G Scale Track Pack","#",1,"","512,0,17.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r0512.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r1024.mdl","G Scale Track Pack","#",1,"","1024,0,33.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ramp313/r1024.mdl","G Scale Track Pack","#",2,"","0,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_s.mdl","G Scale Track Pack","#",3,"","-196.060471,39.081982,1.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_s.mdl","G Scale Track Pack","#",3,"","-392,78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_s.mdl","G Scale Track Pack","#",4,"","-136,78,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_s.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_s.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_s.mdl","G Scale Track Pack","#",3,"","-392,78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/j/r225_t.mdl","G Scale Track Pack","#",3,"","-196.060471,39.081982,1.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_t.mdl","G Scale Track Pack","#",3,"","-392,78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/s/r225_t.mdl","G Scale Track Pack","#",4,"","-136,78,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_t.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/siding/r225_t.mdl","G Scale Track Pack","#",3,"","-392,78,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0008.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0008.mdl","G Scale Track Pack","#",2,"","-8,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0016.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0016.mdl","G Scale Track Pack","#",2,"","-16,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0032.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0032.mdl","G Scale Track Pack","#",2,"","-32,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0032.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0032.mdl","G Scale Track Pack","#",2,"","-32,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0064.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0064.mdl","G Scale Track Pack","#",2,"","-64,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0064.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0064.mdl","G Scale Track Pack","#",2,"","-64,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0128.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0128.mdl","G Scale Track Pack","#",2,"","-128,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0128.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0128.mdl","G Scale Track Pack","#",2,"","-128,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0256.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0256.mdl","G Scale Track Pack","#",2,"","-256,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0256.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0256.mdl","G Scale Track Pack","#",2,"","-256,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0512.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s0512.mdl","G Scale Track Pack","#",2,"","-512,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0512.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s0512.mdl","G Scale Track Pack","#",2,"","-512,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s1024.mdl","G Scale Track Pack","#",1,"","0,0,25.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/ibeam/s1024.mdl","G Scale Track Pack","#",2,"","-1024,0,25.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s1024.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/straight/s1024.mdl","G Scale Track Pack","#",2,"","-1024,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/s225l.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/s225l.mdl","G Scale Track Pack","#",2,"","-392,-78.125595,1.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/s225r.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/c0512/s225r.mdl","G Scale Track Pack","#",2,"","-392,78.125595,1.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_s_1.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_s_1.mdl","G Scale Track Pack","#",2,"","-32,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_s_2.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_s_2.mdl","G Scale Track Pack","#",2,"","-32,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_t.mdl","G Scale Track Pack","#",1,"","0,0,1.016","",""}) - asmlib.InsertRecord("PIECES", {"models/gscale/transition/t0032_q_t.mdl","G Scale Track Pack","#",2,"","-32,0,1.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_225.mdl","Magnum's Rails","#",1,"","-0.01,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_225.mdl","Magnum's Rails","#",2,"","-587.955,-117.702,3.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_45.mdl","Magnum's Rails","#",1,"","-0.012,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_45.mdl","Magnum's Rails","#",2,"","-1087.089,-451.055,3.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_90.mdl","Magnum's Rails","#",1,"","1086.58,450.079,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/curve_90.mdl","Magnum's Rails","#",2,"","-449.475,-1085.92,3.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0032.mdl","Magnum's Rails","#",1,"","16,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0032.mdl","Magnum's Rails","#",2,"","-16,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0064.mdl","Magnum's Rails","#",1,"","32,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0064.mdl","Magnum's Rails","#",2,"","-32,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0128.mdl","Magnum's Rails","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0128.mdl","Magnum's Rails","#",2,"","-64,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0256.mdl","Magnum's Rails","#",1,"","128,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0256.mdl","Magnum's Rails","#",2,"","-128,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0512.mdl","Magnum's Rails","#",1,"","256,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_0512.mdl","Magnum's Rails","#",2,"","-256,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_1024.mdl","Magnum's Rails","#",1,"","512,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_1024.mdl","Magnum's Rails","#",2,"","-512,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_2048.mdl","Magnum's Rails","#",1,"","1024,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/magtrains1ga/straight_2048.mdl","Magnum's Rails","#",2,"","-1024,0,3.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_cross_128.mdl","Mr.Train's G-Gauge","#",1,"","64,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_cross_128.mdl","Mr.Train's G-Gauge","#",2,"","0,64,1.516","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_cross_128.mdl","Mr.Train's G-Gauge","#",3,"","-64,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_cross_128.mdl","Mr.Train's G-Gauge","#",4,"","0,-64,1.516","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_1.mdl","Mr.Train's G-Gauge","#",1,"","16,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_1.mdl","Mr.Train's G-Gauge","#",2,"","-16,0,3.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_2.mdl","Mr.Train's G-Gauge","#",1,"","16,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_2.mdl","Mr.Train's G-Gauge","#",2,"","-16,0,4.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_3.mdl","Mr.Train's G-Gauge","#",1,"","16,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_ramp_3.mdl","Mr.Train's G-Gauge","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_s_left_22_5.mdl","Mr.Train's G-Gauge","#",1,"","256,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_s_left_22_5.mdl","Mr.Train's G-Gauge","#",2,"","-256,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_s_right_22_5.mdl","Mr.Train's G-Gauge","#",1,"","256,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_s_right_22_5.mdl","Mr.Train's G-Gauge","#",2,"","-256,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_1024.mdl","Mr.Train's G-Gauge","#",1,"","512,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_1024.mdl","Mr.Train's G-Gauge","#",2,"","-512,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_128.mdl","Mr.Train's G-Gauge","#",1,"","64,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_128.mdl","Mr.Train's G-Gauge","#",2,"","-64,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_2048.mdl","Mr.Train's G-Gauge","#",1,"","1024,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_2048.mdl","Mr.Train's G-Gauge","#",2,"","-1024,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_256.mdl","Mr.Train's G-Gauge","#",1,"","128,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_256.mdl","Mr.Train's G-Gauge","#",2,"","-128,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_32.mdl","Mr.Train's G-Gauge","#",1,"","16,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_32.mdl","Mr.Train's G-Gauge","#",2,"","-16,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_512.mdl","Mr.Train's G-Gauge","#",1,"","256,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_512.mdl","Mr.Train's G-Gauge","#",2,"","-256,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_64.mdl","Mr.Train's G-Gauge","#",1,"","32,0,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_straight_64.mdl","Mr.Train's G-Gauge","#",2,"","-32,0,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl","Mr.Train's G-Gauge","#",1,"","256,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl","Mr.Train's G-Gauge","#",2,"","0,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_1.mdl","Mr.Train's G-Gauge","#",3,"","-256,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl","Mr.Train's G-Gauge","#",1,"","256,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl","Mr.Train's G-Gauge","#",2,"","0,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_left_2.mdl","Mr.Train's G-Gauge","#",3,"","-256,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl","Mr.Train's G-Gauge","#",1,"","256,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl","Mr.Train's G-Gauge","#",2,"","0,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_1.mdl","Mr.Train's G-Gauge","#",3,"","-256,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl","Mr.Train's G-Gauge","#",1,"","256,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl","Mr.Train's G-Gauge","#",2,"","0,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_1_right_2.mdl","Mr.Train's G-Gauge","#",3,"","-256,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl","Mr.Train's G-Gauge","#",1,"","195.938,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl","Mr.Train's G-Gauge","#",2,"","195.938,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl","Mr.Train's G-Gauge","#",3,"","-195.937,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_1.mdl","Mr.Train's G-Gauge","#",4,"","-195.937,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl","Mr.Train's G-Gauge","#",1,"","195.938,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl","Mr.Train's G-Gauge","#",2,"","195.938,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl","Mr.Train's G-Gauge","#",3,"","-195.937,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_left_2.mdl","Mr.Train's G-Gauge","#",4,"","-195.937,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl","Mr.Train's G-Gauge","#",1,"","195.938,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl","Mr.Train's G-Gauge","#",2,"","195.938,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl","Mr.Train's G-Gauge","#",3,"","-195.937,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_1.mdl","Mr.Train's G-Gauge","#",4,"","-195.937,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl","Mr.Train's G-Gauge","#",1,"","195.938,39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl","Mr.Train's G-Gauge","#",2,"","195.938,-39,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl","Mr.Train's G-Gauge","#",3,"","-195.937,-39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_switch_2_right_2.mdl","Mr.Train's G-Gauge","#",4,"","-195.937,39,1.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_22_5.mdl","Mr.Train's G-Gauge","#",1,"","263.75,248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_22_5.mdl","Mr.Train's G-Gauge","#",2,"","67.855,209.265,1.516","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_45.mdl","Mr.Train's G-Gauge","#",1,"","263.75,248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_45.mdl","Mr.Train's G-Gauge","#",2,"","-98.326,98.323,1.516","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_90.mdl","Mr.Train's G-Gauge","#",1,"","263.75,248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_left_90.mdl","Mr.Train's G-Gauge","#",2,"","-248.25,-263.75,1.516","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_22_5.mdl","Mr.Train's G-Gauge","#",1,"","263.75,-248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_22_5.mdl","Mr.Train's G-Gauge","#",2,"","67.872,-209.299,1.516","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_45.mdl","Mr.Train's G-Gauge","#",1,"","263.75,-248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_45.mdl","Mr.Train's G-Gauge","#",2,"","-98.302,-98.302,1.516","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_90.mdl","Mr.Train's G-Gauge","#",1,"","263.75,-248.25,1.516","",""}) - asmlib.InsertRecord("PIECES", {"models/props/g_gauge/track/g_gauge_track_turn_right_90.mdl","Mr.Train's G-Gauge","#",2,"","-248.25,263.75,1.516","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_1024.mdl","Mr.Train's M-Gauge","#",1,"","512,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_1024.mdl","Mr.Train's M-Gauge","#",2,"","-512,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128_cross.mdl","Mr.Train's M-Gauge","#",1,"","64,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128_cross.mdl","Mr.Train's M-Gauge","#",2,"","0,64,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128_cross.mdl","Mr.Train's M-Gauge","#",3,"","-64,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128_cross.mdl","Mr.Train's M-Gauge","#",4,"","0,-64,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128.mdl","Mr.Train's M-Gauge","#",1,"","64,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_128.mdl","Mr.Train's M-Gauge","#",2,"","-64,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_2048.mdl","Mr.Train's M-Gauge","#",1,"","1024,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_2048.mdl","Mr.Train's M-Gauge","#",2,"","-1024,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_256.mdl","Mr.Train's M-Gauge","#",1,"","128,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_256.mdl","Mr.Train's M-Gauge","#",2,"","-128,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_32.mdl","Mr.Train's M-Gauge","#",1,"","16,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_32.mdl","Mr.Train's M-Gauge","#",2,"","-16,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_4096.mdl","Mr.Train's M-Gauge","#",1,"","2048,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_4096.mdl","Mr.Train's M-Gauge","#",2,"","-2048,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_512.mdl","Mr.Train's M-Gauge","#",1,"","256,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_512.mdl","Mr.Train's M-Gauge","#",2,"","-256,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_64.mdl","Mr.Train's M-Gauge","#",1,"","32,0,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_64.mdl","Mr.Train's M-Gauge","#",2,"","-32,0,0.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_1024_45.mdl","Mr.Train's M-Gauge","#",1,"","518.5,505.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_1024_45.mdl","Mr.Train's M-Gauge","#",2,"","-205.608,205.607,0.014","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_1024.mdl","Mr.Train's M-Gauge","#",1,"","518.5,505.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_1024.mdl","Mr.Train's M-Gauge","#",2,"","-505.5,-518.5,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_256.mdl","Mr.Train's M-Gauge","#",1,"","134.497,121.499,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_256.mdl","Mr.Train's M-Gauge","#",2,"","-121.5,-134.5,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_512_45.mdl","Mr.Train's M-Gauge","#",1,"","262.5,-249.497,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_512_45.mdl","Mr.Train's M-Gauge","#",2,"","-99.51,-99.507,0.015","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_512.mdl","Mr.Train's M-Gauge","#",1,"","262.5,249.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_512.mdl","Mr.Train's M-Gauge","#",2,"","-249.5,-262.5,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_768_45.mdl","Mr.Train's M-Gauge","#",1,"","383.625,370.625,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_768_45.mdl","Mr.Train's M-Gauge","#",2,"","-149.73,149.729,0.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_768.mdl","Mr.Train's M-Gauge","#",1,"","383.625,370.625,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_left_768.mdl","Mr.Train's M-Gauge","#",2,"","-370.625,-383.625,0.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_1024_45.mdl","Mr.Train's M-Gauge","#",1,"","518.5,-505.498,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_1024_45.mdl","Mr.Train's M-Gauge","#",2,"","-205.621,-205.618,0.014","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_1024.mdl","Mr.Train's M-Gauge","#",1,"","518.5,-505.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_1024.mdl","Mr.Train's M-Gauge","#",2,"","-505.5,518.5,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_256.mdl","Mr.Train's M-Gauge","#",1,"","134.5,-121.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_256.mdl","Mr.Train's M-Gauge","#",2,"","-121.5,134.5,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_512.mdl","Mr.Train's M-Gauge","#",1,"","262.5,-249.5,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_512.mdl","Mr.Train's M-Gauge","#",2,"","-249.5,262.5,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_768_45.mdl","Mr.Train's M-Gauge","#",1,"","383.625,-370.625,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_768_45.mdl","Mr.Train's M-Gauge","#",2,"","-149.758,-149.751,0.012","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_768.mdl","Mr.Train's M-Gauge","#",1,"","383.625,-370.625,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_right_768.mdl","Mr.Train's M-Gauge","#",2,"","-370.625,383.625,0.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl","Mr.Train's M-Gauge","#",1,"","75,-75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl","Mr.Train's M-Gauge","#",2,"","203,75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl","Mr.Train's M-Gauge","#",3,"","-75,75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sl.mdl","Mr.Train's M-Gauge","#",4,"","-203,-75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl","Mr.Train's M-Gauge","#",1,"","203,-75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl","Mr.Train's M-Gauge","#",2,"","75,75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl","Mr.Train's M-Gauge","#",3,"","-203,75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover_sr.mdl","Mr.Train's M-Gauge","#",4,"","-75,-75,-2.485","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover.mdl","Mr.Train's M-Gauge","#",1,"","203,-75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover.mdl","Mr.Train's M-Gauge","#",2,"","203,75,-2.484","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover.mdl","Mr.Train's M-Gauge","#",3,"","-203,75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_crossover.mdl","Mr.Train's M-Gauge","#",4,"","-203,-75,-2.484","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_lefthand.mdl","Mr.Train's M-Gauge","#",1,"","0,-10,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_lefthand.mdl","Mr.Train's M-Gauge","#",2,"","-256,-10,0.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_lefthand.mdl","Mr.Train's M-Gauge","#",3,"","-384,-160,0.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_righthand.mdl","Mr.Train's M-Gauge","#",1,"","0,10,0.016","",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_righthand.mdl","Mr.Train's M-Gauge","#",2,"","-384,160,0.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/m_gauge/track/m_gauge_switch_righthand.mdl","Mr.Train's M-Gauge","#",3,"","-256,10,0.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_1024.mdl","PHX Metal","#",1,"","511.754761,-4.7e-005,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_1024.mdl","PHX Metal","#",2,"","-512.240601,-0.050828,9.215","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_128.mdl","PHX Metal","#",1,"","63.75531,0.001953,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_128.mdl","PHX Metal","#",2,"","-64.240356,-0.005125,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_2048.mdl","PHX Metal","#",1,"","1023.755066,0.000642,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_2048.mdl","PHX Metal","#",2,"","-1024.242676,-0.109433,9.215","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_256.mdl","PHX Metal","#",1,"","127.754944,0.001953,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_256.mdl","PHX Metal","#",2,"","-128.245117,-0.012207,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_32.mdl","PHX Metal","#",1,"-0.327,-61.529,8.714","15.755127,0.001953,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_32.mdl","PHX Metal","#",2,"-0.327,61.529,8.714","-16.239746,0.000244,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_4096.mdl","PHX Metal","#",1,"","2047.755249,0.001923,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_4096.mdl","PHX Metal","#",2,"","-2048.240479,-0.225247,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_512.mdl","PHX Metal","#",1,"","255.754791,0.001465,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_512.mdl","PHX Metal","#",2,"","-256.242401,-0.026855,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_64.mdl","PHX Metal","#",1,"","31.999878,0.00196,9.215","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/track_64.mdl","PHX Metal","#",2,"","-32.000275,-0.001469,9.215","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam1.mdl","PHX Monorail Beam","#",1,"","22.411,0.001,5.002","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam1.mdl","PHX Monorail Beam","#",2,"","-22.413,0.001,5.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam2.mdl","PHX Monorail Beam","#",1,"","45.298,0.001,5.002","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam2.mdl","PHX Monorail Beam","#",2,"","-46.968,0.001,5.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam3.mdl","PHX Monorail Beam","#",1,"","93.069,0,5.002","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam3.mdl","PHX Monorail Beam","#",2,"","-94.079,0.002,5.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam4.mdl","PHX Monorail Beam","#",1,"","175.507,0.001,5.002","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/iron_beam4.mdl","PHX Monorail Beam","#",2,"","-201.413,0.001,5.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail3.mdl","PHX Monorail","Straight Long",1,"","0.239949,-934.135559,13.879116","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail3.mdl","PHX Monorail","Straight Long",2,"","0.239705,930.885315,13.87915","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail2.mdl","PHX Monorail","Straight Middle",1,"","0.239726,-462.635468,13.879296","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail2.mdl","PHX Monorail","Straight Middle",2,"","0.239914,464.885315,13.879209","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail1.mdl","PHX Monorail","Straight Short",1,"","229.885559,0.23999,13.87915","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail1.mdl","PHX Monorail","Straight Short",2,"","-228.885254,0.239726,13.87915","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail4.mdl","PHX Monorail","Straight Very Long",1,"","0.239664,-1867.13562,13.879143","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail4.mdl","PHX Monorail","Straight Very Long",2,"","0.239664,1872.885376,13.87915","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail_curve2.mdl","PHX Monorail","Turn 45",1,"","-0.030396,-605.638428,13.881409","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail_curve2.mdl","PHX Monorail","Turn 45",2,"","-428.018524,-428.362335,13.881714","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail_curve.mdl","PHX Monorail","Turn 90",1,"","-0.030518,-605.638184,13.880554","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/monorail_curve.mdl","PHX Monorail","Turn 90",2,"","-605.380859,-0.307583,13.881714","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_16x.mdl","PHX Regular","16x",1,"","2029.797363,0.000133,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_16x.mdl","PHX Regular","16x",2,"","-370.036865,-2e-060,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_1x.mdl","PHX Regular","1x",1,"","79.929352,0,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_1x.mdl","PHX Regular","1x",2,"","-70.05806,6e-006,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_225_down.mdl","PHX Regular","225 Down",1,"","-75.016,-0.006,64.57","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_225_down.mdl","PHX Regular","225 Down",2,"","4.096,-0.007,48.791","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_225_up.mdl","PHX Regular","225 Up",1,"","-75.016,0.007,11.212","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_225_up.mdl","PHX Regular","225 Up",2,"","4.196,0,27.054","@-22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_2x.mdl","PHX Regular","2x",1,"","229.919388,0,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_2x.mdl","PHX Regular","2x",2,"","-70.05806,-6e-006,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_45_down.mdl","PHX Regular","45 Down",1,"-75.016,-0.002,64.568","-75.013,-0.002,64.568","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_45_down.mdl","PHX Regular","45 Down",2,"","71.037,-0.018,3.951","@45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_45_up.mdl","PHX Regular","45 Up",1,"","-75.013,0.007,11.218","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_45_up.mdl","PHX Regular","45 Up",2,"","71.173,0.003,71.909","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_4x.mdl","PHX Regular","4x",1,"","229.919388,3.1e-005,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_4x.mdl","PHX Regular","4x",2,"","-370.037079,-3.2e-005,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_8x.mdl","PHX Regular","8x",1,"","829.878418,3.8e-005,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_8x.mdl","PHX Regular","8x",2,"","-370.036865,-2.5e-005,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_x.mdl","PHX Regular","Cross 45",1,"","250.473389,49.613159,11.214844","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_x.mdl","PHX Regular","Cross 45",2,"","-349.483032,49.613129,11.214844","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_x.mdl","PHX Regular","Cross 45",3,"","162.610229,-162.4935,11.214844","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_x.mdl","PHX Regular","Cross 45",4,"","-261.623718,261.740234,11.214844","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_crossing.mdl","PHX Regular","Cross 90",1,"","74.973145,1e-005,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_crossing.mdl","PHX Regular","Cross 90",2,"","-75.013794,-7e-006,12.548828","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_crossing.mdl","PHX Regular","Cross 90",3,"","-0.022434,74.999878,12.548828","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_crossing.mdl","PHX Regular","Cross 90",4,"","-0.022434,-74.987061,12.548828","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_pass.mdl","PHX Regular","Cross Road",1,"","229.920044,2e-005,11.214844","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_pass.mdl","PHX Regular","Cross Road",2,"","-370.036377,2e-006,11.214844","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_single.mdl","PHX Regular","Single",1,"-0.327,-61.529,8.714","15.451782,1.5e-005,12.548828","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_single.mdl","PHX Regular","Single",2,"-0.327,61.529,8.714","-16.094971,-1e-006,12.548828","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch2.mdl","PHX Regular","Switch Left [X]",1,"","829.880005,-0.001465,11.218994","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch2.mdl","PHX Regular","Switch Left [X]",2,"","-370.037262,-0.000456,11.218994","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch2.mdl","PHX Regular","Switch Left [X]",3,"","-158.311356,-338.111572,11.218994","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch.mdl","PHX Regular","Switch Right",1,"","829.8797,0.001587,11.218994","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch.mdl","PHX Regular","Switch Right",2,"","-370.037231,0.000256,11.218994","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_switch.mdl","PHX Regular","Switch Right",3,"","-158.311737,338.107941,11.218994","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_turn45.mdl","PHX Regular","Turn45",1,"","733.000061,-265.363037,11.218994","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_turn45.mdl","PHX Regular","Turn45",2,"","-83.26461,72.744667,11.218994","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_turn90.mdl","PHX Regular","Turn90",1,"","733.000061,-265.363037,11.218994","",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/tracks/track_turn90.mdl","PHX Regular","Turn90",2,"","-421.363312,889.005493,11.218994","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/big_ramp.mdl","PHX Road","#",1,"","-569.177,-7.199953,-3.075","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/big_ramp.mdl","PHX Road","#",2,"","625.022,-7.199953,472.427","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_curve.mdl","PHX Road","#",1,"","162.813,379.277,1.879","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_curve.mdl","PHX Road","#",2,"","-363.22,-146.757,1.879","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_long.mdl","PHX Road","#",1,"","0,1198.773,1.765","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_long.mdl","PHX Road","#",2,"","0,-1198.773,1.765","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_medium.mdl","PHX Road","#",1,"","0,599.386,1.765","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_medium.mdl","PHX Road","#",2,"","0,-599.386,1.765","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_short.mdl","PHX Road","#",1,"","0,299.693,1.765","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/huge/road_short.mdl","PHX Road","#",2,"","0,-299.693,1.765","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/small_ramp.mdl","PHX Road","#",1,"","-284.589,-3.599976,-1.672","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/misc/small_ramp.mdl","PHX Road","#",2,"","312.608,-3.599976,236.11","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle180.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle180.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle360.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle360.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle90.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_angle90.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve180x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.667,47.543","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve180x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve180x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.668,94.993","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve180x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve90x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve90x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve90x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_curve90x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_dome180.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_dome360.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/glass/glass_dome90.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle180.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle180.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle360.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle360.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle90.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_angle90.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_dome180.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_dome360.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_dome90.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve180.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve180.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve180x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.081","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve180x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve2x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve2x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve360.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve360.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_plate_curve.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle180x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.667,47.543","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle180x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle180x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.668,94.993","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle180x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle90x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle90x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle90x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/metal_wire_angle90x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle180.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle180.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle360.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle360.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle90.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_angle90.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve180x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.667,47.543","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve180x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve180x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.668,94.993","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve180x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve90x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve90x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve90x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_curve90x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_dome180.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_dome360.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/windows/window_dome90.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle180.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle180.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle360.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle360.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle90.mdl","PHX Tubes Miscellaneous","#",1,"","-0.001,0,3.258","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_angle90.mdl","PHX Tubes Miscellaneous","#",2,"","-0.001,0,0.255","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve180x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve180x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve180x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.081","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve180x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve90x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve90x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve90x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_curve90x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_dome180.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_dome360.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_dome90.mdl","PHX Tubes Miscellaneous","#",1,"","0,0,0.025","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle180x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.667,47.543","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle180x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle180x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.222,33.668,94.993","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle180x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.667,0.093","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle360x1.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,47.538","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle360x1.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle360x2.mdl","PHX Tubes Miscellaneous","#",1,"","0.02,0,95.076","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle360x2.mdl","PHX Tubes Miscellaneous","#",2,"","0.02,0,0.089","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle90x1.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,47.541","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle90x1.mdl","PHX Tubes Miscellaneous","#",2,"","31.222,33.69,0.095","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle90x2.mdl","PHX Tubes Miscellaneous","#",1,"","31.246,33.667,95.083","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/construct/wood/wood_wire_angle90x2.mdl","PHX Tubes Miscellaneous","#",2,"","31.241,33.671,0.183","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2b.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2c.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2d.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle2x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4c.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4c.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4d.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4d.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/circle4x4.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1a.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1a.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1b.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1b.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1c.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1c.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1d.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole1x1d.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole1x1.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole1x1.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole1x2.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole1x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole2x2.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole2x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole3.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/plates/platehole3.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4c.mdl","PHX Tubes Plastic","#",1,"","47.45,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4c.mdl","PHX Tubes Plastic","#",2,"","47.45,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4d.mdl","PHX Tubes Plastic","#",1,"","47.45,47.45,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4d.mdl","PHX Tubes Plastic","#",2,"","47.45,47.45,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4.mdl","PHX Tubes Plastic","#",1,"","0,0,1.5","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/platehole4x4.mdl","PHX Tubes Plastic","#",2,"","0,0,-1.5","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2a.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2e.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2x45.mdl","PHX Tubes Plastic","#",1,"0,-47.45,0","0,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/misc/shell2x2x45.mdl","PHX Tubes Plastic","#",2,"-33.552,-33.552,0","0,0,0","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1b.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1c.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1d.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x1.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x2.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3b.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3c.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3d.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x3.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4c.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4d.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x4.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5b.mdl","PHX Tubes Plastic","#",1,"","0,0,237.25","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5c.mdl","PHX Tubes Plastic","#",1,"","0,0,237.25","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5d.mdl","PHX Tubes Plastic","#",1,"","0,0,237.25","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5.mdl","PHX Tubes Plastic","#",1,"","0,0,237.25","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x5.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6b.mdl","PHX Tubes Plastic","#",1,"","0,0,284.7","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6c.mdl","PHX Tubes Plastic","#",1,"","0,0,284.7","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6d.mdl","PHX Tubes Plastic","#",1,"","0,0,284.7","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6.mdl","PHX Tubes Plastic","#",1,"","0,0,284.7","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x6.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8b.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8c.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8d.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube1x1x8.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x+.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x+.mdl","PHX Tubes Plastic","#",2,"","0,-47.45,0","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x+.mdl","PHX Tubes Plastic","#",3,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x+.mdl","PHX Tubes Plastic","#",4,"","0,47.45,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025b.mdl","PHX Tubes Plastic","#",1,"","0,0,5.93125","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025b.mdl","PHX Tubes Plastic","#",2,"","0,0,-5.93125","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025c.mdl","PHX Tubes Plastic","#",1,"","0,0,5.93125","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025c.mdl","PHX Tubes Plastic","#",2,"","0,0,-5.93125","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025d.mdl","PHX Tubes Plastic","#",1,"","0,0,5.93125","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025d.mdl","PHX Tubes Plastic","#",2,"","0,0,-5.93125","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025.mdl","PHX Tubes Plastic","#",1,"","0,0,5.93125","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x025.mdl","PHX Tubes Plastic","#",2,"","0,0,-5.93125","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05b.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05b.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05c.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05c.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05d.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05d.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x05.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x16d.mdl","PHX Tubes Plastic","#",1,"","0,0,711.75","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x16d.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1b.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1b.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1c.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1c.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1d.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1d.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x1.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2b.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2c.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2d.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4c.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4c.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4d.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4d.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x4.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8b.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8b.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8c.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8c.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8d.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8d.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2x8.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xta.mdl","PHX Tubes Plastic","#",1,"","0,0,-23.725","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xta.mdl","PHX Tubes Plastic","#",2,"","0,47.45,23.725","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xta.mdl","PHX Tubes Plastic","#",3,"","0,-47.45,23.725","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xtb.mdl","PHX Tubes Plastic","#",1,"","0,-23.725,0","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xtb.mdl","PHX Tubes Plastic","#",2,"","0,23.725,-47.45","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xt.mdl","PHX Tubes Plastic","#",1,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xt.mdl","PHX Tubes Plastic","#",2,"","0,-47.45,0","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube2x2xt.mdl","PHX Tubes Plastic","#",3,"","0,47.45,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025b.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025c.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025c.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025d.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025d.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x025.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05b.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05b.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05c.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05c.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05d.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05d.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05.mdl","PHX Tubes Plastic","#",1,"","0,0,11.8625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x05.mdl","PHX Tubes Plastic","#",2,"","0,0,-11.8625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16b.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16b.mdl","PHX Tubes Plastic","#",2,"","0,0,-379.6","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16c.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16c.mdl","PHX Tubes Plastic","#",2,"","0,0,-379.6","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16d.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16d.mdl","PHX Tubes Plastic","#",2,"","0,0,-379.6","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16.mdl","PHX Tubes Plastic","#",1,"","0,0,379.6","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x16.mdl","PHX Tubes Plastic","#",2,"","0,0,-379.6","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1b.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1b.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1c.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1c.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1d.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1d.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1.mdl","PHX Tubes Plastic","#",1,"","0,0,23.726","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1.mdl","PHX Tubes Plastic","#",2,"","0,0,-23.726","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1to2x2.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x1to2x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2b.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2b.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2c.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2c.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2d.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2d.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2.mdl","PHX Tubes Plastic","#",1,"","0,0,47.45","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x2.mdl","PHX Tubes Plastic","#",2,"","0,0,-47.45","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3b.mdl","PHX Tubes Plastic","#",1,"","0,0,71.175","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3b.mdl","PHX Tubes Plastic","#",2,"","0,0,-71.175","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3c.mdl","PHX Tubes Plastic","#",1,"","0,0,71.175","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3c.mdl","PHX Tubes Plastic","#",2,"","0,0,-71.175","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3d.mdl","PHX Tubes Plastic","#",1,"","0,0,71.175","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3d.mdl","PHX Tubes Plastic","#",2,"","0,0,-71.175","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3.mdl","PHX Tubes Plastic","#",1,"","0,0,71.175","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x3.mdl","PHX Tubes Plastic","#",2,"","0,0,-71.175","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4b.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4b.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4c.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4c.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4d.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4d.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4.mdl","PHX Tubes Plastic","#",1,"","0,0,94.9","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x4.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5b.mdl","PHX Tubes Plastic","#",1,"","0,0,118.625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5b.mdl","PHX Tubes Plastic","#",2,"","0,0,-118.625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5c.mdl","PHX Tubes Plastic","#",1,"","0,0,118.625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5c.mdl","PHX Tubes Plastic","#",2,"","0,0,-118.625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5d.mdl","PHX Tubes Plastic","#",1,"","0,0,118.625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5d.mdl","PHX Tubes Plastic","#",2,"","0,0,-118.625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5.mdl","PHX Tubes Plastic","#",1,"","0,0,118.625","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x5.mdl","PHX Tubes Plastic","#",2,"","0,0,-118.625","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6b.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6b.mdl","PHX Tubes Plastic","#",2,"","0,0,-142.35","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6c.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6c.mdl","PHX Tubes Plastic","#",2,"","0,0,-142.35","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6d.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6d.mdl","PHX Tubes Plastic","#",2,"","0,0,-142.35","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6.mdl","PHX Tubes Plastic","#",1,"","0,0,142.35","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x6.mdl","PHX Tubes Plastic","#",2,"","0,0,-142.35","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8b.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8b.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8c.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8c.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8d.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8d.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8.mdl","PHX Tubes Plastic","#",1,"","0,0,189.8","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tube4x4x8.mdl","PHX Tubes Plastic","#",2,"","0,0,-189.8","@90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x1x90.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x1x90.mdl","PHX Tubes Plastic","#",2,"","0,23.725,23.725","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90a.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90a.mdl","PHX Tubes Plastic","#",2,"","0,47.45,47.45","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90b.mdl","PHX Tubes Plastic","#",1,"","-47.45,0,47.45","0,-180,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90b.mdl","PHX Tubes Plastic","#",2,"","0,0,0","@90,-90,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend1x2x90.mdl","PHX Tubes Plastic","#",2,"","0,47.45,47.45","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90.mdl","PHX Tubes Plastic","#",2,"","0,47.45,47.45","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90outer.mdl","PHX Tubes Plastic","#",1,"","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90outer.mdl","PHX Tubes Plastic","#",2,"","0,47.45,47.45","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90square.mdl","PHX Tubes Plastic","#",1,"","0,0,-47.451","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend2x2x90square.mdl","PHX Tubes Plastic","#",2,"","0,47.417,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend4x4x90.mdl","PHX Tubes Plastic","#",1,"","0,94.9,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebend4x4x90.mdl","PHX Tubes Plastic","#",2,"","0,0,-94.9","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendinsidesquare2.mdl","PHX Tubes Plastic","#",1,"","0,0,23.725","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendinsidesquare2.mdl","PHX Tubes Plastic","#",2,"","0,-47.45,-23.724","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendinsidesquare.mdl","PHX Tubes Plastic","#",1,"","0,0,23.725","@-90,90,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendinsidesquare.mdl","PHX Tubes Plastic","#",2,"","-47.45,0,-23.724","0,-180,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendoutsidesquare2.mdl","PHX Tubes Plastic","#",1,"0,0,47.45","0,0,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendoutsidesquare2.mdl","PHX Tubes Plastic","#",2,"0,-47.45,0","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendoutsidesquare.mdl","PHX Tubes Plastic","#",1,"0,0,47.45","0,0,0","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/hunter/tubes/tubebendoutsidesquare.mdl","PHX Tubes Plastic","#",2,"0,-47.45,0","0,0,0","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_90deg.mdl","Portal Tubes","#",1,"","64.041,0.049,0.131","",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_90deg.mdl","Portal Tubes","#",2,"","0.002,0.04,-63.904","@90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_broken.mdl","Portal Tubes","#",1,"","0.009,0,63.896","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_broken.mdl","Portal Tubes","#",2,"","0.008,0.004,-63.897","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_straight.mdl","Portal Tubes","#",1,"","0.009,0,63.896","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_straight.mdl","Portal Tubes","#",2,"","0.008,0.004,-63.897","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_tjoint.mdl","Portal Tubes","#",1,"","-0.014,0.13,96.075","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_tjoint.mdl","Portal Tubes","#",2,"","-0.004,-95.763,0.016","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/props_bts/clear_tube_tjoint.mdl","Portal Tubes","#",3,"","0,96,0.083","0,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/big_jetty.mdl","Random Bridges","#",1,"","0,116.668,57.94","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/big_jetty.mdl","Random Bridges","#",2,"","0,-11.914,57.939","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_128.mdl","Random Bridges","#",1,"","0,67.452,14.326","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_128.mdl","Random Bridges","#",2,"","0,-63.954,14.325","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_256.mdl","Random Bridges","#",1,"","0,131.491,14.199","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_256.mdl","Random Bridges","#",2,"","0,-139.388,14.198","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_384.mdl","Random Bridges","#",1,"","0,199.517,14.302","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_384.mdl","Random Bridges","#",2,"","0,-196.069,14.215","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_128.mdl","Random Bridges","#",1,"","0,67.244,14.323","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_128.mdl","Random Bridges","#",2,"","0,-63.033,14.337","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_256.mdl","Random Bridges","#",1,"","0,131.502,14.339","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_256.mdl","Random Bridges","#",2,"","0,-127.085,14.319","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_384.mdl","Random Bridges","#",1,"","0,199.517,14.332","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_swamp/boardwalk_tall_384.mdl","Random Bridges","#",2,"","0,-196.012,14.318","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_wasteland/bridge_low_res.mdl","Random Bridges","#",1,"","5056,219.145,992.765","",""}) - asmlib.InsertRecord("PIECES", {"models/props_wasteland/bridge_low_res.mdl","Random Bridges","#",2,"","-576,219.145,992.765","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge01b.mdl","Random Bridges","#",1,"","910.69,-13.63,403.46","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge01b.mdl","Random Bridges","#",2,"","-913.31,-13.63,403.46","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge01.mdl","Random Bridges","#",1,"","455.345,-6.815,201.73","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge01.mdl","Random Bridges","#",2,"","-456.655,-6.815,201.73","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge02.mdl","Random Bridges","#",1,"","0,512.155,288","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge02.mdl","Random Bridges","#",2,"","0,-512.212,288","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03a.mdl","Random Bridges","#",1,"","320.89,0,187.742","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03a.mdl","Random Bridges","#",2,"","-320.059,0,187.742","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03b.mdl","Random Bridges","#",1,"","320.89,0,187.741","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03b.mdl","Random Bridges","#",2,"","-320.059,0,187.741","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03c.mdl","Random Bridges","#",1,"","1026.848,0,600.773","",""}) - asmlib.InsertRecord("PIECES", {"models/props_canal/canal_bridge03c.mdl","Random Bridges","#",2,"","-1024.189,0,600.773","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_combine/combine_bridge_b.mdl","Random Bridges","#",1,"","-330.895,0.039,124.673","",""}) - asmlib.InsertRecord("PIECES", {"models/props_combine/combine_bridge_b.mdl","Random Bridges","#",2,"","-522.855,0.251,124.671","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_combine/combine_bridge.mdl","Random Bridges","#",1,"","-8.401,0,124.685","",""}) - asmlib.InsertRecord("PIECES", {"models/props_combine/combine_bridge.mdl","Random Bridges","#",2,"","-320,0,124.685","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/bridge.mdl","Random Bridges","Karkar",1,"","62.07,-343.696,208.295","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/bridge.mdl","Random Bridges","Karkar",2,"","62.07,334.44,208.295","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/askari/bridge01_stlve.mdl","Random Bridges","Stlve",1,"","192,0,189.531","",""}) - asmlib.InsertRecord("PIECES", {"models/askari/bridge01_stlve.mdl","Random Bridges","Stlve",2,"","-192,0,189.531","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_2fort/bridgesupports001.mdl","Random Bridges","TF Support",1,"","448,0,-14.268","",""}) - asmlib.InsertRecord("PIECES", {"models/props_2fort/bridgesupports001.mdl","Random Bridges","TF Support",2,"","-448,0,-15.558","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props/tresslebridge.mdl","Random Bridges","#",1,"","374.246,-1.2345,24.849","",""}) - asmlib.InsertRecord("PIECES", {"models/props/tresslebridge.mdl","Random Bridges","#",2,"","-345.367,-1.2345,24.85","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge01.mdl","Random Bridges","#",1,"","0,68.767,14.898","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge01.mdl","Random Bridges","#",2,"","0,-70.316,14.898","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge02.mdl","Random Bridges","#",1,"","5.236,-13.396,11.976","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge02.mdl","Random Bridges","#",2,"","5.236,479.851,11.976","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge03.mdl","Random Bridges","#",1,"","1.436,-12.169,11.136","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge03.mdl","Random Bridges","#",2,"","1.436,480.851,11.136","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge04.mdl","Random Bridges","#",1,"","-2.253,-11.847,10.696","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_viaduct_event/underworld_bridge04.mdl","Random Bridges","#",2,"","-2.253,480.851,10.696","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/wooden_bridge_helly_broken_bstk.mdl","Random Bridges","#",1,"","-318.524,0,26.757","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/wooden_bridge_helly_broken_bstk.mdl","Random Bridges","#",2,"","244.523,0,3.55","",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/wooden_bridge_helly.mdl","Random Bridges","#",1,"","0,318.601,26.783","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/karkar/wooden_bridge_helly.mdl","Random Bridges","#",2,"","0,-240.814,2.85","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/90crossing.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/90crossing.mdl","Ron's 2ft track pack","#",2,"","0,64,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/90crossing.mdl","Ron's 2ft track pack","#",3,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/90crossing.mdl","Ron's 2ft track pack","#",4,"","0,-64,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_32.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_32.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_64.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_64.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_end.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_2_end.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_32.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_32.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_64.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_64.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_end.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_end.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_pillar.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/bridges/bridge_pillar.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer_2.mdl","Ron's 2ft track pack","Buffer SH2",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer_2.mdl","Ron's 2ft track pack","Buffer SH2",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer_3.mdl","Ron's 2ft track pack","Buffer SH3",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer_3.mdl","Ron's 2ft track pack","Buffer SH3",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/buffer.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_1.mdl","Ron's 2ft track pack","#",2,"","-391.846,-77.978,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_2.mdl","Ron's 2ft track pack","#",2,"","-439.352,-87.36,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_3.mdl","Ron's 2ft track pack","#",2,"","-486.814,-96.707,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_left_4.mdl","Ron's 2ft track pack","#",2,"","-532.889,-105.687,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_1.mdl","Ron's 2ft track pack","#",2,"","-391.846,77.978,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_2.mdl","Ron's 2ft track pack","#",2,"","-439.352,87.36,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_3.mdl","Ron's 2ft track pack","#",2,"","-486.814,96.707,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_225_right_4.mdl","Ron's 2ft track pack","#",2,"","-532.866,105.763,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_1.mdl","Ron's 2ft track pack","#",2,"","-724.122,-299.876,6.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_2.mdl","Ron's 2ft track pack","#",2,"","-811.77,-336.23,6.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_3.mdl","Ron's 2ft track pack","#",2,"","-899.503,-372.497,6.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_left_4.mdl","Ron's 2ft track pack","#",2,"","-987.115,-408.885,6.016","0,-135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_1.mdl","Ron's 2ft track pack","#",2,"","-724.122,299.876,6.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_2.mdl","Ron's 2ft track pack","#",2,"","-811.77,336.23,6.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_3.mdl","Ron's 2ft track pack","#",2,"","-899.503,372.497,6.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_45_right_4.mdl","Ron's 2ft track pack","#",2,"","-987.115,408.885,6.016","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_1.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_2.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_3.mdl","Ron's 2ft track pack","#",2,"","-1272,-1272,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/curve_90_4.mdl","Ron's 2ft track pack","#",2,"","-1396,-1396,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_1024_sided.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_1024_sided.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_128_sided.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_128_sided.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_256_sided.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_256_sided.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_32_sided.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_32_sided.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_32.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_32.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_512_sided.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_512_sided.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_64_sided.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_64_sided.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_64.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_64.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge_sided_m.mdl","Ron's 2ft track pack","Embankment Bridge Sided Mirrored",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge_sided_m.mdl","Ron's 2ft track pack","Embankment Bridge Sided Mirrored",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge_sided.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge_sided.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_bridge.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_1.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_2.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_3.mdl","Ron's 2ft track pack","#",2,"","-1272,-1272,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_4.mdl","Ron's 2ft track pack","#",2,"","-1396,-1396,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_1.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_2.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_3.mdl","Ron's 2ft track pack","#",2,"","-1272,-1272,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_4.mdl","Ron's 2ft track pack","#",2,"","-1396,-1396,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_1.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_2.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_2.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_3.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_3.mdl","Ron's 2ft track pack","#",2,"","-1272,-1272,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_4.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/embankment/embankment_curve_90_sided_m_4.mdl","Ron's 2ft track pack","#",2,"","-1396,-1396,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/left/junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/left/junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/left/junction.mdl","Ron's 2ft track pack","#",3,"","-77.994,391.842,6.016","0,112.5,0","r2ftp_junction_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/right/junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/right/junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/junctions/right/junction.mdl","Ron's 2ft track pack","#",3,"","77.994,391.842,6.016","0,67.5,0","r2ftp_junction_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_switched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_switched_1.mdl","Ron's 2ft track pack","#",2,"","-384,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_switched_1.mdl","Ron's 2ft track pack","#",3,"","-391.842,-77.994,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_unswitched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_unswitched_1.mdl","Ron's 2ft track pack","#",2,"","-384,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/left_unswitched_1.mdl","Ron's 2ft track pack","#",3,"","-391.842,-77.994,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_switched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_switched.mdl","Ron's 2ft track pack","#",2,"","-384,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_switched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",2,"","-384,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_switched.mdl","Ron's 2ft track pack","#",2,"","-384,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",2,"","-384,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/njunctions/n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_n_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_n_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/left/n_junction.mdl","Ron's 2ft track pack","#",3,"","-124,704,6.016","0,90,0","r2ftp_junction_n_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_n_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_n_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/n_junctions/right/n_junction.mdl","Ron's 2ft track pack","#",3,"","124,704,6.016","0,90,0","r2ftp_junction_n_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/passenger_crossing.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/passenger_crossing.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_2_track.mdl","Ron's 2ft track pack","#",1,"","512,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_2_track.mdl","Ron's 2ft track pack","#",2,"","512,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_2_track.mdl","Ron's 2ft track pack","#",3,"","-512,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_2_track.mdl","Ron's 2ft track pack","#",4,"","-512,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","512,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","512,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-512,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-512,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024_roof.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench_roof.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_bench.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128_roof.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256_roof.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_2_track.mdl","Ron's 2ft track pack","#",1,"","256,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_2_track.mdl","Ron's 2ft track pack","#",2,"","256,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_2_track.mdl","Ron's 2ft track pack","#",3,"","-256,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_2_track.mdl","Ron's 2ft track pack","#",4,"","-256,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","256,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","256,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-256,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-256,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512_roof.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp_roof.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_ramp.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end_roof.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_end.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","128,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","128,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-128,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-128,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp_roof.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_ramp.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof_2_track.mdl","Ron's 2ft track pack","#",1,"","64,-124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof_2_track.mdl","Ron's 2ft track pack","#",2,"","64,124,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof_2_track.mdl","Ron's 2ft track pack","#",3,"","-64,124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof_2_track.mdl","Ron's 2ft track pack","#",4,"","-64,-124,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start_roof.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/station/platform_start.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_1.mdl","Ron's 2ft track pack","#",2,"","-1024,0,70.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-1024,0,70.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-1024,0,70.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 1024 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_1024_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 1024 Embankment Sided Mirrored 1",2,"","-1024,0,70.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_1.mdl","Ron's 2ft track pack","#",2,"","-128,0,14.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-128,0,14.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-128,0,14.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 128 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_128_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 128 Embankment Sided Mirrored 1",2,"","-128,0,14.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_1.mdl","Ron's 2ft track pack","#",2,"","-256,0,22.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-256,0,22.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-256,0,22.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 256 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_256_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 256 Embankment Sided Mirrored 1",2,"","-256,0,22.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_1.mdl","Ron's 2ft track pack","#",2,"","-32,0,8.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-32,0,8.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-32,0,8.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 32 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_32_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 32 Embankment Sided Mirrored 1",2,"","-32,0,8.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_1.mdl","Ron's 2ft track pack","#",2,"","-512,0,38.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-512,0,38.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-512,0,38.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 512 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_512_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 512 Embankment Sided Mirrored 1",2,"","-512,0,38.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,10.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,10.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,10.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 64 Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_64_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp 64 Embankment Sided Mirrored 1",2,"","-64,0,10.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_1.mdl","Ron's 2ft track pack","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_1.mdl","Ron's 2ft track pack","#",2,"","0,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_1.mdl","Ron's 2ft track pack","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_1.mdl","Ron's 2ft track pack","#",2,"","0,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","0,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp End Embankment Sided Mirrored 1",1,"","64,0,3.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_end_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp End Embankment Sided Mirrored 1",2,"","0,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,9.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,9.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_sided_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_sided_1.mdl","Ron's 2ft track pack","#",2,"","-64,0,9.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp Start Embankment Sided Mirrored 1",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/ramps/ramp_start_embankment_sided_m_1.mdl","Ron's 2ft track pack","Ramp Start Embankment Sided Mirrored 1",2,"","-64,0,9.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/rerailer.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/rerailer.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_switched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_switched_1.mdl","Ron's 2ft track pack","#",2,"","-384,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_switched_1.mdl","Ron's 2ft track pack","#",3,"","-391.842,77.994,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_unswitched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_unswitched_1.mdl","Ron's 2ft track pack","#",2,"","-384,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/junctions/right_unswitched_1.mdl","Ron's 2ft track pack","#",3,"","-391.842,77.994,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing_middle.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing_middle.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing_side.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing_side.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/road_crossings/road_crossing.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/s_curve_left.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/s_curve_left.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/s_curve_right.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/curves/s_curve_right.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_switched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_switched.mdl","Ron's 2ft track pack","#",2,"","-384,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_switched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_switched.mdl","Ron's 2ft track pack","#",4,"","-320,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",2,"","-384,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",4,"","-320,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_switched.mdl","Ron's 2ft track pack","#",2,"","-384,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_switched.mdl","Ron's 2ft track pack","#",4,"","-320,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",2,"","-384,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/sjunctions/s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",4,"","-320,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_s_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_s_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl","Ron's 2ft track pack","#",3,"","-124,704,6.016","0,90,0","r2ftp_junction_s_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/left/s_junction.mdl","Ron's 2ft track pack","#",4,"","-124,320,6.016","0,-90,0","r2ftp_junction_s_left"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_s_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl","Ron's 2ft track pack","#",2,"","0,384,6.016","0,90,0","r2ftp_junction_s_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl","Ron's 2ft track pack","#",3,"","124,704,6.016","0,90,0","r2ftp_junction_s_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/s_junctions/right/s_junction.mdl","Ron's 2ft track pack","#",4,"","124,320,6.016","0,-90,0","r2ftp_junction_s_right"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/shed_open_both.mdl","Ron's 2ft track pack","#",1,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/shed_open_left.mdl","Ron's 2ft track pack","#",1,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/shed_open_right.mdl","Ron's 2ft track pack","#",1,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/shed.mdl","Ron's 2ft track pack","#",1,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_128.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_128.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_256.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_256.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32_2tracks.mdl","Ron's 2ft track pack","#",1,"","16,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32_2tracks.mdl","Ron's 2ft track pack","#",2,"","16,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32_2tracks.mdl","Ron's 2ft track pack","#",3,"","-16,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32_2tracks.mdl","Ron's 2ft track pack","#",4,"","-16,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_320_junction.mdl","Ron's 2ft track pack","#",1,"","160,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_320_junction.mdl","Ron's 2ft track pack","#",2,"","-160,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_32.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_64.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/straight/straight_64.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_barrier_closed.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_barrier_closed.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_barrier_opened.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_barrier_opened.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_damaged.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/misc/track_damaged.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_1024_grass.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_1024_grass.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_1024_street.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_1024_street.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_128_grass.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_128_grass.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_128_street.mdl","Ron's 2ft track pack","#",1,"","64,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_128_street.mdl","Ron's 2ft track pack","#",2,"","-64,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_256_grass.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_256_grass.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_256_street.mdl","Ron's 2ft track pack","#",1,"","128,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_256_street.mdl","Ron's 2ft track pack","#",2,"","-128,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_32_grass.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_32_grass.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_32_street.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_32_street.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_512_grass.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_512_grass.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_512_street.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_512_street.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_64_grass.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_64_grass.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_64_street.mdl","Ron's 2ft track pack","#",1,"","32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_64_street.mdl","Ron's 2ft track pack","#",2,"","-32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_buffer_grass.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_buffer_grass.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_buffer_street.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_buffer_street.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_1_grass.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_1_grass.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_1_street.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_1_street.mdl","Ron's 2ft track pack","#",2,"","-1024,-1024,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_2_grass.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_2_grass.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_2_street.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_curve_90_2_street.mdl","Ron's 2ft track pack","#",2,"","-1148,-1148,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_grass_normal.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_grass_normal.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_grass_street.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_grass_street.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_switched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_switched.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_switched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_left_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_switched.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_n_junction_right_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_normal_street.mdl","Ron's 2ft track pack","#",1,"","16,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_normal_street.mdl","Ron's 2ft track pack","#",2,"","-16,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_switched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_switched.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_switched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_switched.mdl","Ron's 2ft track pack","#",4,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",2,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_left_unswitched.mdl","Ron's 2ft track pack","#",4,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_switched.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_switched.mdl","Ron's 2ft track pack","#",4,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",2,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_s_junction_right_unswitched.mdl","Ron's 2ft track pack","#",4,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_station_grass_m.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_station_grass_m.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_station_grass.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_station_grass.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_switched.mdl","Ron's 2ft track pack","#",2,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_switched.mdl","Ron's 2ft track pack","#",4,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_unswitched.mdl","Ron's 2ft track pack","#",2,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/tram/tram_x_junction_unswitched.mdl","Ron's 2ft track pack","#",4,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_big.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_big.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",1,"","96,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",2,"","0,96,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",3,"","-96,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",4,"","0,-96,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",5,"","32,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",6,"","0,32,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",7,"","-32,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow_base_90.mdl","Ron's 2ft track pack","#",8,"","0,-32,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow.mdl","Ron's 2ft track pack","#",1,"","0,32,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_narrow.mdl","Ron's 2ft track pack","#",2,"","0,-32,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",1,"","192,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",2,"","0,192,6.016","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",3,"","-192,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",4,"","0,-192,6.016","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",5,"","64,0,10.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",6,"","0,64,10.516","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",7,"","-64,0,10.516","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small_base_90.mdl","Ron's 2ft track pack","#",8,"","0,-64,10.516","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small.mdl","Ron's 2ft track pack","#",1,"","64,0,10.516","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/turntable/turntable_small.mdl","Ron's 2ft track pack","#",2,"","-64,0,10.516","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/viaduct/viaduct_1024.mdl","Ron's 2ft track pack","#",1,"","512,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/viaduct/viaduct_1024.mdl","Ron's 2ft track pack","#",2,"","-512,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/viaduct/viaduct_512.mdl","Ron's 2ft track pack","#",1,"","256,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/viaduct/viaduct_512.mdl","Ron's 2ft track pack","#",2,"","-256,0,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_switched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_switched.mdl","Ron's 2ft track pack","#",2,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_switched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_switched.mdl","Ron's 2ft track pack","#",4,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_unswitched.mdl","Ron's 2ft track pack","#",1,"","0,-62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_unswitched.mdl","Ron's 2ft track pack","#",2,"","0,62,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_unswitched.mdl","Ron's 2ft track pack","#",3,"","-704,62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/xjunctions/x_junction_unswitched.mdl","Ron's 2ft track pack","#",4,"","-704,-62,6.016","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/x_junctions/x_junction.mdl","Ron's 2ft track pack","#",1,"","62,0,6.016","0,-90,0","r2ftp_junction_x"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/x_junctions/x_junction.mdl","Ron's 2ft track pack","#",2,"","62,704,6.016","0,90,0","r2ftp_junction_x"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/x_junctions/x_junction.mdl","Ron's 2ft track pack","#",3,"","-62,704,6.016","0,90,0","r2ftp_junction_x"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/x_junctions/x_junction.mdl","Ron's 2ft track pack","#",4,"","-62,0,6.016","0,-90,0","r2ftp_junction_x"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_switched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_switched_1.mdl","Ron's 2ft track pack","#",2,"","-391.763031,78.046341,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_switched_1.mdl","Ron's 2ft track pack","#",3,"","-391.812866,-77.926048,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_unswitched_1.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_unswitched_1.mdl","Ron's 2ft track pack","#",2,"","-391.763031,78.046341,6.016","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/yjunction/y_junction_unswitched_1.mdl","Ron's 2ft track pack","#",3,"","-391.812866,-77.926048,6.016","0,-157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/y_junctions/y_junction.mdl","Ron's 2ft track pack","#",1,"","0,0,6.016","0,-90,0","r2ftp_junction_y"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/y_junctions/y_junction.mdl","Ron's 2ft track pack","#",2,"","77.969124,391.794891,6.016","0,67.5,0","r2ftp_junction_y"}) - asmlib.InsertRecord("PIECES", {"models/ron/2ft/luajunctions/y_junctions/y_junction.mdl","Ron's 2ft track pack","#",3,"","-77.969093,391.794952,6.016","0,112.5,0","r2ftp_junction_y"}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/1.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/1.mdl","Ron's Minitrain Props","#",2,"","-1,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/2.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/2.mdl","Ron's Minitrain Props","#",2,"","-2,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/4.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/4.mdl","Ron's Minitrain Props","#",2,"","-4,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/8.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/straight/8.mdl","Ron's Minitrain Props","#",2,"","-8,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/bridge.mdl","Ron's Minitrain Props","#",1,"","0,64,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/bridge.mdl","Ron's Minitrain Props","#",2,"","0,-64,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_1024.mdl","Ron's Minitrain Props","#",1,"","0,512,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_1024.mdl","Ron's Minitrain Props","#",2,"","0,-512,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_128.mdl","Ron's Minitrain Props","#",1,"","0,64,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_128.mdl","Ron's Minitrain Props","#",2,"","0,-64,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_16.mdl","Ron's Minitrain Props","#",1,"","0,8,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_16.mdl","Ron's Minitrain Props","#",2,"","0,-8,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_1.mdl","Ron's Minitrain Props","#",1,"","0,0.5,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_1.mdl","Ron's Minitrain Props","#",2,"","0,-0.5,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_1.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_1.mdl","Ron's Minitrain Props","#",2,"","10.542684747187,53.001655382565,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_2.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_2.mdl","Ron's Minitrain Props","#",2,"","12.826298771848,64.482158353518,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_3.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_3.mdl","Ron's Minitrain Props","#",2,"","15.10991279651,75.96266132447,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_4.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_4.mdl","Ron's Minitrain Props","#",2,"","17.393526821171,87.443164295423,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_5.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_5.mdl","Ron's Minitrain Props","#",2,"","19.677140845832,98.923667266376,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_6.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_225_6.mdl","Ron's Minitrain Props","#",2,"","21.960754870494,110.40417023733,33","0,67.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_256.mdl","Ron's Minitrain Props","#",1,"","0,128,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_256.mdl","Ron's Minitrain Props","#",2,"","0,-128,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_2.mdl","Ron's Minitrain Props","#",1,"","0,1,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_2.mdl","Ron's Minitrain Props","#",2,"","0,-1,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_32.mdl","Ron's Minitrain Props","#",1,"","0,16,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_32.mdl","Ron's Minitrain Props","#",2,"","0,-16,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_1.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_1.mdl","Ron's Minitrain Props","#",2,"","40.565710805663,97.934289194337,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_2.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_2.mdl","Ron's Minitrain Props","#",2,"","49.352507370067,119.14749262993,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_3.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_3.mdl","Ron's Minitrain Props","#",2,"","58.13930393447,140.36069606553,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_4.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_4.mdl","Ron's Minitrain Props","#",2,"","66.926100498874,161.57389950113,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_5.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_5.mdl","Ron's Minitrain Props","#",2,"","75.712897063277,182.78710293672,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_6.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_45_6.mdl","Ron's Minitrain Props","#",2,"","84.499693627681,204.00030637232,33","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_4.mdl","Ron's Minitrain Props","#",1,"","0,2,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_4.mdl","Ron's Minitrain Props","#",2,"","0,-2,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_512.mdl","Ron's Minitrain Props","#",1,"","0,256,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_512.mdl","Ron's Minitrain Props","#",2,"","0,-256,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_64.mdl","Ron's Minitrain Props","#",1,"","0,32,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_64.mdl","Ron's Minitrain Props","#",2,"","0,-32,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_8.mdl","Ron's Minitrain Props","#",1,"","0,4,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/straight/elevation_8.mdl","Ron's Minitrain Props","#",2,"","0,-4,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_1.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_1.mdl","Ron's Minitrain Props","#",2,"","138.5,138.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_2.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_2.mdl","Ron's Minitrain Props","#",2,"","168.5,168.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_3.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_3.mdl","Ron's Minitrain Props","#",2,"","198.5,198.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_4.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_4.mdl","Ron's Minitrain Props","#",2,"","228.5,228.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_5.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_5.mdl","Ron's Minitrain Props","#",2,"","258.5,258.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_6.mdl","Ron's Minitrain Props","#",1,"","0,0,33","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/curves/elevation_90_6.mdl","Ron's Minitrain Props","#",2,"","288.5,288.5,33","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_128.mdl","Ron's Minitrain Props","#",1,"","0,0,1","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_128.mdl","Ron's Minitrain Props","#",2,"","0,144,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_256.mdl","Ron's Minitrain Props","#",1,"","0,0,1","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_256.mdl","Ron's Minitrain Props","#",2,"","0,272,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_512.mdl","Ron's Minitrain Props","#",1,"","0,0,1","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/elevations/ramps/elevation_ramp_512.mdl","Ron's Minitrain Props","#",2,"","0,528,33","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/scenery/tunnel_64.mdl","Ron's Minitrain Props","#",1,"","0,8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/minitrains/scenery/tunnel_64.mdl","Ron's Minitrain Props","#",2,"","-64,8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h03.mdl","SProps","225 Down",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h03.mdl","SProps","225 Down",2,"","-1264.663,0,-247.177","@22.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h02.mdl","SProps","225 Up",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h02.mdl","SProps","225 Up",2,"","-1258.828,0,261.268","@-22.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h01.mdl","SProps","Ramp",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_h01.mdl","SProps","Ramp",2,"","-2525.98,0,503.58","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/rerailer.mdl","SProps","#",1,"-1088.178,0,19.886","-1280.383,0,7.618","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s01.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s01.mdl","SProps","#",2,"","-162,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s02.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s02.mdl","SProps","#",2,"","-324,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s03.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s03.mdl","SProps","#",2,"","-486,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s04.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s04.mdl","SProps","#",2,"","-648,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s05.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s05.mdl","SProps","#",2,"","-1296.002,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s06.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_s06.mdl","SProps","#",2,"","-2592.002,0,7.624","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_t90_01.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_t90_01.mdl","SProps","#",2,"","-825,825,7.624","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_t90_02.mdl","SProps","#",1,"","0,0,7.624","",""}) - asmlib.InsertRecord("PIECES", {"models/sprops/trans/train/track_t90_02.mdl","SProps","#",2,"","-1650,1650.0009765625,7.624","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_bumper.mdl","Shinji85's Rails","Bumper",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_csfix.mdl","Shinji85's Rails","Counter Switch Fix",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_csfix.mdl","Shinji85's Rails","Counter Switch Fix",2,"","-115.18847,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cs.mdl","Shinji85's Rails","Counter Switch",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cs.mdl","Shinji85's Rails","Counter Switch",2,"","-908.81165,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cxfix.mdl","Shinji85's Rails","Counter X Fix",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cxfix.mdl","Shinji85's Rails","Counter X Fix",2,"","-149.48648,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cx.mdl","Shinji85's Rails","Counter X",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cx.mdl","Shinji85's Rails","Counter X",2,"","-362.51361,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cross_4x.mdl","Shinji85's Rails","Cross 4x",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cross_4x.mdl","Shinji85's Rails","Cross 4x",2,"","-512,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cross_4x.mdl","Shinji85's Rails","Cross 4x",3,"","-256,-256,7.346","0,270,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_cross_4x.mdl","Shinji85's Rails","Cross 4x",4,"","-256,256,7.346","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_cc.mdl","Shinji85's Rails","Curve Cc",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_cc.mdl","Shinji85's Rails","Curve Cc",2,"","-966.40515,128,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r11.mdl","Shinji85's Rails","Curve R11",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r11.mdl","Shinji85's Rails","Curve R11",2,"","-1086.11584,449.88458,7.346","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r12.mdl","Shinji85's Rails","Curve R12",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r12.mdl","Shinji85's Rails","Curve R12",2,"","-905.09656,374.90414,7.346","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r13.mdl","Shinji85's Rails","Curve R13",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r13.mdl","Shinji85's Rails","Curve R13",2,"","-724.07727,299.92276,7.346","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r1.mdl","Shinji85's Rails","Curve R1",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r1.mdl","Shinji85's Rails","Curve R1",2,"","-1060.12341,139.56763,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r2.mdl","Shinji85's Rails","Curve R2",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r2.mdl","Shinji85's Rails","Curve R2",2,"","-993.86572,130.84471,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r3.mdl","Shinji85's Rails","Curve R3",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_curve_r3.mdl","Shinji85's Rails","Curve R3",2,"","-927.60797,122.1218,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_4x_crossing.mdl","Shinji85's Rails","Double 4x Crossing",1,"","0,128,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_4x_crossing.mdl","Shinji85's Rails","Double 4x Crossing",2,"","-512,128,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_4x_crossing.mdl","Shinji85's Rails","Double 4x Crossing",3,"","0,-128,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_4x_crossing.mdl","Shinji85's Rails","Double 4x Crossing",4,"","-512,-128,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_bumper.mdl","Shinji85's Rails","Double Bumper",1,"","0,128,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_double_bumper.mdl","Shinji85's Rails","Double Bumper",2,"","0,-128,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_l_switch.mdl","Shinji85's Rails","L Switch",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_l_switch.mdl","Shinji85's Rails","L Switch",2,"","-1024,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_l_switch.mdl","Shinji85's Rails","L Switch",3,"","-966.40515,-128,7.346","0,195,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_r_switch.mdl","Shinji85's Rails","R Switch",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_r_switch.mdl","Shinji85's Rails","R Switch",2,"","-1024,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_r_switch.mdl","Shinji85's Rails","R Switch",3,"","-966.40515,128,7.346","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_16x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_16x.mdl","Shinji85's Rails","#",2,"","-2048,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_1x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_1x.mdl","Shinji85's Rails","#",2,"","-128,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_2x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_2x.mdl","Shinji85's Rails","#",2,"","-256,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_4x_crossing.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_4x_crossing.mdl","Shinji85's Rails","#",2,"","-512,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_4x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_4x.mdl","Shinji85's Rails","#",2,"","-512,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_8x.mdl","Shinji85's Rails","#",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_8x.mdl","Shinji85's Rails","#",2,"","-1024,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_x_junction.mdl","Shinji85's Rails","X Junction",1,"","0,0,7.346","",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_x_junction.mdl","Shinji85's Rails","X Junction",2,"","-494.55,0,7.346","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_x_junction.mdl","Shinji85's Rails","X Junction",3,"","-33.129,-123.63866,7.346","0,-30,0",""}) - asmlib.InsertRecord("PIECES", {"models/shinji85/train/rail_x_junction.mdl","Shinji85's Rails","X Junction",4,"","-461.42175,123.63649,7.346","0,150,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/sw_buffer_stop.mdl","SligWolf's Minis","Buffer Stop",1,"","9.43,-8.011,-1.001","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_22-5.mdl","SligWolf's Minis","#",2,"","-53.014,2.013,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_45.mdl","SligWolf's Minis","#",2,"","-97.956,32.044,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_90.mdl","SligWolf's Minis","#",2,"","-138.51,130,1","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_big.mdl","SligWolf's Minis","#",2,"","-277.01,268.511,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_medium.mdl","SligWolf's Minis","#",2,"","-195.966,72.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_1_s_small.mdl","SligWolf's Minis","#",2,"","-105.994,12.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_22-5.mdl","SligWolf's Minis","#",2,"","-64.492,4.307,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_45.mdl","SligWolf's Minis","#",2,"","-119.15,40.853,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_90.mdl","SligWolf's Minis","#",2,"","-168.51,160,0.996","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_big.mdl","SligWolf's Minis","#",2,"","-336.99,328.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_medium.mdl","SligWolf's Minis","#",2,"","-237.966,90.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_2_s_small.mdl","SligWolf's Minis","#",2,"","-128.994,17.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_22-5.mdl","SligWolf's Minis","#",2,"","-75.965,6.599,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_45.mdl","SligWolf's Minis","#",2,"","-140.368,49.631,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_90.mdl","SligWolf's Minis","#",2,"","-198.51,190,0.995","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_big.mdl","SligWolf's Minis","#",2,"","-397.033,388.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_medium.mdl","SligWolf's Minis","#",2,"","-280.966,107.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_3_s_small.mdl","SligWolf's Minis","#",2,"","-151.994,21.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_22-5.mdl","SligWolf's Minis","#",2,"","-87.437,8.904,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_45.mdl","SligWolf's Minis","#",2,"","-161.567,58.434,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_90.mdl","SligWolf's Minis","#",2,"","-228.51,220,0.994","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_big.mdl","SligWolf's Minis","#",2,"","-456.991,448.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_medium.mdl","SligWolf's Minis","#",2,"","-322.966,125.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_4_s_small.mdl","SligWolf's Minis","#",2,"","-174.994,26.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_22-5.mdl","SligWolf's Minis","#",2,"","-98.913,11.205,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_45.mdl","SligWolf's Minis","#",2,"","-182.769,67.232,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_90.mdl","SligWolf's Minis","#",2,"","-258.51,250,0.994","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_big.mdl","SligWolf's Minis","#",2,"","-516.985,508.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_medium.mdl","SligWolf's Minis","#",2,"","-365.991,142.507,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_5_s_small.mdl","SligWolf's Minis","#",2,"","-197.994,31.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_22-5.mdl","SligWolf's Minis","#",1,"","-0.005,-8.505,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_22-5.mdl","SligWolf's Minis","#",2,"","-110.405,13.455,1","0,157.5,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_45.mdl","SligWolf's Minis","#",1,"","-0.004,-8.506,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_45.mdl","SligWolf's Minis","#",2,"","-203.983,76.019,1","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_90.mdl","SligWolf's Minis","#",1,"","-0.011,-8.5,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_90.mdl","SligWolf's Minis","#",2,"","-288.51,280,0.993","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_big.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_big.mdl","SligWolf's Minis","#",2,"","-576.985,568.521,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_medium.mdl","SligWolf's Minis","#",1,"","-0.007,-8.504,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_medium.mdl","SligWolf's Minis","#",2,"","-407.99,160.51,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_small.mdl","SligWolf's Minis","#",1,"","-0.007,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/curve_6_s_small.mdl","SligWolf's Minis","#",2,"","-220.994,35.497,1","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/rerailer.mdl","SligWolf's Minis","Rerailer Double",1,"","190,-0.005,1.02","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/rerailer.mdl","SligWolf's Minis","Rerailer Double",2,"","-190,-0.005,1.02","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_1024.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_1024.mdl","SligWolf's Minis","#",2,"","-1024,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_128.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_128.mdl","SligWolf's Minis","#",2,"","-128,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_16.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_16.mdl","SligWolf's Minis","#",2,"","-16,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_256.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_256.mdl","SligWolf's Minis","#",2,"","-256,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_32.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_32.mdl","SligWolf's Minis","#",2,"","-32,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_512.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_512.mdl","SligWolf's Minis","#",2,"","-512,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_64.mdl","SligWolf's Minis","#",1,"","0,-8.507,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_64.mdl","SligWolf's Minis","#",2,"","-64,-8.507,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_128.mdl","SligWolf's Minis","#",1,"","8,-8.508,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_128.mdl","SligWolf's Minis","#",2,"","-136,-8.506,33","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_256.mdl","SligWolf's Minis","#",1,"","8,-8.508,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_256.mdl","SligWolf's Minis","#",2,"","-264,-8.506,33","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_512.mdl","SligWolf's Minis","#",1,"","8,-8.508,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/straight_diagonal_512.mdl","SligWolf's Minis","#",2,"","-520,-8.506,33","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_left.mdl","SligWolf's Minis","#",1,"","16,21.512,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_left.mdl","SligWolf's Minis","#",2,"","-144,21.513,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_left.mdl","SligWolf's Minis","#",3,"","16,-8.515,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_left.mdl","SligWolf's Minis","#",4,"","-144,-8.514,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_right.mdl","SligWolf's Minis","#",1,"","16,21.512,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_right.mdl","SligWolf's Minis","#",2,"","-144,21.513,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_right.mdl","SligWolf's Minis","#",3,"","16,-8.515,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch_double_right.mdl","SligWolf's Minis","#",4,"","-144,-8.514,1","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch.mdl","SligWolf's Minis","Switch Y",1,"","-128,-23.512,0.998","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch.mdl","SligWolf's Minis","Switch Y",2,"","0,-8.509,1","",""}) - asmlib.InsertRecord("PIECES", {"models/minitrains/switch.mdl","SligWolf's Minis","Switch Y",3,"","-128,6.493,0.998","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_3.mdl","SligWolf's Rerailers","Long Double",1,"-258.249,-0.01,-0.002","219.415,0,-5.409","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_3.mdl","SligWolf's Rerailers","Long Double",2,"-3124.199,-0.01,2.997","-3601.869,-0.377,-5.416","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/sw_rerailer_3.mdl","SligWolf's Rerailers","Long Single",1,"-190.553,0,25.193","211.414,0.015,-5.395","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_2.mdl","SligWolf's Rerailers","Middle Double",1,"-265.554,0,3.031","219.412,0,-5.407","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_2.mdl","SligWolf's Rerailers","Middle Double",2,"-1882.106,0,3.031","-2367.072,0,-5.412","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/sw_rerailer_2.mdl","SligWolf's Rerailers","Middle Single",1,"-190.553,0,25.193","211.414,0.015,-5.395","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_1.mdl","SligWolf's Rerailers","Short Double",1,"-221.409,0,3.031","219.412,0,-5.411","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/rerailer/rerailer_1.mdl","SligWolf's Rerailers","Short Double",2,"-1103.05,0,0.009","-1543.871,0,-5.411","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/props_phx/trains/sw_rerailer_1.mdl","SligWolf's Rerailers","Short Single",1,"-190.553,0,25.193","211.414,0.015,-5.395","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrclooping.mdl","Sligwof's Railcar","Loop 180",1,"","810,-252.447,-0.005","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrclooping.mdl","Sligwof's Railcar","Loop 180",2,"","-809.999,136.997,-0.002","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcloopingspecial.mdl","Sligwof's Railcar","LoopSwitch 180",1,"","927.001,-194.403,-0.036","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcloopingspecial.mdl","Sligwof's Railcar","LoopSwitch 180",2,"","-809.999,137.003,350.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcloopingspecial.mdl","Sligwof's Railcar","LoopSwitch 180",3,"","-809.999,-527.972,350.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcramp.mdl","Sligwof's Railcar","Ramp 45",1,"","1000,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrcramp.mdl","Sligwof's Railcar","Ramp 45",2,"","-641.92,0,269.672","@-45,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrctraffic_lights.mdl","Sligwof's Railcar","Start Lights",1,"","0,-152.532,0","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrctraffic_lights.mdl","Sligwof's Railcar","Start Lights",2,"","0,152.554,0","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrctraffic_lights.mdl","Sligwof's Railcar","Start Lights",3,"","0,0,0.042","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccross.mdl","Sligwof's Railcar","Switcher Cross",1,"","500,0,0","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccross.mdl","Sligwof's Railcar","Switcher Cross",2,"","-2673,0,0","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccurve001.mdl","Sligwof's Railcar","U-Turn",1,"","890,748.009,2.994","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccurve001.mdl","Sligwof's Railcar","U-Turn",2,"","890,451.998,2.994","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccurve001.mdl","Sligwof's Railcar","U-Turn",3,"","890,-452.001,2.974","",""}) - asmlib.InsertRecord("PIECES", {"models/swrcs/swrccurve001.mdl","Sligwof's Railcar","U-Turn",4,"","890,-748.027,2.974","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_i.mdl","Sligwolf's Mini hover tracks","#",1,"","157.982285,-19.999878,83.837341","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-27.427399,-19.999756,5.118835","@52.5,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_small_i.mdl","Sligwolf's Mini hover tracks","#",1,"","157.982788,27.999634,83.837219","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_small_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-27.439621,28.012085,5.100098","@52.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_small.mdl","Sligwolf's Mini hover tracks","#",1,"","157.982788,27.999634,83.837219","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow_small.mdl","Sligwolf's Mini hover tracks","#",2,"","-27.439621,28.012085,5.100098","@52.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow.mdl","Sligwolf's Mini hover tracks","#",1,"","157.982285,-19.999878,83.837341","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_bow.mdl","Sligwolf's Mini hover tracks","#",2,"","-27.427399,-19.999756,5.118835","@52.5,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_i.mdl","Sligwolf's Mini hover tracks","#",1,"","0.000144,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_i.mdl","Sligwolf's Mini hover tracks","#",2,"","101.823288,53.82341,5.81","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_s_i.mdl","Sligwolf's Mini hover tracks","#",1,"","203.999725,12.000124,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_s_i.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000274,96.000008,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_s.mdl","Sligwolf's Mini hover tracks","#",1,"","203.999496,-12.000174,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45_s.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000535,-95.999512,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45.mdl","Sligwolf's Mini hover tracks","#",1,"","0.000114,-95.999878,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_45.mdl","Sligwolf's Mini hover tracks","#",2,"","101.823112,-53.823227,5.81","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_90_i.mdl","Sligwolf's Mini hover tracks","#",1,"","144,-47.999886,5.81","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_90_i.mdl","Sligwolf's Mini hover tracks","#",2,"","6.1e-005,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_90.mdl","Sligwolf's Mini hover tracks","#",1,"","144,47.999947,5.81","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_1_90.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000122,-95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_i.mdl","Sligwolf's Mini hover tracks","#",1,"","237.587646,-2.412163,5.81","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_i.mdl","Sligwolf's Mini hover tracks","#",2,"","6.1e-005,95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_s_i.mdl","Sligwolf's Mini hover tracks","#",1,"","475.999908,-99.999756,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_s_i.mdl","Sligwolf's Mini hover tracks","#",2,"","0.0001,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_s.mdl","Sligwolf's Mini hover tracks","#",1,"","475.999939,99.999634,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45_s.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000108,-95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45.mdl","Sligwolf's Mini hover tracks","#",1,"","237.587524,2.412376,5.81","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_45.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000122,-95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_90_i.mdl","Sligwolf's Mini hover tracks","#",1,"","335.999756,-239.999954,5.81","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_90_i.mdl","Sligwolf's Mini hover tracks","#",2,"","6.9e-005,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_90.mdl","Sligwolf's Mini hover tracks","#",1,"","335.999756,239.999954,5.81","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_2_90.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000122,-95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_i.mdl","Sligwolf's Mini hover tracks","#",1,"","373.352448,-58.647461,5.81","0,-45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_i.mdl","Sligwolf's Mini hover tracks","#",2,"","9.2e-005,96,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_s_i.mdl","Sligwolf's Mini hover tracks","#",1,"","745.999939,-214,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_s_i.mdl","Sligwolf's Mini hover tracks","#",2,"","9.2e-005,96,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_s.mdl","Sligwolf's Mini hover tracks","#",1,"","745.999939,214.000244,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45_s.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000107,-95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45.mdl","Sligwolf's Mini hover tracks","#",1,"","373.352264,58.647644,5.81","0,45,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_45.mdl","Sligwolf's Mini hover tracks","#",2,"","0.000107,-95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_90_i.mdl","Sligwolf's Mini hover tracks","#",1,"","9.2e-005,95.999756,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_90_i.mdl","Sligwolf's Mini hover tracks","#",2,"","527.999756,-431.999878,5.81","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_90.mdl","Sligwolf's Mini hover tracks","#",1,"","0.000107,-95.999756,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_curve_3_90.mdl","Sligwolf's Mini hover tracks","#",2,"","528,431.999939,5.81","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop_quarter_i.mdl","Sligwolf's Mini hover tracks","#",1,"","-25.99988,-19.999998,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop_quarter_i.mdl","Sligwolf's Mini hover tracks","#",2,"","198.190018,-20,229.959763","@-90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop_quarter.mdl","Sligwolf's Mini hover tracks","#",1,"","-25.99988,-19.999998,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop_quarter.mdl","Sligwolf's Mini hover tracks","#",2,"","198.190018,-20,229.959763","@-90,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop1i.mdl","Sligwolf's Mini hover tracks","#",1,"","103.999817,-136,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop1i.mdl","Sligwolf's Mini hover tracks","#",2,"","-103.999939,-32,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop1.mdl","Sligwolf's Mini hover tracks","#",1,"","104.00061,136.000061,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop1.mdl","Sligwolf's Mini hover tracks","#",2,"","-103.999908,32.000008,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop2i.mdl","Sligwolf's Mini hover tracks","#",1,"","103.999939,-227.999084,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop2i.mdl","Sligwolf's Mini hover tracks","#",2,"","-103.999878,-19.999634,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop2.mdl","Sligwolf's Mini hover tracks","#",1,"","103.999878,227.998291,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_loop2.mdl","Sligwolf's Mini hover tracks","#",2,"","-103.999939,19.998779,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_i.mdl","Sligwolf's Mini hover tracks","#",1,"","-26,-20,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_i.mdl","Sligwolf's Mini hover tracks","#",2,"","157.184906,-20,83.365128","@-52.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_small_i.mdl","Sligwolf's Mini hover tracks","#",1,"","-26,28,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_small_i.mdl","Sligwolf's Mini hover tracks","#",2,"","157.1996,28,83.378784","@-52.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_small.mdl","Sligwolf's Mini hover tracks","#",1,"","-26,28,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp_small.mdl","Sligwolf's Mini hover tracks","#",2,"","157.1996,28,83.378784","@-52.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp.mdl","Sligwolf's Mini hover tracks","#",1,"","-26,-20,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_ramp.mdl","Sligwolf's Mini hover tracks","#",2,"","157.184906,-20,83.365128","@-52.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_long.mdl","Sligwolf's Mini hover tracks","#",1,"","312,32,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_long.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,32,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_mid.mdl","Sligwolf's Mini hover tracks","#",1,"","208,32,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_mid.mdl","Sligwolf's Mini hover tracks","#",2,"","-208,32,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_small.mdl","Sligwolf's Mini hover tracks","#",1,"","104,32,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x4_small.mdl","Sligwolf's Mini hover tracks","#",2,"","-104,32,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_long.mdl","Sligwolf's Mini hover tracks","#",1,"","312,-16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_long.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,-16,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_mid.mdl","Sligwolf's Mini hover tracks","#",1,"","208,-16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_mid.mdl","Sligwolf's Mini hover tracks","#",2,"","-208,-16,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_small.mdl","Sligwolf's Mini hover tracks","#",1,"","104,-16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_small.mdl","Sligwolf's Mini hover tracks","#",2,"","-104,-16,5.81","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter_i.mdl","Sligwolf's Mini hover tracks","#",1,"","104,-80,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,-30,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter_i.mdl","Sligwolf's Mini hover tracks","#",3,"","-312,-130,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter.mdl","Sligwolf's Mini hover tracks","#",1,"","-104,80,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter.mdl","Sligwolf's Mini hover tracks","#",2,"","312,30,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_splitter.mdl","Sligwolf's Mini hover tracks","#",3,"","312,130,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_to_x4_i.mdl","Sligwolf's Mini hover tracks","#",1,"","104,16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_to_x4_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,16,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_to_x4.mdl","Sligwolf's Mini hover tracks","#",1,"","104,16,5.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_straight_x8_to_x4.mdl","Sligwolf's Mini hover tracks","#",2,"","-312,16,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x4_i.mdl","Sligwolf's Mini hover tracks","#",1,"","52,32,1.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x4_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-52,32,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x4.mdl","Sligwolf's Mini hover tracks","#",1,"","52,32,1.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x4.mdl","Sligwolf's Mini hover tracks","#",2,"","-52,32,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x8_i.mdl","Sligwolf's Mini hover tracks","#",1,"","52,-16,1.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x8_i.mdl","Sligwolf's Mini hover tracks","#",2,"","-52,-16,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x8.mdl","Sligwolf's Mini hover tracks","#",1,"","52,-16,1.81","",""}) - asmlib.InsertRecord("PIECES", {"models/sligwolf/minihover/hover_trackend_x8.mdl","Sligwolf's Mini hover tracks","#",2,"","-52,-16,5.81","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_0apartments_0.mdl","StephenTechno's Buildings","Apartments 0",1,"","-268,612.001,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_0apartments_0.mdl","StephenTechno's Buildings","Apartments 0",2,"","-268,-612,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_1apartments_1.mdl","StephenTechno's Buildings","Apartments 1",1,"","-268,1248,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_1apartments_1.mdl","StephenTechno's Buildings","Apartments 1",2,"","-268,-1200,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_3apartments_3.mdl","StephenTechno's Buildings","Apartments 3",1,"","-268.008,574.913,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/housing/3_3apartments_3.mdl","StephenTechno's Buildings","Apartments 3",2,"","-268,-577,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_4bank.mdl","StephenTechno's Buildings","Bank",1,"","-268,504,2.031232","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_4bank.mdl","StephenTechno's Buildings","Bank",2,"","-268,-504,2.031232","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/recreational/5_1club_lgbt.mdl","StephenTechno's Buildings","Club Lgbt",1,"","-268,720,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/recreational/5_1club_lgbt.mdl","StephenTechno's Buildings","Club Lgbt",2,"","-268,-720,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/schultz/stores/4_1garage.mdl","StephenTechno's Buildings","Garage",1,"","-268,698,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/schultz/stores/4_1garage.mdl","StephenTechno's Buildings","Garage",2,"","-268,-598,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_1gas_station_a.mdl","StephenTechno's Buildings","Gas Station A",1,"","-268,604,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_1gas_station_a.mdl","StephenTechno's Buildings","Gas Station A",2,"","-268,-620,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_1gas_station_b.mdl","StephenTechno's Buildings","Gas Station B",1,"","-268,612,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_1gas_station_b.mdl","StephenTechno's Buildings","Gas Station B",2,"","-268,-612,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_3gunshop.mdl","StephenTechno's Buildings","Gunshop",1,"","-268,504.001,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_3gunshop.mdl","StephenTechno's Buildings","Gunshop",2,"","-268,-504,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot16x16fence.mdl","StephenTechno's Buildings","#",1,"","-268,575,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot16x16fence.mdl","StephenTechno's Buildings","#",2,"","-268,-577.002,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot16x16.mdl","StephenTechno's Buildings","#",1,"","-268,575,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot16x16.mdl","StephenTechno's Buildings","#",2,"","-268,-577.002,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot32x32fence.mdl","StephenTechno's Buildings","#",1,"","-268,1152.002,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot32x32fence.mdl","StephenTechno's Buildings","#",2,"","-267.999,-1151.292,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot32x32.mdl","StephenTechno's Buildings","#",1,"","-268,1152.002,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot32x32.mdl","StephenTechno's Buildings","#",2,"","-267.999,-1151.292,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot8x8fence.mdl","StephenTechno's Buildings","#",1,"","-268,288,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot8x8fence.mdl","StephenTechno's Buildings","#",2,"","-268,-287.996,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot8x8.mdl","StephenTechno's Buildings","#",1,"","-268,288,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/emptylots/lot8x8.mdl","StephenTechno's Buildings","#",2,"","-268,-287.996,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/schultz/stores/4_0office.mdl","StephenTechno's Buildings","Office",1,"","-267.986,616.053,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/schultz/stores/4_0office.mdl","StephenTechno's Buildings","Office",2,"","-268,-608,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_2pcshop.mdl","StephenTechno's Buildings","Pcshop",1,"","-268,432,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/stores/4_2pcshop.mdl","StephenTechno's Buildings","Pcshop",2,"","-268,-432,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_1road_dl_sdw_1x1.mdl","StephenTechno's Buildings","Road Dl Sdw 1x1",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_1road_dl_sdw_1x1.mdl","StephenTechno's Buildings","Road Dl Sdw 1x1",2,"","-72,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_2road_dl_sdw_1x2.mdl","StephenTechno's Buildings","Road Dl Sdw 1x2",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_2road_dl_sdw_1x2.mdl","StephenTechno's Buildings","Road Dl Sdw 1x2",2,"","-144,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_10road_dl_sdw_1x32.mdl","StephenTechno's Buildings","Road Dl Sdw 1x32",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_10road_dl_sdw_1x32.mdl","StephenTechno's Buildings","Road Dl Sdw 1x32",2,"","-2304,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_3road_dl_sdw_1x3.mdl","StephenTechno's Buildings","Road Dl Sdw 1x3",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_3road_dl_sdw_1x3.mdl","StephenTechno's Buildings","Road Dl Sdw 1x3",2,"","-216,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_4road_dl_sdw_1x4.mdl","StephenTechno's Buildings","Road Dl Sdw 1x4",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_4road_dl_sdw_1x4.mdl","StephenTechno's Buildings","Road Dl Sdw 1x4",2,"","-288,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_5road_dl_sdw_1x5.mdl","StephenTechno's Buildings","Road Dl Sdw 1x5",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_5road_dl_sdw_1x5.mdl","StephenTechno's Buildings","Road Dl Sdw 1x5",2,"","-360,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_13road_intersection_2w.mdl","StephenTechno's Buildings","Road Intersection 2w",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_13road_intersection_2w.mdl","StephenTechno's Buildings","Road Intersection 2w",2,"","-340,-340,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl","StephenTechno's Buildings","Road Intersection 3w",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl","StephenTechno's Buildings","Road Intersection 3w",2,"","-340,340,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_12road_intersection_3w.mdl","StephenTechno's Buildings","Road Intersection 3w",3,"","-340,-340,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl","StephenTechno's Buildings","Road Intersection 4w",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl","StephenTechno's Buildings","Road Intersection 4w",2,"","-340,340,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl","StephenTechno's Buildings","Road Intersection 4w",3,"","-680,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_11road_intersection_4w.mdl","StephenTechno's Buildings","Road Intersection 4w",4,"","-340,-340,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_14road_intersection_deadend.mdl","StephenTechno's Buildings","Road Intersection Deadend",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_15road_intersection_turn1.mdl","StephenTechno's Buildings","Road Intersection Turn1",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_15road_intersection_turn1.mdl","StephenTechno's Buildings","Road Intersection Turn1",2,"","-340,-340,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_16road_intersection_turn2_16.mdl","StephenTechno's Buildings","Road Intersection Turn",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadswsidewalk/2_16road_intersection_turn2_16.mdl","StephenTechno's Buildings","Road Intersection Turn",2,"","-1564,1564,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",2,"","-1632,1152,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",3,"","-2304,1152,315.031616","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",4,"","-2976,1152,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",5,"","-2976.007,-1151.975,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",6,"","-2304,-1152,315.031616","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",7,"","-1632,-1152,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy_ramp_1.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 1",8,"","-4608,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 2",1,"","0,-671.994,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 2",2,"","0,0,315.031616","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 2",3,"","0,671.995,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_2.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp 2",4,"","-4608,0,315.031616","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp Stop",1,"","0,-671.994,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp Stop",2,"","0,0,315.031616","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp Stop",3,"","0,671.995,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_1roadsdwhwy_ramp_stop.mdl","StephenTechno's Buildings","Roadsdwhwy Ramp Stop",4,"","-4160,0,15.202","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_7roadsdwhwy_turn1.mdl","StephenTechno's Buildings","Roadsdwhwy Turn1",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_7roadsdwhwy_turn1.mdl","StephenTechno's Buildings","Roadsdwhwy Turn1",2,"","-1692,1692,316.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_4roadsdwhwy1x16.mdl","StephenTechno's Buildings","Roadsdwhwy1x16",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_4roadsdwhwy1x16.mdl","StephenTechno's Buildings","Roadsdwhwy1x16",2,"","-1152,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy1x1.mdl","StephenTechno's Buildings","Roadsdwhwy1x1",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_0roadsdwhwy1x1.mdl","StephenTechno's Buildings","Roadsdwhwy1x1",2,"","-72,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_5roadsdwhwy1x32.mdl","StephenTechno's Buildings","Roadsdwhwy1x32",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_5roadsdwhwy1x32.mdl","StephenTechno's Buildings","Roadsdwhwy1x32",2,"","-2304,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_2roadsdwhwy1x4.mdl","StephenTechno's Buildings","Roadsdwhwy1x4",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_2roadsdwhwy1x4.mdl","StephenTechno's Buildings","Roadsdwhwy1x4",2,"","-288,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_6roadsdwhwy1x64.mdl","StephenTechno's Buildings","Roadsdwhwy1x64",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_6roadsdwhwy1x64.mdl","StephenTechno's Buildings","Roadsdwhwy1x64",2,"","-4608,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_3roadsdwhwy1x8.mdl","StephenTechno's Buildings","Roadsdwhwy1x8",1,"","0,0,316.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_3roadsdwhwy1x8.mdl","StephenTechno's Buildings","Roadsdwhwy1x8",2,"","-576,0,316.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_10roadsdwhwybridge1x16.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x16",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_10roadsdwhwybridge1x16.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x16",2,"","-1152,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_11roadsdwhwybridge1x32.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x32",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_11roadsdwhwybridge1x32.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x32",2,"","-2304,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_8roadsdwhwybridge1x4.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x4",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_8roadsdwhwybridge1x4.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x4",2,"","-288,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_12roadsdwhwybridge1x64.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x64",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_12roadsdwhwybridge1x64.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x64",2,"","-4608,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_9roadsdwhwybridge1x8.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x8",1,"","0,0,60.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwhighway/1_9roadsdwhwybridge1x8.mdl","StephenTechno's Buildings","Roadsdwhwybridge1x8",2,"","-576,0,60.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_13roadsdwsidewalk_int_2way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 2way",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_13roadsdwsidewalk_int_2way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 2way",2,"","-540,540,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 3way",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 3way",2,"","-540,540,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_12roadsdwsidewalk_int_3way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 3way",3,"","-540,-540,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 4way",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 4way",2,"","-540,540,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 4way",3,"","-1080,0,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_11roadsdwsidewalk_int_4way.mdl","StephenTechno's Buildings","Roadsdwsidewalk Int 4way",4,"","-540,-540,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_14roadsdwsidewalk_turn_1.mdl","StephenTechno's Buildings","Roadsdwsidewalk Turn 1",1,"","0,-4,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_14roadsdwsidewalk_turn_1.mdl","StephenTechno's Buildings","Roadsdwsidewalk Turn 1",2,"","-540,-544,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_15roadsdwsidewalk_turn_2.mdl","StephenTechno's Buildings","Roadsdwsidewalk Turn 2",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_15roadsdwsidewalk_turn_2.mdl","StephenTechno's Buildings","Roadsdwsidewalk Turn 2",2,"","-1692,1692,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_9roadsdwsidewalk1x16.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x16",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_9roadsdwsidewalk1x16.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x16",2,"","-1152,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_1roadsdwsidewalk1x1.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x1",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_1roadsdwsidewalk1x1.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x1",2,"","-72,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_2roadsdwsidewalk1x2.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x2",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_2roadsdwsidewalk1x2.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x2",2,"","-144,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_10roadsdwsidewalk1x32.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x32",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_10roadsdwsidewalk1x32.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x32",2,"","-2304,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_3roadsdwsidewalk1x3.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x3",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_3roadsdwsidewalk1x3.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x3",2,"","-216,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_4roadsdwsidewalk1x4.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x4",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_4roadsdwsidewalk1x4.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x4",2,"","-288,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_5roadsdwsidewalk1x5.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x5",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_5roadsdwsidewalk1x5.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x5",2,"","-360,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_6roadsdwsidewalk1x6.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x6",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_6roadsdwsidewalk1x6.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x6",2,"","-432,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_7roadsdwsidewalk1x7.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x7",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_7roadsdwsidewalk1x7.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x7",2,"","-504,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_8roadsdwsidewalk1x8.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x8",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_8roadsdwsidewalk1x8.mdl","StephenTechno's Buildings","Roadsdwsidewalk1x8",2,"","-576,0,3.03125","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_0roadsdwsidewalktransfer.mdl","StephenTechno's Buildings","Roadsdwsidewalktransfer",1,"","0,0,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/roadsdwsidewalk/0_0roadsdwsidewalktransfer.mdl","StephenTechno's Buildings","Roadsdwsidewalktransfer",2,"","-376,0,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",1,"","0,-916,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",2,"","0,916,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",3,"","-340,1256,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",4,"","-2172,1256,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",5,"","-2512,916,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",6,"","-2512,-916,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",7,"","-2172,-1256,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_2skyscraper1.mdl","StephenTechno's Buildings","Skyscraper1",8,"","-340,-1256,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",1,"","0,-916,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",2,"","0,916,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",3,"","-340,1256,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",4,"","-2172,1256,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",5,"","-2512,916,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",6,"","-2512,-916,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",7,"","-2172,-1256,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_3skyscraper2.mdl","StephenTechno's Buildings","Skyscraper2",8,"","-340,-1256,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",1,"","0,-1492,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",2,"","0,1492,3.03125","",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",3,"","-340,1832,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",4,"","-2172,1832,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",5,"","-2512,1492,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",6,"","-2512,-1492,3.03125","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",7,"","-2172,-1832,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/misc/6_4skyscraper3.mdl","StephenTechno's Buildings","Skyscraper3",8,"","-340,-1832,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/recreational/5_2stripclub.mdl","StephenTechno's Buildings","Stripclub",1,"","-268,736,3.03125","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/buildingspack/recreational/5_2stripclub.mdl","StephenTechno's Buildings","Stripclub",2,"","-268,-736,3.03125","0,-90,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_1024_support.mdl","Transrapid","#",1,"","512,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_1024_support.mdl","Transrapid","#",2,"","-512,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_1024.mdl","Transrapid","#",1,"","512,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_1024.mdl","Transrapid","#",2,"","-512,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_128.mdl","Transrapid","#",1,"","64,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_128.mdl","Transrapid","#",2,"","-64,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_2048_support.mdl","Transrapid","#",1,"","1024,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_2048_support.mdl","Transrapid","#",2,"","-1024,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_2048.mdl","Transrapid","#",1,"","1024,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_2048.mdl","Transrapid","#",2,"","-1024,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_256.mdl","Transrapid","#",1,"","128,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_256.mdl","Transrapid","#",2,"","-128,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_4096_support.mdl","Transrapid","#",1,"","2048,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_4096_support.mdl","Transrapid","#",2,"","-2048,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_4096.mdl","Transrapid","#",1,"","2048,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_4096.mdl","Transrapid","#",2,"","-2048,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_512.mdl","Transrapid","#",1,"","256,0,3.984","",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/track/straight/straight_512.mdl","Transrapid","#",2,"","-256,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/ron/maglev/support/support_a.mdl","Transrapid","#",1,"","0,0,3.984","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/funnel.mdl","XQM Ball Rails","#",1,"","2.206,0.003,4.282","@90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/loop_left.mdl","XQM Ball Rails","#",1,"","13.7315,41.726,-0.968","0,22.5,-2.2585",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/loop_left.mdl","XQM Ball Rails","#",2,"","-13.7315,-41.726,-0.968","0,-157.5,-2.2585",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/loop_right.mdl","XQM Ball Rails","#",1,"","13.864,-41.787,-0.953","0,-22.5,2.433",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/loop_right.mdl","XQM Ball Rails","#",2,"","-13.562,41.789,-0.952","0,157.5,2.433",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_15.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_15.mdl","XQM Ball Rails","#",2,"","-20.245,-0.018,-4.13","@15,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_30.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_30.mdl","XQM Ball Rails","#",2,"","-32.078,0.022,-9.114","@30,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_45.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_45.mdl","XQM Ball Rails","#",2,"","-42.144,-0.011,-16.998","@45,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_90.mdl","XQM Ball Rails","#",1,"","38,0.019,30.42","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_down_90.mdl","XQM Ball Rails","#",2,"","-30.418,-0.009,-37.98","@90,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_15.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_15.mdl","XQM Ball Rails","#",2,"","-15.521,0.014,-1.009","@-15,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_30.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_30.mdl","XQM Ball Rails","#",2,"","-22.871,-0.019,2.152","@-30,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_45.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_45.mdl","XQM Ball Rails","#",2,"","-29.149,0.006,7.109","@-45,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_90.mdl","XQM Ball Rails","#",1,"","6.004,0.005,15.322","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/slope_up_90.mdl","XQM Ball Rails","#",2,"","-44.066,-0.011,65.001","@-90,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_16.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_16.mdl","XQM Ball Rails","#",2,"","-186,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_1.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_1.mdl","XQM Ball Rails","#",2,"","-6,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_2.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_2.mdl","XQM Ball Rails","#",2,"","-18,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_4.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_4.mdl","XQM Ball Rails","#",2,"","-42,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_8.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/straight_8.mdl","XQM Ball Rails","#",2,"","-90,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_16.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_16.mdl","XQM Ball Rails","#",2,"","-186,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_1.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_1.mdl","XQM Ball Rails","#",2,"","-6,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_2.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_2.mdl","XQM Ball Rails","#",2,"","-18,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_4.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_4.mdl","XQM Ball Rails","#",2,"","-42,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_8.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/tunnel_8.mdl","XQM Ball Rails","#",2,"","-90,0,-2.25","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_15.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_15.mdl","XQM Ball Rails","#",2,"","-17.591,3.105,-2.25","0,165,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_180.mdl","XQM Ball Rails","#",1,"","52.789,44.753,-2.273","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_180.mdl","XQM Ball Rails","#",2,"","-52.808,44.743,-2.238","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_30.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_30.mdl","XQM Ball Rails","#",2,"","-28.676,7.705,-2.252","0,150,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_45.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_45.mdl","XQM Ball Rails","#",2,"","-38.2,15.001,-2.261","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_90.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/turn_90.mdl","XQM Ball Rails","#",2,"","-58.848,56.855,-2.255","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_45_left.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_45_left.mdl","XQM Ball Rails","#",2,"","-90,0,-2.25","0,180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_45_right.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_45_right.mdl","XQM Ball Rails","#",2,"","-90,0,-2.25","0,180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_90_left.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_90_left.mdl","XQM Ball Rails","#",2,"","-186,0,-2.25","0,180,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_90_right.mdl","XQM Ball Rails","#",1,"","6,0,-2.25","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/rails/twist_90_right.mdl","XQM Ball Rails","#",2,"","-186,0,-2.25","0,180,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_1.mdl","XQM Coaster","#",1,"","150.199,0.032,4.885","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_1.mdl","XQM Coaster","#",2,"","-150.168,-0.014,4.881","0,180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_2.mdl","XQM Coaster","#",1,"","300.199,-0.011,4.895","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_2.mdl","XQM Coaster","#",2,"","-300.198,0.032,4.914","0,180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_3.mdl","XQM Coaster","#",1,"","449.378,-0.025,4.893","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_3.mdl","XQM Coaster","#",2,"","-449.801,0.018,4.896","0,180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_4.mdl","XQM Coaster","#",1,"","599.802,-0.013,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_left_4.mdl","XQM Coaster","#",2,"","-600.198,-0.015,4.902","0,-180,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_1.mdl","XQM Coaster","#",1,"","149.7,-0.005,4.88","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_1.mdl","XQM Coaster","#",2,"","-149.7,0.024,4.865","0,180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_2.mdl","XQM Coaster","#",1,"","299.79,-0.021,4.885","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_2.mdl","XQM Coaster","#",2,"","-299.79,0.007,4.862","0,180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_3.mdl","XQM Coaster","#",1,"","449.8,-0.018,4.896","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_3.mdl","XQM Coaster","#",2,"","-449.802,-0.003,4.853","0,-180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_4.mdl","XQM Coaster","#",1,"","600.194,-0.017,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_start_right_4.mdl","XQM Coaster","#",2,"","-600.199,0.025,4.872","0,180,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_1.mdl","XQM Coaster","#",1,"","73.8,14.45,4.887","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_1.mdl","XQM Coaster","#",2,"","73.46,-372.816,4.902","0,0,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_2.mdl","XQM Coaster","#",1,"","146.8,28.715,4.888","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_2.mdl","XQM Coaster","#",2,"","147.376,-737.938,4.911","0,0,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_3.mdl","XQM Coaster","#",1,"","220.191,43.001,4.907","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_3.mdl","XQM Coaster","#",2,"","220.813,-1105.46,4.883","0,0,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_4.mdl","XQM Coaster","#",1,"","293.308,-1472.996,4.916","0,0,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_180_4.mdl","XQM Coaster","#",2,"","292.8,57.26,4.89","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_1.mdl","XQM Coaster","#",1,"","74.199,14.457,4.888","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_1.mdl","XQM Coaster","#",2,"","-63.081,-42.297,4.912","0,-135,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_2.mdl","XQM Coaster","#",1,"","147.199,28.717,4.886","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_2.mdl","XQM Coaster","#",2,"","-124.087,-83.935,4.901","0,-135,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_3.mdl","XQM Coaster","#",1,"","219.8,42.98,4.887","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_3.mdl","XQM Coaster","#",2,"","-185.808,-125.258,4.908","0,-135,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_4.mdl","XQM Coaster","#",1,"","292.799,57.249,4.89","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_45_4.mdl","XQM Coaster","#",2,"","-247.727,-166.794,4.908","0,-135,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_1.mdl","XQM Coaster","#",1,"","73.8,14.448,4.895","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_1.mdl","XQM Coaster","#",2,"","-119.757,-178.862,4.909","0,-90,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_2.mdl","XQM Coaster","#",1,"","147.2,28.719,4.887","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_2.mdl","XQM Coaster","#",2,"","-235.985,-355.128,4.904","0,-90,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_3.mdl","XQM Coaster","#",1,"","220.199,42.985,4.89","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_3.mdl","XQM Coaster","#",2,"","-353.929,-531.719,4.91","0,-90,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_4.mdl","XQM Coaster","#",1,"","292.79,57.259,4.881","0,0,45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/bank_turn_90_4.mdl","XQM Coaster","#",2,"","-471.864,-707.923,4.91","0,-90,-45",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_1.mdl","XQM Coaster","#",1,"","75.79,-0.013,-2.414","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_1.mdl","XQM Coaster","#",2,"","-70.806,0,26.58","@-22.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_2.mdl","XQM Coaster","#",1,"","149.8,-0.013,-9.62","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_2.mdl","XQM Coaster","#",2,"","-141.814,0.004,48.442","@-22.5,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_3.mdl","XQM Coaster","#",1,"","225.199,-0.016,-16.814","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_3.mdl","XQM Coaster","#",2,"","-214.187,0.006,70.463","@-22.5,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_4.mdl","XQM Coaster","#",1,"","298.8,-0.013,-24.02","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_4.mdl","XQM Coaster","#",2,"","-285.799,0.019,92.158","@-22.5,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_1.mdl","XQM Coaster","#",1,"","-73.8,-0.013,11.999","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_1.mdl","XQM Coaster","#",2,"","72.814,-0.013,-16.992","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_2.mdl","XQM Coaster","#",1,"","-148.626,-0.013,19.51","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_2.mdl","XQM Coaster","#",2,"","134.806,-0.011,-36.762","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_3.mdl","XQM Coaster","#",1,"","-224.899,0.01,25.763","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_3.mdl","XQM Coaster","#",2,"","202.547,-0.014,-57.473","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_4.mdl","XQM Coaster","#",1,"","-300.319,0.017,32.11","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_225_down_4.mdl","XQM Coaster","#",2,"","268.6,0.052,-77.783","@22.5,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_1.mdl","XQM Coaster","#",1,"","74.8,-0.013,-9.758","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_1.mdl","XQM Coaster","#",2,"","-59.846,0.021,45.855","@-45,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_2.mdl","XQM Coaster","#",1,"","-148.199,0.021,-24.085","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_2.mdl","XQM Coaster","#",2,"","121.828,-0.004,88.131","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_3.mdl","XQM Coaster","#",1,"","-221.204,0.005,-38.364","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_3.mdl","XQM Coaster","#",2,"","183.612,-0.018,129.084","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_4.mdl","XQM Coaster","#",1,"","-293.8,-0.013,-52.661","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_4.mdl","XQM Coaster","#",2,"","245.168,-0.007,170.857","@-45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_1.mdl","XQM Coaster","#",1,"","-71.199,-0.013,18.809","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_1.mdl","XQM Coaster","#",2,"","63.815,-0.021,-37.126","@45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_2.mdl","XQM Coaster","#",1,"","-144.8,-0.013,33.103","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_2.mdl","XQM Coaster","#",2,"","125.217,-0.014,-78.778","@45,0,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_3.mdl","XQM Coaster","#",1,"","217.199,-0.013,47.332","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_3.mdl","XQM Coaster","#",2,"","-187.587,0.003,-120.127","@45,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_4.mdl","XQM Coaster","#",1,"","290.79,-0.013,61.604","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_45_down_4.mdl","XQM Coaster","#",2,"","-249.142,0.017,-161.855","@45,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_1.mdl","XQM Coaster","#",1,"","75,-0.016,-9.757","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_1.mdl","XQM Coaster","#",2,"","-115.988,0.017,181.075","@-90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_2.mdl","XQM Coaster","#",1,"","-148.198,-0.013,-24.085","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_2.mdl","XQM Coaster","#",2,"","233.158,0.013,358.192","@-90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_3.mdl","XQM Coaster","#",1,"","-221.1,-0.013,-38.366","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_3.mdl","XQM Coaster","#",2,"","351.2,-0.013,533.582","@-90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_4.mdl","XQM Coaster","#",1,"","-293.701,-0.013,-52.661","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_4.mdl","XQM Coaster","#",2,"","468.482,-0.013,710.225","@-90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_1.mdl","XQM Coaster","#",1,"","-70.793,-0.038,18.807","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_1.mdl","XQM Coaster","#",2,"","119.415,-0.013,-171.482","@90,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_2.mdl","XQM Coaster","#",1,"","-144.804,-0.013,33.103","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_2.mdl","XQM Coaster","#",2,"","237.418,-0.013,-349.306","@90,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_3.mdl","XQM Coaster","#",1,"","217.199,-0.013,47.332","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_3.mdl","XQM Coaster","#",2,"","-355.101,0.01,-524.496","@90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_4.mdl","XQM Coaster","#",1,"","290.8,-0.013,61.604","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/slope_90_down_4.mdl","XQM Coaster","#",2,"","-473.228,-0.013,-701.956","@90,0,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_1.mdl","XQM Coaster","#",1,"","149.695,-0.02,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_1.mdl","XQM Coaster","#",2,"","-2249.721,0.014,4.888","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_2.mdl","XQM Coaster","#",1,"","1350.218,0.029,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_2.mdl","XQM Coaster","#",2,"","-3450.199,-0.009,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_3.mdl","XQM Coaster","#",1,"","2550,-0.013,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_3.mdl","XQM Coaster","#",2,"","-4650.203,0.023,4.886","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_4.mdl","XQM Coaster","#",1,"","3749.804,-0.001,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_left_4.mdl","XQM Coaster","#",2,"","-5849.8,0.036,4.888","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_1.mdl","XQM Coaster","#",1,"","150,-0.013,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_1.mdl","XQM Coaster","#",2,"","-2250,-0.013,4.886","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_3.mdl","XQM Coaster","#",1,"","2550.2,-0.012,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_3.mdl","XQM Coaster","#",2,"","-4650.14,-0.013,4.886","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_4.mdl","XQM Coaster","#",1,"","3749.79,-0.019,4.879","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_corkscrew_right_4.mdl","XQM Coaster","#",2,"","-5849.795,0.008,4.884","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_loop_3.mdl","XQM Coaster","#",1,"","14.2,67.584,-279.931","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_loop_3.mdl","XQM Coaster","#",2,"","-0.172,-67.619,-279.937","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_loop_4.mdl","XQM Coaster","#",1,"","2.16,89.53,-307.495","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_full_loop_4.mdl","XQM Coaster","#",2,"","-18.191,-72.398,-307.642","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_1.mdl","XQM Coaster","#",1,"","150.079,-0.009,4.878","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_1.mdl","XQM Coaster","#",2,"","-1050.198,-0.036,4.877","0,180,-180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_2.mdl","XQM Coaster","#",1,"","299.8,-0.013,4.884","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_2.mdl","XQM Coaster","#",2,"","-2099.8,-0.013,4.883","0,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_3.mdl","XQM Coaster","#",1,"","449.801,-0.014,4.882","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_3.mdl","XQM Coaster","#",2,"","-3149.802,-0.028,4.871","0,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_4.mdl","XQM Coaster","#",1,"","599.801,-0.014,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_left_4.mdl","XQM Coaster","#",2,"","-4199.8,-0.013,4.881","0,-180,-180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_1.mdl","XQM Coaster","#",1,"","150.199,0.013,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_1.mdl","XQM Coaster","#",2,"","-1050.199,-0.01,4.886","0,180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_2.mdl","XQM Coaster","#",1,"","1126.907,-0.013,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_2.mdl","XQM Coaster","#",2,"","-1272.492,-0.164,4.883","0,-180,-180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_3.mdl","XQM Coaster","#",1,"","1349.823,-0.012,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_3.mdl","XQM Coaster","#",2,"","-2249.7,-0.013,4.884","0,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_4.mdl","XQM Coaster","#",1,"","1950.199,-0.017,4.889","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_half_corkscrew_right_4.mdl","XQM Coaster","#",2,"","-2850.199,-0.047,4.88","0,-180,180",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_2.mdl","XQM Coaster","#",1,"","189.277,59.435,41.118","0,90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_2.mdl","XQM Coaster","#",2,"","-192.302,46.789,-17.492","@22.5,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_3.mdl","XQM Coaster","#",1,"","-285.755,-96.647,32.538","0,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_3.mdl","XQM Coaster","#",2,"","281.393,-79.204,-55.216","@22.5,-90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_4.mdl","XQM Coaster","#",1,"","322.424,-72.015,15.907","0,-90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_4.mdl","XQM Coaster","#",2,"","-419.735,-44.894,132.706","@-22.5,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_2.mdl","XQM Coaster","#",1,"","-207.841,30.414,100.219","@-22.5,-90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_2.mdl","XQM Coaster","#",2,"","-207.993,7.31,-17.474","@22.5,90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_3.mdl","XQM Coaster","#",1,"","281.359,-6.612,120.391","@-22.5,90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_3.mdl","XQM Coaster","#",2,"","281.371,28.004,-55.354","@22.5,-90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_4.mdl","XQM Coaster","#",1,"","322.609,52.146,251.028","0,90,-90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_helix_middle_full_4.mdl","XQM Coaster","#",2,"","322.431,5.79,15.895","0,-90,90",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_station.mdl","XQM Coaster","#",1,"","150.194,-0.045,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_station.mdl","XQM Coaster","#",2,"","-150.184,-0.045,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_2.mdl","XQM Coaster","#",1,"","149.8,36.553,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_2.mdl","XQM Coaster","#",2,"","-149.8,-36.54,4.886","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_3.mdl","XQM Coaster","#",1,"","225.159,36.552,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_3.mdl","XQM Coaster","#",2,"","-225.2,-36.559,4.886","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_4.mdl","XQM Coaster","#",1,"","299.8,36.623,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_left_4.mdl","XQM Coaster","#",2,"","-299.8,-36.6,4.886","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_2.mdl","XQM Coaster","#",1,"","150.189,-36.538,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_2.mdl","XQM Coaster","#",2,"","-150.199,36.554,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_3.mdl","XQM Coaster","#",1,"","225.199,-36.549,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_3.mdl","XQM Coaster","#",2,"","-225.099,36.55,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_4.mdl","XQM Coaster","#",1,"","300.2,-36.649,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/special_sturn_right_4.mdl","XQM Coaster","#",2,"","-300.195,36.561,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_1.mdl","XQM Coaster","#",1,"","74.802,-0.013,4.886","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_1.mdl","XQM Coaster","#",2,"","-74.803,-0.013,4.886","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_2.mdl","XQM Coaster","#",1,"","149.805,-0.013,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_2.mdl","XQM Coaster","#",2,"","-149.805,-0.013,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_3.mdl","XQM Coaster","#",1,"","225.206,-0.013,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_3.mdl","XQM Coaster","#",2,"","-225.196,-0.013,4.887","0,-180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_4.mdl","XQM Coaster","#",1,"","300.164,-0.013,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/straight_4.mdl","XQM Coaster","#",2,"","-300.189,-0.013,4.887","0,180,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_1.mdl","XQM Coaster","#",1,"","72.8,367.527,4.894","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_1.mdl","XQM Coaster","#",2,"","72.8,-14.286,4.894","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_2.mdl","XQM Coaster","#",1,"","146.198,-28.561,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_2.mdl","XQM Coaster","#",2,"","146.041,735.053,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_3.mdl","XQM Coaster","#",1,"","218.767,-42.833,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_3.mdl","XQM Coaster","#",2,"","218.767,1100.169,4.91","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_4.mdl","XQM Coaster","#",1,"","292.283,-57.102,4.896","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_4.mdl","XQM Coaster","#",2,"","292.283,1468.9,4.896","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_2.mdl","XQM Coaster","#",1,"","93.769,96.842,4.9","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_2.mdl","XQM Coaster","#",2,"","-93.912,96.841,4.9","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_3.mdl","XQM Coaster","#",1,"","138.58,144.2,4.906","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_3.mdl","XQM Coaster","#",2,"","-142.846,144.192,4.888","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_4.mdl","XQM Coaster","#",1,"","184.588,191.8,4.905","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_180_tight_4.mdl","XQM Coaster","#",2,"","-190.323,191.8,4.905","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_1.mdl","XQM Coaster","#",1,"","73.232,-14.287,4.894","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_1.mdl","XQM Coaster","#",2,"","-62.119,41.771,4.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_2.mdl","XQM Coaster","#",1,"","145.801,-28.557,4.893","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_2.mdl","XQM Coaster","#",2,"","-123.848,83.091,4.921","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_3.mdl","XQM Coaster","#",1,"","218.8,-42.829,4.899","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_3.mdl","XQM Coaster","#",2,"","-184.844,124.707,4.88","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_4.mdl","XQM Coaster","#",1,"","292.197,-57.102,4.896","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_45_4.mdl","XQM Coaster","#",2,"","-246.823,166.305,4.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_1.mdl","XQM Coaster","#",1,"","73.199,-14.286,4.894","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_1.mdl","XQM Coaster","#",2,"","-117.904,176.785,4.888","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_2.mdl","XQM Coaster","#",1,"","145.748,-28.566,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_2.mdl","XQM Coaster","#",2,"","-235.851,352.965,4.883","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_3.mdl","XQM Coaster","#",1,"","219.199,-42.829,4.9","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_3.mdl","XQM Coaster","#",2,"","-352.072,529.25,4.888","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_4.mdl","XQM Coaster","#",1,"","292.695,-57.102,4.897","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_4.mdl","XQM Coaster","#",2,"","-470.379,706.175,4.887","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_1.mdl","XQM Coaster","#",1,"","68.201,-27.47,4.907","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_1.mdl","XQM Coaster","#",2,"","-27.469,68.408,4.907","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_2.mdl","XQM Coaster","#",1,"","134.784,-54.932,4.883","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_2.mdl","XQM Coaster","#",2,"","-54.9,134.79,4.908","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_3.mdl","XQM Coaster","#",1,"","203.169,-82.386,4.885","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_3.mdl","XQM Coaster","#",2,"","-82.342,203.198,4.884","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_4.mdl","XQM Coaster","#",1,"","270.8,-109.856,4.889","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_90_tight_4.mdl","XQM Coaster","#",2,"","-109.812,270.799,4.89","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_1.mdl","XQM Coaster","#",1,"","61.949,-171.786,-85.113","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_1.mdl","XQM Coaster","#",2,"","61.849,210.026,94.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_2.mdl","XQM Coaster","#",1,"","145.79,-377.307,-51.364","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_2.mdl","XQM Coaster","#",2,"","145.64,386.277,128.636","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_3.mdl","XQM Coaster","#",1,"","219.186,-560.329,-73.863","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_3.mdl","XQM Coaster","#",2,"","219.938,582.673,106.137","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_4.mdl","XQM Coaster","#",1,"","292.682,-57.062,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_180_4.mdl","XQM Coaster","#",2,"","292.882,1468.926,184.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_1.mdl","XQM Coaster","#",1,"","73.214,-14.287,4.889","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_1.mdl","XQM Coaster","#",2,"","-62.103,41.809,49.893","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_2.mdl","XQM Coaster","#",1,"","145.789,-28.557,4.888","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_2.mdl","XQM Coaster","#",2,"","-123.816,83.09,49.885","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_3.mdl","XQM Coaster","#",1,"","218.817,-42.829,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_3.mdl","XQM Coaster","#",2,"","-184.823,124.712,49.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_4.mdl","XQM Coaster","#",1,"","292.295,-57.102,4.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_45_4.mdl","XQM Coaster","#",2,"","-246.825,166.303,49.887","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_1.mdl","XQM Coaster","#",1,"","151.949,-115.536,-28.863","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_1.mdl","XQM Coaster","#",2,"","-39.186,75.539,61.137","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_2.mdl","XQM Coaster","#",1,"","247.052,-129.807,-17.611","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_2.mdl","XQM Coaster","#",2,"","-134.631,251.731,72.387","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_3.mdl","XQM Coaster","#",1,"","342.55,-166.589,-6.356","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_3.mdl","XQM Coaster","#",2,"","-228.353,405.104,83.627","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_4.mdl","XQM Coaster","#",1,"","461.445,-180.852,-6.363","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_90_4.mdl","XQM Coaster","#",2,"","-301.622,582.445,83.635","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_1.mdl","XQM Coaster","#",1,"","73.2,-149.286,128.637","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_1.mdl","XQM Coaster","#",2,"","73.099,232.527,-51.363","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_2.mdl","XQM Coaster","#",1,"","145.8,-287.306,117.387","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_2.mdl","XQM Coaster","#",2,"","145.6,476.307,-62.612","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_3.mdl","XQM Coaster","#",1,"","219.196,-391.579,117.387","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_3.mdl","XQM Coaster","#",2,"","219.948,751.399,-62.61","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_4.mdl","XQM Coaster","#",1,"","292.681,-630.852,117.391","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_180_4.mdl","XQM Coaster","#",2,"","292.833,895.14,-62.613","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_1.mdl","XQM Coaster","#",1,"","73.199,-14.286,49.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_1.mdl","XQM Coaster","#",2,"","-62.097,41.783,4.886","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_2.mdl","XQM Coaster","#",1,"","145.79,-28.558,49.879","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_2.mdl","XQM Coaster","#",2,"","-123.833,83.088,4.892","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_3.mdl","XQM Coaster","#",1,"","219.197,-42.829,49.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_3.mdl","XQM Coaster","#",2,"","-185.095,124.99,4.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_4.mdl","XQM Coaster","#",1,"","292.695,-57.102,49.887","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_45_4.mdl","XQM Coaster","#",2,"","-247.123,166.602,4.888","0,135,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_1.mdl","XQM Coaster","#",1,"","128.858,-14.281,72.387","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_1.mdl","XQM Coaster","#",2,"","-61.682,176.749,-17.61","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_2.mdl","XQM Coaster","#",1,"","179.55,-28.557,61.136","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_2.mdl","XQM Coaster","#",2,"","-202.131,352.976,-28.864","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_3.mdl","XQM Coaster","#",1,"","241.3,-42.829,61.136","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_3.mdl","XQM Coaster","#",2,"","-329.578,528.859,-28.864","0,90,0",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_4.mdl","XQM Coaster","#",1,"","292.296,-57.102,94.89","",""}) - asmlib.InsertRecord("PIECES", {"models/xqm/coastertrack/turn_slope_down_90_4.mdl","XQM Coaster","#",2,"","-470.372,705.791,4.886","0,90,0",""}) diff --git a/data/trackassembly/exp/z_autorun_[anyone_s_horrible_trackpack].txt b/data/trackassembly/exp/z_autorun_[anyone_s_horrible_trackpack].txt deleted file mode 100644 index eec0f4e1..00000000 --- a/data/trackassembly/exp/z_autorun_[anyone_s_horrible_trackpack].txt +++ /dev/null @@ -1,373 +0,0 @@ ---[[ - * The purpose of this Lua file is to add your track pack pieces to the - * track assembly tool, so they can appear in the tool selection menu. - * Why the name starts with /z/ you may ask. When Gmod loads the game - * it goes trough all the Lua addons alphabetically. - * That means your file name ( The file you are reading right now ) - * must be greater alphabetically than /trackasmlib/, so the API of the - * module can be loaded before you can use it like seen below. -]]-- - --- Local reference to the module. -local asmlib = trackasmlib - --- Change this to your addon name. -local myAddon = "Anyone's Horrible Trackpack" -- Your addon name goes here - ---[[ - * Change this if you want to use different in-game type - * You can also use multiple types myType1, myType2, - * myType3, ... myType/n when your addon contains - * multiple model packs. -]]-- -local myType = myAddon -- The type your addon resides in the tool with - ---[[ - * For actually produce an error you can replace the /print/ - * statement with one of following API calls: - * http://wiki.garrysmod.com/page/Global/error - * http://wiki.garrysmod.com/page/Global/Error - * http://wiki.garrysmod.com/page/Global/ErrorNoHalt -]] -local myError = ErrorNoHalt - --- This is used for addon relation prefix. Fingers away from it -local myPrefix = myAddon:gsub("[^%w]","_") -- Addon prefix - --- This is the script path. It tells TA who wants to add these models --- Do not touch this also, it is used for debugging -local myScript = tostring(debug.getinfo(1).source or "N/A") - myScript = "@"..myScript:gsub("^%W+", ""):gsub("\\","/") ---[[ - * This function defines what happens when there is an error present - * Usually you can tell Gmod that you want it to generate an error - * and throw the message to the log also. In this case you will not - * have to change the function name in lots of places - * when you need it to do something else. ---]] -local function myThrowError(vMesg) - local sMesg = tostring(vMesg) -- Make sure the message is string - if(asmlib) then asmlib.LogInstance(sMesg) end -- Output the message into the logs - myError(myScript.." > ("..myAddon.."): "..sMesg) -- Generate an error in the console ( optional ) -end - -if(asmlib) then - -- Store a reference to disable symbol - local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") - local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") - local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") - local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") - - -- This is the path to your DSV - local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. - asmlib.GetOpVar("DIRPATH_DSV").. - gsFormPF:format(myPrefix, gsToolPF.."PIECES") - - --[[ - * This flag is used when the track pieces list needs to be processed. - * It generally represents the locking file persistence flag. It is - * bound to finding a "PIECES" DSV external database for the prefix - * of your addon. You can use it for boolean value deciding whenever - * or not to run certain events. For example you can stop exporting - * your local database every time Gmod loads, but then the user will - * skip the available updates of your addon until he/she deletes the DSVs. - ]]-- - local myFlag = file.Exists(myDsv, "DATA") - - -- Tell TA what custom script we just called don't touch it - asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}") - - --[[ - * Register the addon to the workshop ID list. Apply the ID of your addon here! - * This is needed so TA user can open GUI to your addon webpage. - * Open your workshop addon with any brawser then copy the visited URL - * https://steamcommunity.com/sharedfiles/filedetails/?id=287012681 - * This URL is used as an example obtained from the TA workshop link - * You only need the number at the end. Write it down as a string below. - ]] - asmlib.WorkshopID(myAddon , "2194528273") - - --[[ - * Register the addon to the auto-load prefix list when the - * PIECES file is missing. The auto-load list is located in - * (/garrysmod/data/trackassembly/set/trackasmlib_dsv.txt) - * a.k.a the DATA folder of Garry's mod. - * - * @bSuccess = RegisterDSV(sProg, sPref, sDelim) - * sProg > The program which registered the DSV - * sPref > The external data prefix to be added ( default instance prefix ) - * sDelim > The delimiter to be used for processing ( default tab ) - * bSkip > Skip addition for the DSV prefix if exists ( default `false` ) - ]]-- - asmlib.LogInstance("RegisterDSV start <"..myPrefix..">") - if(myFlag) then -- Your DSV must be registered only once when loading for the first time - asmlib.LogInstance("RegisterDSV skip <"..myPrefix..">") - else -- If the locking file is not located that means this is the first run of your script - if(not asmlib.RegisterDSV(myScript, myPrefix)) then -- Register the DSV prefix and check for error - myThrowError("Failed to register DSV") -- Throw the error if fails - end -- Third argument is the delimiter. The default tab is used - asmlib.LogInstance("RegisterDSV done <"..myPrefix..">") - end - - --[[ - * This is used if you want to make internal categories for your addon - * You must make a function as a string under the hash of your addon - * The function must take only one argument and that is the model - * For every sub-category of your track pieces, you must return a table - * with that much elements or return a /nil/ value to add the piece to - * the root of your branch. You can also return a second value if you - * want to override the track piece name. If you need to use categories - * for multiple track types, just put their hashes in the table below - * and make every track point to its dedicated category handler. - ]]-- - local myCategory = { - [myType] = {Txt = [[function(m) - local n = m:gsub("models/anytracks/","") - local r = n:match("^%a+"); n = n:gsub("%.mdl","") - n = n:gsub(r, ""):sub(2, -1); return r, n end - ]]} - } - - --[[ - * This logic statement is needed for reporting the error in the console if the - * process fails. - * - @ bSuccess = ExportCategory(nInd, tData, sPref) - * nInd > The index equal indent format to be stored with ( generally = 3 ) - * tData > The category functional definition you want to use to divide your stuff with - * sPref > An export file custom prefix. For synchronizing - * it must be related to your addon ( default is instance prefix ) - ]]-- - asmlib.LogInstance("ExportCategory start <"..myPrefix..">") - if(CLIENT) then -- Category handling is client side only - if(not asmlib.IsEmpty(myCategory)) then - if(not asmlib.ExportCategory(3, myCategory, myPrefix)) then - myThrowError("Failed to synchronize category") - end; asmlib.LogInstance("ExportCategory done <"..myPrefix..">") - else asmlib.LogInstance("ExportCategory skip <"..myPrefix..">") end - else asmlib.LogInstance("ExportCategory server <"..myPrefix..">") end - - --[[ - * Create a table and populate it as shown below - * In the square brackets goes your MODEL, - * and then for every active point, you must have one array of - * strings, where the elements match the following data settings. - * You can use the disable event /#/ to make TA auto-fill - * the value provided and you can also add multiple track types myType[1-n]. - * If you need to use piece origin/angle with model attachment, you must use - * the attachment extraction event /!/. The model attachment format is - * /!/ and it depends what attachment name you gave it when you - * created the model. If you need TA to extract the origin/angle from an attachment named - * /test/ for example, you just need to put the string /!test/ in the origin/angle column for that model. - * {MODEL, TYPE, NAME, LINEID, POINT, ORIGIN, ANGLE, CLASS} - * MODEL > This string contains the path to your /*.mdl/ file. It is mandatory and - * taken in pairs with LINEID, it forms the unique identifier of every record. - * When used in /DSV/ mode ( like seen below ) is is used as a hash index. - * TYPE > This string is the name of the type your stuff will reside in the panel. - * Disabling this, makes it use the value of the /DEFAULT_TYPE/ variable. - * If it is empty uses the string /TYPE/, so make sure you fill this. - * NAME > This is the name of your track piece. Put /#/ here to be auto-generated from - * the model ( from the last slash to the file extension ). - * LINEID > This is the ID of the point that can be selected for building. They must be - * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. - * Use that to swap the active points around by only moving the desired row up or down. - * For the example table definition below, the line ID in the database will be the same. - * POINT > This is the local position vector that TA searches and selects the related - * ORIGIN for. An empty string is treated as taking the ORIGIN. - * Disabling this using the disable event makes it hidden when the active point is searched for - * ORIGIN > This is the origin relative to which the next track piece position is calculated - * An empty string is treated as {0,0,0}. Disabling this makes it non-selectable by the holder - * You can also fill it with attachment event /!/ followed by your attachment name. - * ANGLE > This is the angle relative to which the forward and up vectors are calculated. - * An empty string is treated as {0,0,0}. Disabling this also makes it use {0,0,0} - * You can also fill it with attachment event /!/ followed by your attachment name. - * CLASS > This string is populated up when your entity class is not /prop_physics/ but something else - * used by ents.Create of the gmod ents API library. Keep this empty if your stuff is a normal prop. - ]]-- - local myPieces = { - ["models/anytracks/straight/hs_32.mdl"] = { - {myType, "Hs 32", gsSymOff, " 30,0,4", "0, 16,4", "0, 90,0", gsMissDB}, - {myType, "Hs 32", gsSymOff, "-30,0,4", "0,-16,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/hs_64.mdl"] = { - {myType, "Hs 64", gsSymOff, gsMissDB, "0, 32,4", "0, 90,0", gsMissDB}, - {myType, "Hs 64", gsSymOff, gsMissDB, "0,-32,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/hs_128.mdl"] = { - {myType, "Hs 128", gsSymOff, gsMissDB, "0, 64,4", "0, 90,0", gsMissDB}, - {myType, "Hs 128", gsSymOff, gsMissDB, "0,-64,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/hs_256.mdl"] = { - {myType, "Hs 256", gsSymOff, gsMissDB, "0, 128,4", "0, 90,0", gsMissDB}, - {myType, "Hs 256", gsSymOff, gsMissDB, "0,-128,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/hs_512.mdl"] = { - {myType, "Hs 512", gsSymOff, gsMissDB, "0, 256,4", "0, 90,0", gsMissDB}, - {myType, "Hs 512", gsSymOff, gsMissDB, "0,-256,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/hs_1024.mdl"] = { - {myType, "Hs 1024", gsSymOff, gsMissDB, "0, 512,4", "0, 90,0", gsMissDB}, - {myType, "Hs 1024", gsSymOff, gsMissDB, "0,-512,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/hs_2048.mdl"] = { - {myType, "Hs 2048", gsSymOff, gsMissDB, "0, 1024,4", "0, 90,0", gsMissDB}, - {myType, "Hs 2048", gsSymOff, gsMissDB, "0,-1024,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/hs_4096.mdl"] = { - {myType, "Hs 4096", gsSymOff, gsMissDB, "0, 2048,4", "0, 90,0", gsMissDB}, - {myType, "Hs 4096", gsSymOff, gsMissDB, "0,-2048,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/hs_8192.mdl"] = { - {myType, "Hs 8192", gsSymOff, gsMissDB, "0, 4096,4", "0, 90,0", gsMissDB}, - {myType, "Hs 8192", gsSymOff, gsMissDB, "0,-4096,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_32.mdl"] = { - {myType, "S 32", gsSymOff, " 30,0,4", "0, 16,4", "0, 90,0", gsMissDB}, - {myType, "S 32", gsSymOff, "-30,0,4", "0,-16,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_64.mdl"] = { - {myType, "S 64", gsSymOff, gsMissDB, "0, 32,4", "0, 90,0", gsMissDB}, - {myType, "S 64", gsSymOff, gsMissDB, "0,-32,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_128.mdl"] = { - {myType, "S 128", gsSymOff, gsMissDB, "0, 64,4", "0, 90,0", gsMissDB}, - {myType, "S 128", gsSymOff, gsMissDB, "0,-64,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_256.mdl"] = { - {myType, "S 256", gsSymOff, gsMissDB, "0, 128,4", "0, 90,0", gsMissDB}, - {myType, "S 256", gsSymOff, gsMissDB, "0,-128,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_512.mdl"] = { - {myType, "S 512", gsSymOff, gsMissDB, "0, 256,4", "0, 90,0", gsMissDB}, - {myType, "S 512", gsSymOff, gsMissDB, "0,-256,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_1024.mdl"] = { - {myType, "S 1024", gsSymOff, gsMissDB, "0, 512,4", "0, 90,0", gsMissDB}, - {myType, "S 1024", gsSymOff, gsMissDB, "0,-512,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_2048.mdl"] = { - {myType, "S 2048", gsSymOff, gsMissDB, "0, 1024,4", "0, 90,0", gsMissDB}, - {myType, "S 2048", gsSymOff, gsMissDB, "0,-1024,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_4096.mdl"] = { - {myType, "S 4096", gsSymOff, gsMissDB, "0, 2048,4", "0, 90,0", gsMissDB}, - {myType, "S 4096", gsSymOff, gsMissDB, "0,-2048,4", "0,-90,0", gsMissDB} - }, - ["models/anytracks/straight/s_8192.mdl"] = { - {myType, "S 8192", gsSymOff, gsMissDB, "0, 4096,4", "0, 90,0", gsMissDB}, - {myType, "S 8192", gsSymOff, gsMissDB, "0,-4096,4", "0,-90,0", gsMissDB} - } - } - - --[[ - * This logic statement is needed for reporting the error in the console if the - * process fails. - * - @ bSuccess = SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) - * sTable > The table you want to sync - * tData > A data table like the one described above - * bRepl > If set to /true/, makes the API replace the repeating models with - these of your addon. This is nice when you are constantly updating your track packs - If set to /false/ keeps the current model in the - database and ignores yours if they are the same file. - * sPref > An export file custom prefix. For synchronizing it must be related to your addon - * sDelim > The delimiter used by the server/client ( default is a tab symbol ) - * - @ bSuccess = TranslateDSV(sTable, sPref, sDelim) - * sTable > The table you want to translate to Lua script - * sPref > An export file custom prefix. For synchronizing it must be related to your addon - * sDelim > The delimiter used by the server/client ( default is a tab symbol ) - ]]-- - if(not asmlib.IsEmpty(myPieces)) then - asmlib.LogInstance("SynchronizeDSV start <"..myPrefix..">") - if(not asmlib.SynchronizeDSV("PIECES", myPieces, true, myPrefix)) then - myThrowError("Failed to synchronize track pieces") - else -- You are saving me from all the work for manually generating these - asmlib.LogInstance("TranslateDSV start <"..myPrefix..">") - if(not asmlib.TranslateDSV("PIECES", myPrefix)) then - myThrowError("Failed to translate DSV into Lua") end - asmlib.LogInstance("TranslateDSV done <"..myPrefix..">") - end -- Now we have Lua inserts and DSV - end - - --[[ - * Create a table and populate it as shown below - * In the square brackets goes your MODELBASE, - * and then for every active point, you must have one array of - * strings and numbers, where the elements match the following data settings. - * {MODELBASE, MODELADD, ENTCLASS, LINEID, POSOFF, ANGOFF, MOVETYPE, PHYSINIT, DRSHADOW, PHMOTION, PHYSLEEP, SETSOLID} - * MODELBASE > This string contains the path to your base /*.mdl/ file the additions are gonna be attached to. - * It is mandatory and taken in pairs with LINEID, it forms the unique identifier of every record. - * When used in /DSV/ mode ( like seen below ) is is used as a hash index. - * MODELADD > This is the /*.mdl/ path of the addition entity. It is mandatory and cannot be disabled. - * ENTCLASS > This is the class of the addition entity. It is mandatory and cannot be disabled. - * LINEID > This is the ID of the point that can be selected for building. They must be - * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. - * Use that to swap the active points around by only moving the desired row up or down. - * For the example table definition below, the line ID in the database will be the same. - * POSOFF > This is the local position vector offset that TA uses to place the addition relative to MODELBASE. - * A NULL, empty, disabled or not available string is treated as taking {0,0,0}. - * ANGOFF > This is the local angle offset that TA uses to place the addition. - * A NULL, empty, disabled or not available string is treated as taking {0,0,0}. - * MOVETYPE > This internally calls /Entity:SetMoveType/ if the database parameter is zero or greater. - * PHYSINIT > This internally calls /Entity:PhysicsInit/ if the database parameter is zero or greater. - * DRSHADOW > This internally calls /Entity:DrawShadow/ if the database parameter is not zero. - * The call evaluates to /true/ for positive numbers and /false/ for negative. - * When the parameter is equal to zero skips the call of /Entity:DrawShadow/ - * PHMOTION > This internally calls /PhysObj:EnableMotion/ if the database parameter is not zero on the validated physics object. - * The call evaluates to /true/ for positive numbers and /false/ for negative. - * When the parameter is equal to zero skips the call of /Entity:EnableMotion/ - * PHYSLEEP > This internally calls /PhysObj:Sleep/ if the database parameter is grater than zero on the validated physics object. - * When the parameter is equal or less than zero skips the call of /Entity:Sleep/ - * SETSOLID > This internally calls /Entity:SetSolid/ if the database parameter is zero or greater. - ]]-- - local myAdditions = {} - - if(not asmlib.IsEmpty(myAdditions)) then - asmlib.LogInstance("SynchronizeDSV start <"..myPrefix..">") - if(not asmlib.SynchronizeDSV("ADDITIONS", myAdditions, true, myPrefix)) then - myThrowError("Failed to synchronize track additions") - else -- You are saving me from all the work for manually generating these - asmlib.LogInstance("TranslateDSV start <"..myPrefix..">") - if(not asmlib.TranslateDSV("ADDITIONS", myPrefix)) then - myThrowError("Failed to translate DSV into Lua") end - asmlib.LogInstance("TranslateDSV done <"..myPrefix..">") - end -- Now we have Lua inserts and DSV - end - - --[[ - * Create a table and populate it as shown below - * In the square brackets goes your TYPE, - * and then for every active point, you must have one array of - * strings and numbers, where the elements match the following data settings. - * {TYPE, LINEID, NAME} - * TYPE > This is the category under your physical properties are stored internally. - * It is mandatory and taken in pairs with LINEID, it forms the unique identifier of every record. - * When used in /DSV/ mode ( like seen below ) is is used as a hash index. - * LINEID > This is the ID of the point that can be selected for building. They must be - * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. - * Use that to swap the active points around by only moving the desired row up or down. - * For the example table definition below, the line ID in the database will be the same. - * NAME > This stores the name of the physical property. It must an actual physical property. - ]]-- - local myPhysproperties = {} - - if(not asmlib.IsEmpty(myPhysproperties)) then - asmlib.LogInstance("SynchronizeDSV start <"..myPrefix..">") - if(not asmlib.SynchronizeDSV("PHYSPROPERTIES", myPhysproperties, true, myPrefix)) then - myThrowError("Failed to synchronize track additions") - else -- You are saving me from all the work for manually generating these - asmlib.LogInstance("TranslateDSV start <"..myPrefix..">") - if(not asmlib.TranslateDSV("PHYSPROPERTIES", myPrefix)) then - myThrowError("Failed to translate DSV into Lua") end - asmlib.LogInstance("TranslateDSV done <"..myPrefix..">") - end -- Now we have Lua inserts and DSV - end - - asmlib.LogInstance("<<< "..myScript) -else - myThrowError("Failed loading the required module") -end diff --git a/data/trackassembly/set/trackasmlib_slskip.txt b/data/trackassembly/set/trackasmlib_slskip.txt index ec2041c1..2308d683 100644 --- a/data/trackassembly/set/trackasmlib_slskip.txt +++ b/data/trackassembly/set/trackasmlib_slskip.txt @@ -2,6 +2,7 @@ QuickSort SetNumSlider ModelToName: Cut ModelToName: Sub +BIND_PRESS: ModelToName: App DefaultType: Avoided LocatePOA: Missing ID @@ -28,6 +29,7 @@ DRAW_RADMENU: Release DRAW_RADMENU: Hook mismatch DRAW_RADMENU: Scroll release DRAW_RADMENU: Menu disabled +DRAW_RADMENU: %(gmod_tool%) Swep other DRAW_GHOSTS: Swep invalid DRAW_GHOSTS: Swep not tool DRAW_GHOSTS: %(gmod_tool%) Swep other @@ -41,7 +43,6 @@ DRAW_PHYSGUN: Swep invalid DRAW_PHYSGUN: Extension disabled DRAW_PHYSGUN: Trace not piece DRAW_PHYSGUN: %(weapon_physgun%) Swep other -DRAW_RADMENU: %(gmod_tool%) Swep other POINT_SELECT: Bind not pressed POINT_SELECT: Active key missing BIND_PRESS: Hook mismatch @@ -52,9 +53,12 @@ BIND_PRESS: Bind not pressed BIND_PRESS: %(gmod_tool%) Swep other POPULATE_ENTITY: Handler UPDATE_CONTEXTVAL: Entity +TimerRestart: Memory manager skip BorderValue: Missing GetBuilderNick: Key mismatch GetBuilderID: Builder object missing -GetHookInfo: %(gmod_tool%) Swep other -GetHookInfo: %(weapon_physgun%) Swep other +GetHookInfo: Swep invalid +GetHookInfo: Swep other +GetHookInfo: Mode different +GetHookInfo: Tool invalid GetEntityHitID: Trace skip diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 9b09bcfb..b2a9b903 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.798") +asmlib.SetOpVar("TOOL_VERSION","8.799") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -728,7 +728,8 @@ if(CLIENT) then end) -- Read client configuration asmlib.SetAction("OPEN_EXTERNDB", -- Must have the same parameters as the hook - function(oPly,oCom,oArgs) + function() + local oPly = LocalPlayer() local sLog = "*OPEN_EXTERNDB" local scrW = surfaceScreenWidth() local scrH = surfaceScreenHeight() @@ -1236,21 +1237,14 @@ if(CLIENT) then pnButton.DoClick = function(pnSelf) asmlib.LogInstance("Click "..asmlib.GetReport(pnSelf:GetText()), sLog..".Button") if(not asmlib.GetAsmConvar("exportdb", "BUL")) then return end - if(inputIsKeyDown(KEY_LSHIFT)) then local sType - local iD, pnLine = pnListView:GetSelectedLine() - if(asmlib.IsHere(iD)) then sType = pnLine:GetColumnText(3) - else local sM = asmlib.GetAsmConvar("model", "STR") - local oRec = asmlib.CacheQueryPiece(sM) - if(asmlib.IsHere(oRec)) then sType = oRec.Type - else LogInstance("Piece invalid "..asmlib.GetReport(iD, sM)) end - end - asmlib.ExportTypeRun(sType) - asmlib.LogInstance("Export type "..asmlib.GetReport(sType), sLog..".Button") + if(inputIsKeyDown(KEY_LSHIFT)) then + asmlib.DoAction("OPEN_EXTERNDB") + asmlib.LogInstance("Open manager", sLog..".Button") else - asmlib.ExportCategory(3) - asmlib.ExportDSV("PIECES") - asmlib.ExportDSV("ADDITIONS") - asmlib.ExportDSV("PHYSPROPERTIES") + asmlib.ExportCategory(3, nil, nil, true) + asmlib.ExportDSV("PIECES", nil, nil, true) + asmlib.ExportDSV("ADDITIONS", nil, nil, true) + asmlib.ExportDSV("PHYSPROPERTIES", nil, nil, true) asmlib.LogInstance("Export instance", sLog..".Button") end asmlib.SetAsmConvar(oPly, "exportdb", 0) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 3e5f7edc..20c7d3ba 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2391,61 +2391,64 @@ function Categorize(oTyp, fCat, ...) local sTyp = tostring(GetOpVar("DEFAULT_TYPE") or "") local tTyp = (tCat and tCat[sTyp] or nil) return sTyp, (tTyp and tTyp.Txt), (tTyp and tTyp.Cmp) - end; ModelToNameRule("CLR"); SetOpVar("DEFAULT_TYPE", tostring(oTyp)) - if(CLIENT) then local tTyp -- Categories for the panel - local sTyp = tostring(GetOpVar("DEFAULT_TYPE") or "") - local fsLog = GetOpVar("FORM_LOGSOURCE") -- The actual format value - local ssLog = "*"..fsLog:format("TYPE","Categorize",tostring(oTyp)) - if(isstring(fCat)) then - tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp; tTyp.Txt = fCat - elseif(istable(fCat)) then local tArg = {...} - local sTr = GetOpVar("OPSYM_REVISION") -- Trigger - local sSe = GetOpVar("OPSYM_DIRECTORY") -- Separator - tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp - tTyp.Txt = [[function(m) - local o = {} - function setBranch(v, p, b, q) - if(v:find(p)) then - local e = v:gsub("%W*"..p.."%W*", "_") - if(b and o.M) then return e end - if(b and not o.M) then o.M = true end - table.insert(o, (q or p)); return e - end; return v - end]] - tTyp.Txt = tTyp.Txt.."\nlocal r = m:gsub(\""..tostring(tArg[1] or "").."\",\"\"):gsub(\"%.mdl$\",\"\");" - for iD = 1, #fCat do - local tV = sSe:Explode(fCat[iD]) - local sR = tostring(tV[2] and ("\""..tostring(tV[2]).."\"") or nil) - if(tV[1]:sub(1,1) == sTr) then tV[1] = tV[1]:sub(2,-1) - tTyp.Txt = tTyp.Txt.."\nr = setBranch(r, \""..tostring(tV[1]).."\", true, "..sR..")" - else - tTyp.Txt = tTyp.Txt.."\nr = setBranch(r, \""..tostring(tV[1]).."\", false, "..sR..")" + else + ModelToNameRule("CLR"); SetOpVar("DEFAULT_TYPE", tostring(oTyp)) + if(CLIENT) then local tTyp -- Categories for the panel + local sTyp = tostring(GetOpVar("DEFAULT_TYPE") or "") + local fsLog = GetOpVar("FORM_LOGSOURCE") -- The actual format value + local ssLog = "*"..fsLog:format("TYPE","Categorize",tostring(oTyp)) + LogInstance("Name "..GetReport(oTyp, sTyp, type(fCat)), ssLog) + if(isstring(fCat)) then + tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp; tTyp.Txt = fCat + elseif(istable(fCat)) then local tArg = {...} + local sTr = GetOpVar("OPSYM_REVISION") -- Trigger + local sSe = GetOpVar("OPSYM_DIRECTORY") -- Separator + tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp + tTyp.Txt = [[function(m) + local o = {} + function setBranch(v, p, b, q) + if(v:find(p)) then + local e = v:gsub("%W*"..p.."%W*", "_") + if(b and o.M) then return e end + if(b and not o.M) then o.M = true end + table.insert(o, (q or p)); return e + end; return v + end]] + tTyp.Txt = tTyp.Txt.."\nlocal r = m:gsub(\""..tostring(tArg[1] or "").."\",\"\"):gsub(\"%.mdl$\",\"\");" + for iD = 1, #fCat do + local tV = sSe:Explode(fCat[iD]) + local sR = tostring(tV[2] and ("\""..tostring(tV[2]).."\"") or nil) + if(tV[1]:sub(1,1) == sTr) then tV[1] = tV[1]:sub(2,-1) + tTyp.Txt = tTyp.Txt.."\nr = setBranch(r, \""..tostring(tV[1]).."\", true, "..sR..")" + else + tTyp.Txt = tTyp.Txt.."\nr = setBranch(r, \""..tostring(tV[1]).."\", false, "..sR..")" + end end - end - tTyp.Txt = tTyp.Txt.."\no.M = nil; return o, r:gsub(\"^_+\", \"\"):gsub(\"_+$\", \"\"):gsub(\"_+\", \"_\") end" - elseif(isnumber(fCat)) then local tArg = {...} - tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp - tTyp.Txt = "function(m)" - tTyp.Txt = tTyp.Txt.."\nlocal n = math.floor(tonumber("..fCat..") or 0)" - tTyp.Txt = tTyp.Txt.."\nlocal m = m:gsub(\""..tostring(tArg[1] or "").."\", \"\")\n" - for i = 2, #tArg do local aP, aN = tArg[i], tArg[i+1] - if(aP and aN) then tTyp.Txt = tTyp.Txt.."\nlocal m = m:gsub(\""..aP.."\", \""..aN.."\")\n" end end - tTyp.Txt = tTyp.Txt..[[local t, x = {n = 0}, m:find("/", 1, true) - while(x and x > 0) do - t.n = t.n + 1; t[t.n] = m:sub(1, x-1) - m = m:sub(x+1, -1); x = m:find("/", 1, true) - end; m = m:gsub("%.mdl$","") - if(n == 0) then return t, m end; local a = math.abs(n) - if(a > t.n) then return t, m end; local s = #t-a - if(n < 0) then for i = 1, a do t[i] = t[i+s] end end - while(s > 0) do table.remove(t); s = s - 1 end - return t, m - end]] - else LogInstance("Skip "..GetReport(fCat), ssLog); return nil end - tTyp.Cmp = CompileString("return ("..tTyp.Txt..")", sTyp) - local bS, vO = pcall(tTyp.Cmp); if(not bS) then - LogInstance("Failed "..GetReport(fCat)..": "..vO, ssLog); return nil end - tTyp.Cmp = vO; return sTyp, tTyp.Txt, tTyp.Cmp + tTyp.Txt = tTyp.Txt.."\no.M = nil; return o, r:gsub(\"^_+\", \"\"):gsub(\"_+$\", \"\"):gsub(\"_+\", \"_\") end" + elseif(isnumber(fCat)) then local tArg = {...} + tTyp = (tCat[sTyp] or {}); tCat[sTyp] = tTyp + tTyp.Txt = "function(m)" + tTyp.Txt = tTyp.Txt.."\nlocal n = math.floor(tonumber("..fCat..") or 0)" + tTyp.Txt = tTyp.Txt.."\nlocal m = m:gsub(\""..tostring(tArg[1] or "").."\", \"\")\n" + for i = 2, #tArg do local aP, aN = tArg[i], tArg[i+1] + if(aP and aN) then tTyp.Txt = tTyp.Txt.."\nlocal m = m:gsub(\""..aP.."\", \""..aN.."\")\n" end end + tTyp.Txt = tTyp.Txt..[[local t, x = {n = 0}, m:find("/", 1, true) + while(x and x > 0) do + t.n = t.n + 1; t[t.n] = m:sub(1, x-1) + m = m:sub(x+1, -1); x = m:find("/", 1, true) + end; m = m:gsub("%.mdl$","") + if(n == 0) then return t, m end; local a = math.abs(n) + if(a > t.n) then return t, m end; local s = #t-a + if(n < 0) then for i = 1, a do t[i] = t[i+s] end end + while(s > 0) do table.remove(t); s = s - 1 end + return t, m + end]] + else LogInstance("Skip "..GetReport(fCat), ssLog); return nil end + tTyp.Cmp = CompileString("return ("..tTyp.Txt..")", sTyp) + local bS, vO = pcall(tTyp.Cmp); if(not bS) then + LogInstance("Failed "..GetReport(fCat)..": "..vO, ssLog); return nil end + tTyp.Cmp = vO; return sTyp, tTyp.Txt, tTyp.Cmp + end end end @@ -3582,11 +3585,7 @@ function ExportCategory(vEq, tData, sPref, bExp) local tCat = (istable(tData) and tData or GetOpVar("TABLE_CATEGORIES")) F:Write("# "..sFunc..":("..tostring(nEq).."@"..fPref..") "..GetDateTime().." [ "..sMoDB.." ]\n") for cat, rec in pairs(tCat) do - if(isstring(rec.Txt)) then - local exp = "["..sEq.."["..cat..sEq..rec.Txt:Trim().."]"..sEq.."]" - if(not rec.Txt:find("\n")) then F:Flush(); F:Close() - LogInstance("("..fPref.."):("..fPref..") Category one-liner "..GetReport(cat)); return false end - F:Write(exp.."\n") + if(isstring(rec.Txt)) then F:Write("["..sEq.."["..cat..sEq..rec.Txt:Trim().."]"..sEq.."]".."\n") else F:Flush(); F:Close(); LogInstance("("..fPref..") Category code mismatch "..GetReport(cat, rec.Txt)); return false end end; F:Flush(); F:Close(); LogInstance("("..fPref..") Success"); return true end @@ -3603,7 +3602,7 @@ function ImportCategory(vEq, sPref, bExp) LogInstance("Wrong equality "..GetReport(vEq)); return false end local fPref = tostring(sPref or GetInstPref()) local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") - local fName = GetOpVar("DIRPATH_BAS") --Switch the import source + local fName = GetOpVar("DIRPATH_BAS") --Switch the import source folder fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) fName = fName..fForm:format(fPref, sTool.."CATEGORY") local F = fileOpen(fName, "rb", "DATA") @@ -3647,8 +3646,9 @@ end * sTable > The table you want to export * sPref > The external data prefix to be used * sDelim > What delimiter is the server using ( default tab ) + * bExp > Forces the input from the export folder.( defaults to DSV ) ]] -function ExportDSV(sTable, sPref, sDelim) +function ExportDSV(sTable, sPref, sDelim, bExp) if(not isstring(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then @@ -3661,7 +3661,7 @@ function ExportDSV(sTable, sPref, sDelim) if(IsFlag("en_dsv_datalock")) then LogInstance("("..fPref..") User disabled"); return true end if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - fName = fName..GetOpVar("DIRPATH_DSV") + fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end local fForm = GetOpVar("FORM_PREFIXDSV") fName = fName..fForm:format(fPref, defTab.Name) @@ -3710,8 +3710,9 @@ end * bComm > Calls TABLE:Record(arLine) when set to true * sPref > Prefix used on importing ( optional ) * sDelim > Delimiter separating the values + * bExp > Forces the input from the export folder.( defaults to DSV ) ]] -function ImportDSV(sTable, bComm, sPref, sDelim) +function ImportDSV(sTable, bComm, sPref, sDelim, bExp) local fPref = tostring(sPref or GetInstPref()); if(not isstring(sTable)) then LogInstance("("..fPref..") Table mismatch "..GetReport(sTable)); return false end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then @@ -3720,7 +3721,8 @@ function ImportDSV(sTable, bComm, sPref, sDelim) LogInstance("("..fPref..") Missing table definition",sTable); return false end local cmdTab = makTab:GetCommand(); if(not IsHere(cmdTab)) then LogInstance("("..fPref..") Missing table command",sTable); return false end - local fName = (GetOpVar("DIRPATH_BAS")..GetOpVar("DIRPATH_DSV")) + local fName = GetOpVar("DIRPATH_BAS") --Switch the import source folder + fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) local fForm, sMoDB = GetOpVar("FORM_PREFIXDSV"), GetOpVar("MODE_DATABASE") fName = fName..fForm:format(fPref, defTab.Name) local F = fileOpen(fName, "rb", "DATA"); if(not F) then diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 5c4df3d7..03fc3f24 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -1521,18 +1521,6 @@ function TOOL:Reload(stTrace) if(user:IsAdmin()) then if(self:GetDeveloperMode()) then asmlib.SetLogControl(self:GetLogLines(),self:GetLogFile()) end - if(self:GetExportDB()) then - if(user:KeyDown(IN_USE)) then - asmlib.SetAsmConvar(user,"openextdb") - asmlib.LogInstance("(World) Success open expdb",gtLogs) - else - asmlib.ExportDSV("PIECES") - asmlib.ExportDSV("ADDITIONS") - asmlib.ExportDSV("PHYSPROPERTIES") - asmlib.LogInstance("(World) Exporting DB",gtLogs) - end - asmlib.SetAsmConvar(user, "exportdb", 0) - end end if(user:KeyDown(IN_SPEED)) then if(workmode == 1) then From 35e1903a9133f77cb8d816d54caa07cfbedec983 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 31 Oct 2024 11:45:57 +0200 Subject: [PATCH 063/114] Update: Import/Export category --- lua/trackassembly/trackasmlib.lua | 62 +++++++++++++++++++------------ 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 20c7d3ba..c674ed27 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -786,6 +786,8 @@ function InitBase(sName, sPurp) SetOpVar("PATTEX_TABLEDAD", "%s*local%s+myAdditions%s*=%s*") SetOpVar("PATTEX_VARADDON", "%s*local%s+myAddon%s*=%s*") SetOpVar("PATTEM_WORKSHID", "^%d+$") + SetOpVar("PATTEM_EXCATHED", {"@", "(%d@%s)", "^#%s*ExportCategory.*%(.+%)", "%(%d+@.+%)"}) + SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s)"}) SetOpVar("HOVER_TRIGGER" , {}) if(CLIENT) then SetOpVar("TABLE_IHEADER", {name = "", stage = 0, op = 0, icon = "", icon2 = ""}) @@ -3573,6 +3575,7 @@ function ExportCategory(vEq, tData, sPref, bExp) LogInstance("("..fPref..") Prefix empty"); return false end if(IsFlag("en_dsv_datalock")) then LogInstance("("..fPref..") User disabled"); return true end + local sHew = GetOpVar("PATTEM_EXCATHED")[2]:format(nEq, fPref) local fName, sFunc = GetOpVar("DIRPATH_BAS"), "ExportCategory" if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) @@ -3580,33 +3583,44 @@ function ExportCategory(vEq, tData, sPref, bExp) local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") fName = fName..fForm:format(fPref, sTool.."CATEGORY") local F = fileOpen(fName, "wb", "DATA") - if(not F) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end + if(not F) then LogInstance(sHew.."("..fName..") Open fail"); return false end local sEq, nLen, sMoDB = ("="):rep(nEq), (nEq+2), GetOpVar("MODE_DATABASE") local tCat = (istable(tData) and tData or GetOpVar("TABLE_CATEGORIES")) - F:Write("# "..sFunc..":("..tostring(nEq).."@"..fPref..") "..GetDateTime().." [ "..sMoDB.." ]\n") - for cat, rec in pairs(tCat) do - if(isstring(rec.Txt)) then F:Write("["..sEq.."["..cat..sEq..rec.Txt:Trim().."]"..sEq.."]".."\n") - else F:Flush(); F:Close(); LogInstance("("..fPref..") Category code mismatch "..GetReport(cat, rec.Txt)); return false end - end; F:Flush(); F:Close(); LogInstance("("..fPref..") Success"); return true + local tSort = Arrange(tCat); if(not tSort) then + LogInstance(sHew.." Sorting keys fail"); return false end + F:Write("# "..sFunc..":"..sHew.." "..GetDateTime().." [ "..sMoDB.." ]\n") + for iS = 1, tSort.Size do local rec, cat = tSort[iS], nil; rec, cat = rec.Rec, rec.Key + if(isstring(rec.Txt)) then F:Write("["..sEq.."["..cat..sEq..rec.Txt:Trim().."]"..sEq.."]".."\n") + else F:Flush(); F:Close(); LogInstance(sHew.." Category code mismatch "..GetReport(cat, rec.Txt)); return false end + end; F:Flush(); F:Close(); LogInstance(sHew.." Success"); return true end --[[ * Save/Load the category generation - * vEq > Amount of internal comment depth + * vEq > Amount of internal comment depth ( when empty uses header ) * sPref > Prefix used on importing ( if none uses instance prefix ) * bExp > Forces the input from the export folder.( defaults to DSV ) ]] function ImportCategory(vEq, sPref, bExp) if(SERVER) then LogInstance("Working on server"); return true end - local nEq = (tonumber(vEq) or 0); if(nEq <= 0) then - LogInstance("Wrong equality "..GetReport(vEq)); return false end - local fPref = tostring(sPref or GetInstPref()) + local nEq = mathFloor(tonumber(vEq) or 0); if(nEq < 0) then + LogInstance("Wrong marker length "..GetReport(nEq,vEq)); return false end + local fPref, tHew = tostring(sPref or GetInstPref()), GetOpVar("PATTEM_EXCATHED") local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") - local fName = GetOpVar("DIRPATH_BAS") --Switch the import source folder + local fName, sHew = GetOpVar("DIRPATH_BAS"), tHew[2]:format(nEq, fPref) fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) fName = fName..fForm:format(fPref, sTool.."CATEGORY") local F = fileOpen(fName, "rb", "DATA") - if(not F) then LogInstance("("..fName..") Open fail"); return false end + if(not F) then LogInstance(sHew.."("..fName..") Open fail"); return false end + if(nEq == 0) then local iF = F:Tell() -- Store the initial file pointer + local sLine, isEOF = GetStringFile(F) -- Read the file header + local sPar = sLine:match(tHew[3]); if(not sPar) then + LogInstance(sHew.."Intern length mismatch"); return false end + local tPar = tHew[1]:Explode(sPar:match(tHew[4]):Trim():sub(2,-2):Trim()) + nEq = mathFloor(tonumber(tPar[1]) or 0); if(nEq <= 0) then + LogInstance(sHew.."Intern length error "..GetReport(nEq,vEq)); return false end + LogInstance(sHew.."Intern length "..GetReport(nEq,vEq)); F:Seek(iF) + end local sEq, sLine, nLen = ("="):rep(nEq), "", (nEq+2) local cFr, cBk = "["..sEq.."[", "]"..sEq.."]" local tCat = GetOpVar("TABLE_CATEGORIES") @@ -3614,29 +3628,29 @@ function ImportCategory(vEq, sPref, bExp) while(not isEOF) do sLine, isEOF = GetStringFile(F) if(not IsBlank(sLine)) then local sFr, sBk = sLine:sub(1,nLen), sLine:sub(-nLen,-1) - if(sFr == cFr and sBk == cBk) then + if(sFr == cFr and sBk == cBk) then -- Check for line markers sLine, isPar, sPar = sLine:sub(nLen+1,-1), true, "" end - if(sFr == cFr and not isPar) then - sPar, isPar = sLine:sub(nLen+1,-1).."\n", true - elseif(sBk == cBk and isPar) then - sPar, isPar = sPar..sLine:sub(1,-nLen-1), false - local tBoo = sEq:Explode(sPar) + if(sFr == cFr and not isPar) then -- Starts here and ends elsewhere + sPar, isPar = sLine:sub(nLen+1,-1).."\n", true -- Skip the marker + elseif(sBk == cBk and isPar) then -- Currently processed ends here + sPar, isPar = sPar..sLine:sub(1,-nLen-1), false -- Skip the marker + local tBoo = sEq:Explode(sPar) -- Explode the pair on the delimiter local key, txt = tBoo[1]:Trim(), tBoo[2] - if(not IsBlank(key)) then + if(not IsBlank(key)) then -- Process the key when not blank if(txt:find("function")) then if(not IsDisable(key)) then tCat[key] = {}; tCat[key].Txt = txt:Trim() tCat[key].Cmp = CompileString("return ("..tCat[key].Txt..")",key) local bS, vO = pcall(tCat[key].Cmp) if(bS) then tCat[key].Cmp = vO else tCat[key].Cmp = nil - LogInstance("Compilation fail "..GetReport(key, vO)) + LogInstance(sHew.."Compilation fail "..GetReport(key, vO)) end - else LogInstance("Key skipped "..GetReport(key)) end - else LogInstance("Function missing "..GetReport(key)) end - else LogInstance("Name missing "..GetReport(txt)) end + else LogInstance(sHew.."Key skipped "..GetReport(key)) end + else LogInstance(sHew.."Function missing "..GetReport(key)) end + else LogInstance(sHew.."Name missing "..GetReport(txt)) end else sPar = sPar..sLine.."\n" end end - end; F:Close(); LogInstance("Success"); return true + end; F:Close(); LogInstance(sHew.."Success"); return true end --[[ From a35403032b1f62eff523d3c3952da8d37df44d58 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 31 Oct 2024 17:43:31 +0200 Subject: [PATCH 064/114] Fixed: Registering a DSV does not show source script in the logs Fixed: Prefix/parameters being consistent across all APIs Improved: Log formatting for less concatenations (PATTEM_EXDSVHED) Updated: Import category clamps the marker. Zero is invalid --- lua/trackassembly/trackasmlib.lua | 201 ++++++++++++++++-------------- 1 file changed, 108 insertions(+), 93 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index c674ed27..e6ddd35c 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -786,7 +786,7 @@ function InitBase(sName, sPurp) SetOpVar("PATTEX_TABLEDAD", "%s*local%s+myAdditions%s*=%s*") SetOpVar("PATTEX_VARADDON", "%s*local%s+myAddon%s*=%s*") SetOpVar("PATTEM_WORKSHID", "^%d+$") - SetOpVar("PATTEM_EXCATHED", {"@", "(%d@%s)", "^#%s*ExportCategory.*%(.+%)", "%(%d+@.+%)"}) + SetOpVar("PATTEM_EXCATHED", {"@", "(%s@%d)", "^#.*ExportCategory.*%(.+%)", "%(.+@.+%)"}) SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s)"}) SetOpVar("HOVER_TRIGGER" , {}) if(CLIENT) then @@ -2584,7 +2584,7 @@ function GetCacheCurve(pPly) stData.CSize = 0 -- The amount of points for the calculated nodes array stData.SSize = 0 -- The amount of points for the snaps node array stData.SKept = 0 -- The amount of total snap points the snaps node array - end; + end if(not stData.Size ) then stData.Size = 0 end if(not stData.CSize) then stData.CSize = 0 end if(not stData.SSize) then stData.SSize = 0 end @@ -3569,13 +3569,15 @@ end ]] function ExportCategory(vEq, tData, sPref, bExp) if(SERVER) then LogInstance("Working on server"); return true end + local tHew = GetOpVar("PATTEM_EXCATHED") + local fPref = tostring(sPref or GetInstPref()) local nEq = (tonumber(vEq) or 0); if(nEq <= 0) then LogInstance("Wrong equality "..GetReport(vEq)); return false end + local sHew = tHew[2]:format(fPref, nEq) local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then - LogInstance("("..fPref..") Prefix empty"); return false end + LogInstance(sHew.."Prefix empty"); return false end if(IsFlag("en_dsv_datalock")) then - LogInstance("("..fPref..") User disabled"); return true end - local sHew = GetOpVar("PATTEM_EXCATHED")[2]:format(nEq, fPref) + LogInstance(sHew.." User disabled"); return true end local fName, sFunc = GetOpVar("DIRPATH_BAS"), "ExportCategory" if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) @@ -3583,7 +3585,7 @@ function ExportCategory(vEq, tData, sPref, bExp) local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") fName = fName..fForm:format(fPref, sTool.."CATEGORY") local F = fileOpen(fName, "wb", "DATA") - if(not F) then LogInstance(sHew.."("..fName..") Open fail"); return false end + if(not F) then LogInstance(sHew.." Open fail: "..fName); return false end local sEq, nLen, sMoDB = ("="):rep(nEq), (nEq+2), GetOpVar("MODE_DATABASE") local tCat = (istable(tData) and tData or GetOpVar("TABLE_CATEGORIES")) local tSort = Arrange(tCat); if(not tSort) then @@ -3597,29 +3599,30 @@ end --[[ * Save/Load the category generation - * vEq > Amount of internal comment depth ( when empty uses header ) + * vEq > Amount of internal comment depth ( when invalid uses header ) * sPref > Prefix used on importing ( if none uses instance prefix ) * bExp > Forces the input from the export folder.( defaults to DSV ) ]] function ImportCategory(vEq, sPref, bExp) if(SERVER) then LogInstance("Working on server"); return true end - local nEq = mathFloor(tonumber(vEq) or 0); if(nEq < 0) then - LogInstance("Wrong marker length "..GetReport(nEq,vEq)); return false end - local fPref, tHew = tostring(sPref or GetInstPref()), GetOpVar("PATTEM_EXCATHED") + local tHew = GetOpVar("PATTEM_EXCATHED") + local fPref = tostring(sPref or GetInstPref()) + local nEq = mathMax(mathFloor(tonumber(vEq) or 0), 0) local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") - local fName, sHew = GetOpVar("DIRPATH_BAS"), tHew[2]:format(nEq, fPref) + local fName, sHew = GetOpVar("DIRPATH_BAS"), tHew[2]:format(fPref, nEq) fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) fName = fName..fForm:format(fPref, sTool.."CATEGORY") local F = fileOpen(fName, "rb", "DATA") - if(not F) then LogInstance(sHew.."("..fName..") Open fail"); return false end + if(not F) then LogInstance(sHew.." Open fail: "..fName); return false end if(nEq == 0) then local iF = F:Tell() -- Store the initial file pointer local sLine, isEOF = GetStringFile(F) -- Read the file header local sPar = sLine:match(tHew[3]); if(not sPar) then - LogInstance(sHew.."Intern length mismatch"); return false end + LogInstance(sHew.."Intern header missing"); return false end local tPar = tHew[1]:Explode(sPar:match(tHew[4]):Trim():sub(2,-2):Trim()) - nEq = mathFloor(tonumber(tPar[1]) or 0); if(nEq <= 0) then - LogInstance(sHew.."Intern length error "..GetReport(nEq,vEq)); return false end - LogInstance(sHew.."Intern length "..GetReport(nEq,vEq)); F:Seek(iF) + nEq = mathMax(mathFloor(tonumber(tPar[2]) or 0), 0); if(nEq <= 0) then + LogInstance(sHew.."Marker length error "..GetReport(nEq,vEq)); return false end + sHew = tHew[2]:format(fPref, nEq); F:Seek(iF) + LogInstance(sHew.."Intern success "..GetReport(nEq,vEq)) end local sEq, sLine, nLen = ("="):rep(nEq), "", (nEq+2) local cFr, cBk = "["..sEq.."[", "]"..sEq.."]" @@ -3665,22 +3668,24 @@ end function ExportDSV(sTable, sPref, sDelim, bExp) if(not isstring(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end + local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then + LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end + local tHew = GetOpVar("PATTEM_EXDSVHED") + local sHew = tHew[2]:format(fPref, sTable) + if(IsFlag("en_dsv_datalock")) then + LogInstance(sHew.." User disabled",sTable); return true end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then - LogInstance("("..fPref..") Missing table builder",sTable); return false end + LogInstance(sHew.." Missing table builder",sTable); return false end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then - LogInstance("("..fPref..") Missing table definition",sTable); return nil end - local fName, fPref = GetOpVar("DIRPATH_BAS"), tostring(sPref or GetInstPref()) - if(IsBlank(fPref)) then - LogInstance("("..fPref..") Prefix empty"); return false end - if(IsFlag("en_dsv_datalock")) then - LogInstance("("..fPref..") User disabled"); return true end + LogInstance(sHew.." Missing table definition",sTable); return nil end + local fName = GetOpVar("DIRPATH_BAS") if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end local fForm = GetOpVar("FORM_PREFIXDSV") fName = fName..fForm:format(fPref, defTab.Name) local F = fileOpen(fName, "wb", "DATA"); if(not F) then - LogInstance("("..fPref..")("..fName..") Open fail",sTable); return false end + LogInstance(sHew.." Open fail: "..fName,sTable); return false end local sDelim, sFunc = tostring(sDelim or "\t"):sub(1,1), "ExportDSV" local fsLog = GetOpVar("FORM_LOGSOURCE") -- Read the log source format local ssLog = "*"..fsLog:format(defTab.Nick,sFunc,"%s") @@ -3693,12 +3698,12 @@ function ExportDSV(sTable, sPref, sDelim, bExp) local Q = makTab:Get(qIndx); if(not IsHere(Q)) then Q = makTab:Select():Order(unpack(defTab.Query[sFunc])):Store(qIndx):Get(qIndx) end if(not IsHere(Q)) then F:Flush(); F:Close() - LogInstance("("..fPref..") Build statement failed",sTable); return false end + LogInstance(sHew.." Build statement failed",sTable); return false end F:Write("#3 Query:<"..Q..">\n") local qData = sqlQuery(Q); if(not qData and isbool(qData)) then F:Flush(); F:Close() - LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), sTable); return nil end + LogInstance(sHew.." SQL exec error "..GetReport(sqlLastError(), Q), sTable); return nil end if(not IsHere(qData) or IsEmpty(qData)) then F:Flush(); F:Close() - LogInstance("("..fPref..") No data found "..GetReport(Q), sTable); return false end + LogInstance(sHew.." No data found "..GetReport(Q), sTable); return false end local sData, sTab = "", defTab.Name for iCnt = 1, #qData do local qRec = qData[iCnt]; sData = sTab for iInd = 1, defTab.Size do local sHash = defTab[iInd][1] @@ -3707,15 +3712,15 @@ function ExportDSV(sTable, sPref, sDelim, bExp) end -- Matching will not crash as it is matched during insertion elseif(sMoDB == "LUA") then local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then F:Flush(); F:Close() - LogInstance("("..fPref..") Cache missing",sTable); return false end + LogInstance(sHew.." Cache missing",sTable); return false end local bS, sR = pcall(defTab.Cache[sFunc], F, makTab, tCache, fPref, sDelim, ssLog:format("Cache")) if(not bS) then F:Flush(); F:Close() - LogInstance("("..fPref..") Cache manager fail for "..sR,sTable); return false end + LogInstance(sHew.." Cache manager fail for "..sR,sTable); return false end if(not sR) then F:Flush(); F:Close() - LogInstance("("..fPref..") Cache routine fail",sTable); return false end - else F:Flush(); F:Close(); LogInstance("("..fPref..") Unsupported mode "..GetReport(sMoDB, fName),sTable); return false end + LogInstance(sHew.." Cache routine fail",sTable); return false end + else F:Flush(); F:Close(); LogInstance(sHew.." Unsupported mode "..GetReport(sMoDB, fName),sTable); return false end -- The dynamic cache population was successful then send a message - F:Flush(); F:Close(); LogInstance("("..fPref..") Success",sTable); return true + F:Flush(); F:Close(); LogInstance(sHew.." Success",sTable); return true end --[[ @@ -3727,24 +3732,28 @@ end * bExp > Forces the input from the export folder.( defaults to DSV ) ]] function ImportDSV(sTable, bComm, sPref, sDelim, bExp) - local fPref = tostring(sPref or GetInstPref()); if(not isstring(sTable)) then - LogInstance("("..fPref..") Table mismatch "..GetReport(sTable)); return false end + if(not isstring(sTable)) then + LogInstance("Table mismatch "..GetReport(sTable)); return false end + local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then + LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end + local tHew = GetOpVar("PATTEM_EXDSVHED") + local sHew = tHew[2]:format(fPref, sTable) local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then - LogInstance("("..fPref..") Missing table builder",sTable); return nil end + LogInstance(sHew.." Missing table builder",sTable); return nil end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then - LogInstance("("..fPref..") Missing table definition",sTable); return false end + LogInstance(sHew.." Missing table definition",sTable); return false end local cmdTab = makTab:GetCommand(); if(not IsHere(cmdTab)) then - LogInstance("("..fPref..") Missing table command",sTable); return false end + LogInstance(sHew.." Missing table command",sTable); return false end local fName = GetOpVar("DIRPATH_BAS") --Switch the import source folder fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) local fForm, sMoDB = GetOpVar("FORM_PREFIXDSV"), GetOpVar("MODE_DATABASE") fName = fName..fForm:format(fPref, defTab.Name) local F = fileOpen(fName, "rb", "DATA"); if(not F) then - LogInstance("("..fPref..")("..fName..") Open fail",sTable); return false end + LogInstance(sHew.." Open fail: "..fName,sTable); return false end local sDelim = tostring(sDelim or "\t"):sub(1,1) local sLine, isEOF, nLen = "", false, defTab.Name:len() if(sMoDB == "SQL") then sqlQuery(cmdTab.BEGIN) - LogInstance("("..fPref..") Begin",sTable) end + LogInstance(sHew.." Begin",sTable) end while(not isEOF) do sLine, isEOF = GetStringFile(F) if((not IsBlank(sLine)) and (not IsDisable(sLine))) then if(sLine:sub(1,nLen) == defTab.Name) then @@ -3755,8 +3764,8 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) end end; F:Close() if(sMoDB == "SQL") then sqlQuery(cmdTab.COMMIT) - LogInstance("("..fPref..") Commit",sTable) - end; LogInstance("("..fPref..") Success",sTable); return true + LogInstance(sHew.." Commit",sTable) + end; LogInstance(sHew.." Success",sTable); return true end --[[ @@ -3769,14 +3778,16 @@ end * sDelim > What delimiter is the server using ]] function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) - local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then - LogInstance("("..fPref..") Prefix empty"); return false end if(not isstring(sTable)) then - LogInstance("("..fPref..") Table mismatch "..GetReport(sTable)); return false end + LogInstance("Table mismatch "..GetReport(sTable)); return false end + local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then + LogInstance("Prefix mismatch "..GetReport(fPref,sPref),sTable); return false end + local tHew = GetOpVar("PATTEM_EXDSVHED") + local sHew = tHew[2]:format(fPref, sTable) if(IsFlag("en_dsv_datalock")) then - LogInstance("("..fPref..") User disabled"); return true end + LogInstance(sHew.." User disabled",sTable); return true end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then - LogInstance("("..fPref.."@"..sTable..") Missing table builder"); return false end + LogInstance(sHew.." Missing table builder",sTable); return false end local defTab, iD = makTab:GetDefinition(), makTab:GetColumnID("LINEID") local fName, sDelim = GetOpVar("DIRPATH_BAS"), tostring(sDelim or "\t"):sub(1,1) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end @@ -3794,28 +3805,27 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) if(tLine[1] == defTab.Name) then local nL = #tLine for iCnt = 2, nL do local vV, iL = tLine[iCnt], (iCnt-1); vV = GetStrip(vV) vM = makTab:Match(vV,iL,false,"",true,true) - if(not IsHere(vV)) then LogInstance("("..fPref.."@"..sTable - ..") Read matching failed "..GetReport(vV, iL, defTab[iL][1])); return false end + if(not IsHere(vV)) then LogInstance(sHew.." Read matching failed " + ..GetReport(vV, iL, defTab[iL][1]),sTable); return false end tLine[iCnt] = vM -- Register the matched value end -- Allocate table memory for the matched key local vK = tLine[2]; if(not fData[vK]) then fData[vK] = {Size = 0} end -- Where the line ID must be read from. Validate the value local fRec, vID, nID = fData[vK], tLine[iD+1]; nID = (tonumber(vID) or 0) if((fRec.Size < 0) or (nID <= fRec.Size) or ((nID - fRec.Size) ~= 1)) then - I:Close(); LogInstance("("..fPref.."@"..sTable..") Scatter line ID "..GetReport(vID, vK)); return false end + I:Close(); LogInstance(sHew.." Scatter line ID "..GetReport(vID, vK),sTable); return false end fRec.Size = nID; fRec[nID] = {}; local fRow = fRec[nID] -- Register the new line for iCnt = 3, nL do fRow[iCnt-2] = tLine[iCnt] end -- Transfer the extracted data else I:Close() - LogInstance("("..fPref.."@"..sTable..") Read table name mismatch"); return false end + LogInstance(sHew.." Read table name mismatch",sTable); return false end end end; I:Close() - else LogInstance("("..fPref.."@"..sTable..") Creating file "..GetReport(fName)) end + else LogInstance(sHew.." Creating file "..GetReport(fName),sTable) end for key, rec in pairs(tData) do -- Check the given table and match the key - local vK = makTab:Match(key,1,false,"",true,true); - if(not IsHere(vK)) then LogInstance("("..fPref.."@"..sTable.."@" - ..tostring(key)..") Sync matching PK failed"); return false end + local vK = makTab:Match(key,1,false,"",true,true); if(not IsHere(vK)) then + LogInstance(sHew.." Sync matching PK failed "..GetReport(key),sTable); return false end local sKey, sVK = tostring(key), tostring(vK); if(sKey ~= sVK) then - LogInstance("("..fPref.."@"..sTable..") Sync key mismatch "..GetReport(sKey, sVK)); + LogInstance(sHew.." Sync key mismatch "..GetReport(sKey, sVK),sTable) tData[vK] = tData[key]; tData[key] = nil -- Override the key casing after matching end local tRec = tData[vK] -- Create local reference to the record of the matched key for iCnt = 1, #tRec do local tRow, vID, nID, sID = tRec[iCnt] -- Read the processed row reference @@ -3823,19 +3833,19 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) nID = (nID or (IsDisable(sID) and iCnt or 0)) -- Where the line ID must be read from. Skip the key itself and convert the disabled value if(iCnt ~= nID) then -- Validate the line ID being in proper borders and sequential - LogInstance("("..fPref.."@"..sTable.."@"..sKey..") Sync point ID scatter " - ..GetReport(iCnt, vID, nID, sID)); return false end; tRow[iD-1] = nID + LogInstance(sHew.." Sync point ID scatter " + ..GetReport(iCnt, vID, nID, sID, sKey),sTable); return false end; tRow[iD-1] = nID for nCnt = 1, #tRow do -- Do a value matching without quotes local vM = makTab:Match(tRow[nCnt],nCnt+1,false,"",true,true); if(not IsHere(vM)) then - LogInstance("("..fPref.."@"..sTable.."@"..sKey..") Sync matching failed " - ..GetReport(tRow[nCnt], (nCnt+1), defTab[nCnt+1][1])); return false + LogInstance(sHew.." Sync matching failed " + ..GetReport(tRow[nCnt], (nCnt+1), defTab[nCnt+1][1], sKey),sTable); return false end; tRow[nCnt] = vM -- Store the matched value in the same place as the original end -- Check whenever triggers are available. Run them if present if(istable(defTab.Trigs)) then tableInsert(tRow, 1, vK) -- Apply trigger format local bS, sR = pcall(defTab.Trigs["Record"], tRow, sFunc); if(not bS) then - LogInstance("("..fPref.."@"..sTable..") Trigger "..GetReport(nID, vK).." error: "..sR); return false end + LogInstance(sHew.." Trigger "..GetReport(nID, vK).." error: "..sR,sTable); return false end if(not sR) then -- Rise log error when something gets wrong inside the trigger routine - LogInstance("("..fPref.."@"..sTable..") Trigger "..GetReport(nID, vK).." routine fail"); return false end + LogInstance(sHew.." Trigger "..GetReport(nID, vK).." routine fail",sTable); return false end tableRemove(tRow, 1) -- Remove the fictive duplicated primary key from the row data first column end end -- Register the read line to the output file @@ -3845,36 +3855,39 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) end end local tSort = Arrange(fData); if(not tSort) then - LogInstance("("..fPref.."@"..sTable..") Sorting failed"); return false end + LogInstance(sHew.." Sorting failed",sTable); return false end local O = fileOpen(fName, "wb" ,"DATA"); if(not O) then - LogInstance("("..fPref.."@"..sTable..")("..fName..") Open fail"); return false end - O:Write("# "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") + LogInstance(sHew.." Open fail: "..fName,sTable); return false end + O:Write("# "..sFunc..":"..sHew.." "..GetDateTime().." [ "..sMoDB.." ]\n") O:Write("# "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") for iKey = 1, tSort.Size do local key = tSort[iKey].Key local vK = makTab:Match(key,1,true,"\"",true); if(not IsHere(vK)) then - O:Flush(); O:Close(); LogInstance("("..fPref.."@"..sTable.."@"..tostring(key)..") Write matching PK failed"); return false end + O:Flush(); O:Close(); LogInstance(sHew.." Write matching PK failed " + ..GetReport(key),sTable); return false end local fRec, sCash, sData = fData[key], defTab.Name..sDelim..vK, "" for iCnt = 1, fRec.Size do local fRow = fRec[iCnt] for nCnt = 1, #fRow do local vM = makTab:Match(fRow[nCnt],nCnt+1,true,"\"",true); if(not IsHere(vM)) then - O:Flush(); O:Close(); LogInstance("("..fPref.."@"..sTable.."@"..tostring(key)..") Write matching failed " - ..GetReport(fRow[nCnt], (nCnt+1), defTab[nCnt+1][1])); return false + O:Flush(); O:Close(); LogInstance(sHew.." Write matching failed " + ..GetReport(fRow[nCnt], (nCnt+1), defTab[nCnt+1][1], key),sTable); return false end; sData = sData..sDelim..tostring(vM) end; O:Write(sCash..sData.."\n"); sData = "" end end O:Flush(); O:Close() - LogInstance("("..fPref.."@"..sTable..") Success"); return true + LogInstance(sHew.." Success",sTable); return true end function TranslateDSV(sTable, sPref, sDelim) - local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then - LogInstance("("..fPref..") Prefix empty"); return false end if(not isstring(sTable)) then - LogInstance("("..fPref..") Table mismatch "..GetReport(sTable)); return false end + LogInstance("Table mismatch "..GetReport(sTable)); return false end + local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then + LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end + local tHew = GetOpVar("PATTEM_EXDSVHED") + local sHew = tHew[2]:format(fPref, sTable) if(IsFlag("en_dsv_datalock")) then - LogInstance("("..fPref..") User disabled"); return true end + LogInstance(sHew.." User disabled",sTable); return true end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then - LogInstance("("..fPref..") Missing table builder",sTable); return false end + LogInstance(sHew.." Missing table builder",sTable); return false end local defTab, sFunc = makTab:GetDefinition(), "TranslateDSV" local sNdsv, sNins = GetOpVar("DIRPATH_BAS"), GetOpVar("DIRPATH_BAS") if(not fileExists(sNins,"DATA")) then fileCreateDir(sNins) end @@ -3884,10 +3897,10 @@ function TranslateDSV(sTable, sPref, sDelim) sNdsv, sNins = sNdsv..fForm:format(fPref, defTab.Name), sNins..fForm:format(fPref, defTab.Name) local sDelim = tostring(sDelim or "\t"):sub(1,1) local D = fileOpen(sNdsv, "rb", "DATA"); if(not D) then - LogInstance("("..fPref..")("..sNdsv..") Open fail",sTable); return false end + LogInstance(sHew.." Open fail: "..sNdsv,sTable); return false end local I = fileOpen(sNins, "wb", "DATA"); if(not I) then - LogInstance("("..fPref..")("..sNins..") Open fail",sTable); return false end - I:Write("# "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") + LogInstance(sHew.." Open fail: "..sNins,sTable); return false end + I:Write("# "..sFunc..":"..sHew.." "..GetDateTime().." [ "..sMoDB.." ]\n") I:Write("# "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") local sLine, isEOF = "", false local sFr, sBk = sTable:upper()..":Record({", "})\n" @@ -3898,13 +3911,13 @@ function TranslateDSV(sTable, sPref, sDelim) for nCnt = 1, #tBoo do local vMatch = makTab:Match(GetStrip(tBoo[nCnt]),nCnt,true,"\"",true) if(not IsHere(vMatch)) then D:Close(); I:Flush(); I:Close() - LogInstance("("..fPref..") Given matching failed " + LogInstance(sHew.." Given matching failed " ..GetReport(tBoo[nCnt], nCnt, defTab[nCnt][1]), sTable); return false end sCat = sCat..", "..tostring(vMatch) end; I:Write(sFr..sCat:sub(3,-1)..sBk) end end; D:Close(); I:Flush(); I:Close() - LogInstance("("..fPref..") Success",sTable); return true + LogInstance(sHew.." Success",sTable); return true end --[[ @@ -3916,12 +3929,14 @@ end * bSkip > Skip addition for the DSV prefix if exists ]] function RegisterDSV(sProg, sPref, sDelim, bSkip) + local sProg = tostring(sProg or ""); if(IsBlank(sProg)) then + LogInstance("Program empty "..GetReport(sProg, sPref)); return false end local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then - LogInstance("("..fPref..") Prefix empty"); return false end - if(IsFlag("en_dsv_datalock")) then - LogInstance("("..fPref..") User disabled"); return true end + LogInstance("Prefix empty "..GetReport(sProg, sPref)); return false end if(CLIENT and gameSinglePlayer()) then - LogInstance("("..fPref..") Single client"); return true end + LogInstance("Single client "..GetReport(sProg, sPref)); return true end + if(IsFlag("en_dsv_datalock")) then + LogInstance("User disabled "..GetReport(sProg, sPref)); return true end local sBas = GetOpVar("DIRPATH_BAS") if(not fileExists(sBas,"DATA")) then fileCreateDir(sBas) end local sBas = sBas..GetOpVar("DIRPATH_SET") @@ -3933,7 +3948,7 @@ function RegisterDSV(sProg, sPref, sDelim, bSkip) if(fileExists(fName, "DATA")) then local fPool, isEOF = {}, false local F, sLine = fileOpen(fName, "rb" ,"DATA"), ""; if(not F) then - LogInstance("Skip fail "..GetReport(fPref, fName)); return false end + LogInstance("Skip fail: "..GetReport(sProg, fPref, fName)); return false end while(not isEOF) do sLine, isEOF = GetStringFile(F) if(not IsBlank(sLine)) then local isAct = true @@ -3948,15 +3963,15 @@ function RegisterDSV(sProg, sPref, sDelim, bSkip) end; F:Close() if(fPool[fPref]) then local inf = fPool[fPref] for iP = 1, inf.Size do local tab = inf[iP] - LogInstance("Status "..GetReport(tab[1], fPref, tab[2])) - end; LogInstance("Skip "..GetReport(fPref, sProg)); return true + LogInstance("Status "..GetReport(sProg, fPref, tab[1], tab[2])) + end; LogInstance("Skip "..GetReport(sProg, fPref)); return true end - else LogInstance("Skip miss "..GetReport(fPref, fName)) end + else LogInstance("Skip miss "..GetReport(sProg, fPref, fName)) end end local F = fileOpen(fName, "ab" ,"DATA"); if(not F) then - LogInstance("Update fail "..GetReport(fPref, fName)); return false end + LogInstance("Update fail "..GetReport(sProg, fPref, fName)); return false end F:Write(fPref..sDelim..tostring(sProg or sMiss).."\n"); F:Flush(); F:Close() - LogInstance("Register "..GetReport(fPref)); return true + LogInstance("Register "..GetReport(sProg, fPref)); return true end --[[ @@ -3973,7 +3988,7 @@ function ProcessDSV(sDelim) local lbNam = GetOpVar("NAME_LIBRARY") local fName = (sBas..sSet..lbNam.."_dsv.txt") local F = fileOpen(fName, "rb" ,"DATA"); if(not F) then - LogInstance("Open fail "..GetReport(fName)); return false end + LogInstance("Open fail: "..GetReport(fName)); return false end local sLine, isEOF, sIns = "", false, GetInstPref() local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXDSV") local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} @@ -4455,7 +4470,7 @@ function GetNormalSpawn(oPly,ucsPos,ucsAng,shdModel,ivhdPoID, stSpawn.HRec = hdRec if(ucsPos) then stSpawn.BPos:Set(ucsPos) end if(ucsAng) then stSpawn.BAng:Set(ucsAng) end - stSpawn.OPos:Set(stSpawn.BPos); stSpawn.OAng:Set(stSpawn.BAng); + stSpawn.OPos:Set(stSpawn.BPos); stSpawn.OAng:Set(stSpawn.BAng) -- Initialize F, R, U Copy the UCS like that to support database POA stSpawn.ANxt:SetUnpacked(tonumber(ucsAngP) or 0, tonumber(ucsAngY) or 0, @@ -4467,7 +4482,7 @@ function GetNormalSpawn(oPly,ucsPos,ucsAng,shdModel,ivhdPoID, if(not (stSpawn.ANxt:IsZero() and stSpawn.PNxt:IsZero())) then NegAngle(stSpawn.ANxt, true, true, false) local vW, aW = LocalToWorld(stSpawn.PNxt, stSpawn.ANxt, stSpawn.BPos, stSpawn.BAng) - stSpawn.OPos:Set(vW); stSpawn.OAng:Set(aW); + stSpawn.OPos:Set(vW); stSpawn.OAng:Set(aW) stSpawn.F:Set(stSpawn.OAng:Forward()) stSpawn.R:Set(stSpawn.OAng:Right()) stSpawn.U:Set(stSpawn.OAng:Up()) @@ -4596,7 +4611,7 @@ function ProjectRay(vO, vD, vP) local vN = vD:GetNormalized() local vX = Vector(vP); vX:Sub(vO) local nD = vX:Dot(vN); vX:Set(vN) - vX:Mul(nD); vX:Add(vO); + vX:Mul(nD); vX:Add(vO) return nD, vN, vX end @@ -5704,7 +5719,7 @@ function UpdateCurveSnap(oPly, iD, nD) local vP2, vN2 = tC.CNode[iD + 1], tC.CNorm[iD + 1] local nS, nE = vP0:Distance(vP1), vP0:Distance(vP2) if(nS <= nD and nE >= nD) then - tC.SSize = (tC.SSize + 1) tC.Snap[tC.SSize] = {Size = 0, ID = tC.SSize}; + tC.SSize = (tC.SSize + 1) tC.Snap[tC.SSize] = {Size = 0, ID = tC.SSize} local tO, nL = UpdateCurveNormUCS(oPly, vP1, vN1, vP2, vN2, vP0, nD) while(nL > nD) do -- First segment track is snapped but end is not reached tO, nL = UpdateCurveNormUCS(oPly, vP0, vN0, vP2, vN2, vP0, nD) end From 1b51334d2bb2e2e0769f9267659672fae9fdb407 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 1 Nov 2024 11:02:16 +0200 Subject: [PATCH 065/114] Fixed: Provide the context menu tables option if such are available at all --- lua/autorun/trackassembly_init.lua | 101 +++++++++++++++-------------- 1 file changed, 54 insertions(+), 47 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index b2a9b903..b5991c9d 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -727,8 +727,8 @@ if(CLIENT) then end; acTo:UpdateGhost(oPly) -- Update ghosts stack for the local player end) -- Read client configuration - asmlib.SetAction("OPEN_EXTERNDB", -- Must have the same parameters as the hook - function() + asmlib.SetAction("OPEN_EXTERNDB", + function() -- Must have the same parameters as the hook local oPly = LocalPlayer() local sLog = "*OPEN_EXTERNDB" local scrW = surfaceScreenWidth() @@ -967,55 +967,62 @@ if(CLIENT) then if(nIndex >= nT) then return end tpText:Swap(pnLine, pnSelf:GetLine(nT)) end):SetImage(asmlib.ToIcon(sI.."mv4")) - -- Manipulate content local settings related to the line - local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."st")) - if(not IsValid(pIn)) then pnFrame:Close() - asmlib.LogInstance("Settings menu invalid",sLog..".ListView"); return nil end - if(not IsValid(pOp)) then pnFrame:Close() - asmlib.LogInstance("Settings opts invalid",sLog..".ListView"); return nil end - pOp:SetIcon(asmlib.ToIcon(sI.."st")); pOp:SetTooltip(languageGetPhrase(sI.."stt")) -- Populate the sub-menu with all table nicknames - local iD, makTab = 1, asmlib.GetBuilderID(1) + local iD, pIn, pOp = 1, nil, nil + local makTab = asmlib.GetBuilderID(iD) while(makTab) do local defTab = makTab:GetDefinition() local sFile = fDSV:format(sP, defTab.Nick) - local pTb, pOb = pIn:AddSubMenu(defTab.Nick) - if(not IsValid(pTb)) then pnFrame:Close() - asmlib.LogInstance("Manage menu invalid"..GetReport(iD, defTab.Nick),sLog..".ListView"); return nil end - if(not IsValid(pOb)) then pnFrame:Close() - asmlib.LogInstance("Manage opts invalid",sLog..".ListView"); return nil end - pOb:SetIcon(asmlib.ToIcon(sI.."si")) - pTb:AddOption(languageGetPhrase(sT.."st1"), - function() SetClipboardText(defTab.Nick) end):SetImage(asmlib.ToIcon(sI.."st1")) - pTb:AddOption(languageGetPhrase(sT.."st2"), - function() SetClipboardText(sFile) end):SetImage(asmlib.ToIcon(sI.."st2")) - pTb:AddOption(languageGetPhrase(sT.."st3"), - function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(asmlib.ToIcon(sI.."st3")) - pTb:AddOption(languageGetPhrase(sT.."st4"), - function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(asmlib.ToIcon(sI.."st4")) - pTb:AddOption(languageGetPhrase(sT.."st5"), - function() -- Edit the database contents using the Luapad addon - if(not luapad) then return end -- Luapad is not installed do nothing - asmlib.LogInstance("Modify "..asmlib.GetReport(sFile), sLog..".ListView") - if(luapad.Frame) then luapad.Frame:SetVisible(true) - else asmlib.SetAsmConvar(oPly, "*luapad", gsToolNameL) end - luapad.AddTab("["..defTab.Nick.."]"..defTab.Nick, fileRead(sFile, "DATA"), sDsv); - if(defTab.Nick == "PIECES") then -- Load the category provider for this DSV - local sCats = fDSV:format(sP, "CATEGORY"); if(fileExists(sCats,"DATA")) then - luapad.AddTab("[CATEGORY]"..defTab.Nick, fileRead(sCats, "DATA"), sDsv); - end -- This is done so we can distinguish between luapad and other panels - end -- Luapad is designed not to be closed so we need to make it invisible - luapad.Frame:SetVisible(true); luapad.Frame:Center() - luapad.Frame:MakePopup(); conElements:Push({luapad.Frame}) - end):SetImage(asmlib.ToIcon(sI.."st5")) - pTb:AddOption(languageGetPhrase(sT.."st6"), - function() fileDelete(sFile) - asmlib.LogInstance("Deleted "..asmlib.GetReport(sFile), sLog..".ListView") - if(defTab.Nick == "PIECES") then local sCats = fDSV:format(sP, "CATEGORY") - if(fileExists(sCats,"DATA")) then fileDelete(sCats) -- Delete category when present - asmlib.LogInstance("Deleted "..asmlib.GetReport(sCats), sLog..".ListView") end - end - end):SetImage(asmlib.ToIcon(sI.."st6")) + if(fileExists(sFile, "DATA")) then + if(not (pIn and pOp)) then + -- Manipulate content local settings related to the line + pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."st")) + if(not IsValid(pIn)) then pnFrame:Close() + asmlib.LogInstance("Settings menu invalid",sLog..".ListView"); return nil end + if(not IsValid(pOp)) then pnFrame:Close() + asmlib.LogInstance("Settings opts invalid",sLog..".ListView"); return nil end + pOp:SetIcon(asmlib.ToIcon(sI.."st")); pOp:SetTooltip(languageGetPhrase(sI.."stt")) + end -- When there is at least one DSV table present make table sub-menu + if(pIn and pOp) then -- When the sub-menu pointer is available add tables + local pTb, pOb = pIn:AddSubMenu(defTab.Nick) + if(not IsValid(pTb)) then pnFrame:Close() + asmlib.LogInstance("Manage menu invalid"..GetReport(iD, defTab.Nick),sLog..".ListView"); return nil end + if(not IsValid(pOb)) then pnFrame:Close() + asmlib.LogInstance("Manage opts invalid",sLog..".ListView"); return nil end + pOb:SetIcon(asmlib.ToIcon(sI.."si")) + pTb:AddOption(languageGetPhrase(sT.."st1"), + function() SetClipboardText(defTab.Nick) end):SetImage(asmlib.ToIcon(sI.."st1")) + pTb:AddOption(languageGetPhrase(sT.."st2"), + function() SetClipboardText(sFile) end):SetImage(asmlib.ToIcon(sI.."st2")) + pTb:AddOption(languageGetPhrase(sT.."st3"), + function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(asmlib.ToIcon(sI.."st3")) + pTb:AddOption(languageGetPhrase(sT.."st4"), + function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(asmlib.ToIcon(sI.."st4")) + pTb:AddOption(languageGetPhrase(sT.."st5"), + function() -- Edit the database contents using the Luapad addon + if(not luapad) then return end -- Luapad is not installed do nothing + asmlib.LogInstance("Modify "..asmlib.GetReport(sFile), sLog..".ListView") + if(luapad.Frame) then luapad.Frame:SetVisible(true) + else asmlib.SetAsmConvar(oPly, "*luapad", gsToolNameL) end + luapad.AddTab("["..defTab.Nick.."]"..defTab.Nick, fileRead(sFile, "DATA"), sDsv); + if(defTab.Nick == "PIECES") then -- Load the category provider for this DSV + local sCats = fDSV:format(sP, "CATEGORY"); if(fileExists(sCats,"DATA")) then + luapad.AddTab("[CATEGORY]"..defTab.Nick, fileRead(sCats, "DATA"), sDsv); + end -- This is done so we can distinguish between luapad and other panels + end -- Luapad is designed not to be closed so we need to make it invisible + luapad.Frame:SetVisible(true); luapad.Frame:Center() + luapad.Frame:MakePopup(); conElements:Push({luapad.Frame}) + end):SetImage(asmlib.ToIcon(sI.."st5")) + pTb:AddOption(languageGetPhrase(sT.."st6"), + function() fileDelete(sFile) + asmlib.LogInstance("Deleted "..asmlib.GetReport(sFile), sLog..".ListView") + if(defTab.Nick == "PIECES") then local sCats = fDSV:format(sP, "CATEGORY") + if(fileExists(sCats,"DATA")) then fileDelete(sCats) -- Delete category when present + asmlib.LogInstance("Deleted "..asmlib.GetReport(sCats), sLog..".ListView") end + end + end):SetImage(asmlib.ToIcon(sI.."st6")) + end + end iD = (iD + 1); makTab = asmlib.GetBuilderID(iD) end pnMenu:Open() From a03dac2ad675b43c05bf1d98141c11e7ea103317 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 1 Nov 2024 16:58:11 +0200 Subject: [PATCH 066/114] Added: Dedicated prefix for generic ( whole DB containers ) --- lua/autorun/trackassembly_init.lua | 79 +++++++++++++++++------------- lua/trackassembly/trackasmlib.lua | 9 ++-- 2 files changed, 49 insertions(+), 39 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index b5991c9d..3f92015f 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.799") +asmlib.SetOpVar("TOOL_VERSION","8.800") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -100,10 +100,11 @@ local gnMaxRot = asmlib.GetOpVar("MAX_ROTATION") local gsToolNameL = asmlib.GetOpVar("TOOLNAME_NL") local gsToolPrefL = asmlib.GetOpVar("TOOLNAME_PL") local gsToolPrefU = asmlib.GetOpVar("TOOLNAME_PU") +local gsGenerDSV = asmlib.GetOpVar("DBEXP_PREFGEN") local gsLimitName = asmlib.GetOpVar("CVAR_LIMITNAME") +local gsDirDSV = asmlib.GetOpVar("DIRPATH_BAS")..asmlib.GetOpVar("DIRPATH_DSV") local gsNoAnchor = asmlib.GetOpVar("MISS_NOID")..gsSymRev..asmlib.GetOpVar("MISS_NOMD") -local gsFullDSV = asmlib.GetOpVar("DIRPATH_BAS")..asmlib.GetOpVar("DIRPATH_DSV").. - asmlib.GetInstPref()..asmlib.GetOpVar("TOOLNAME_PU") +local gsGrossDSV = gsDirDSV..gsGenerDSV..gsToolPrefU ------------ VARIABLE FLAGS ------------ @@ -858,13 +859,16 @@ if(CLIENT) then pnImport:SetText(languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bti")) pnImport:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bti_tp")) pnImport.DoRightClick = function() end - pnImport.DoClick = function(pnSelf) + pnImport.DoClick = function(pnSelf) pnListView:Clear() if(not fileExists(sNam, "DATA")) then fileWrite(sNam, "") end - local oDSV = fileOpen(sNam, "rb", "DATA"); if(not oDSV) then pnFrame:Close() + local fD = fileOpen(sNam, "rb", "DATA"); if(not fD) then pnFrame:Close() asmlib.LogInstance("File error", sLog..".Import"); return nil end - local sLine, bEOF, bAct = "", false, true; pnListView:Clear() + local tGen = fileFind(gsDirDSV, gsGenerDSV..gsToolPrefU.."*.txt") + if(tGen and #tGen > 0) then + pnListView:AddLine("V", gsGenerDSV, gsGrossDSV.."*.txt"):SetTooltip(gsDirDSV) end + local sLine, bEOF, bAct = "", false, true while(not bEOF) do - sLine, bEOF = asmlib.GetStringFile(oDSV) + sLine, bEOF = asmlib.GetStringFile(fD) if(not asmlib.IsBlank(sLine)) then local sKey, sPrg if(not asmlib.IsDisable(sLine)) then bAct = true else bAct, sLine = false, sLine:sub(2,-1):Trim() end @@ -875,7 +879,7 @@ if(CLIENT) then else sKey, sPrg = sLine, sMis end pnListView:AddLine((bAct and "V" or "X"), sKey, sPrg):SetTooltip(sPrg) end - end; oDSV:Close() + end; fD:Close() end; pnImport:DoClick() -- Export button. When clicked loads contents into the file local pnExport = vguiCreate("DButton") @@ -890,17 +894,16 @@ if(CLIENT) then pnExport:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_externdb_bte_tp")) pnExport.DoRightClick = function() end pnExport.DoClick = function(pnSelf) - local oDSV = fileOpen(sNam, "wb", "DATA"); if(not oDSV) then pnFrame:Close() + local fD = fileOpen(sNam, "wb", "DATA"); if(not fD) then pnFrame:Close() asmlib.LogInstance("File error",sLog..".Export"); return nil end local tLine = pnListView:GetLines() local sOff = asmlib.GetOpVar("OPSYM_DISABLE") - for iK, pnCur in pairs(tLine) do - local sAct = ((pnCur:GetColumnText(1) == "V") and "" or sOff) - local sPrf = pnCur:GetColumnText(2) - local sPth = pnCur:GetColumnText(3) + for iL = 1, #tLine do local pCur = tLine[iL] + local sAct = ((pCur:GetColumnText(1) == "V") and "" or sOff) + local sPrf, sPth = pCur:GetColumnText(2), pCur:GetColumnText(3) if(not asmlib.IsBlank(sPth)) then sPth = sDel..sPth end - oDSV:Write(sAct..sPrf..sPth.."\n") - end; oDSV:Flush(); oDSV:Close() + if(sPrf ~= gsGenerDSV) then fD:Write(sAct..sPrf..sPth.."\n") end + end; fD:Flush(); fD:Close() end pnListView.OnRowRightClick = function(pnSelf, nIndex, pnLine) local pnMenu = vguiCreate("DMenu") @@ -1243,22 +1246,28 @@ if(CLIENT) then -- The button database export by type uses the current active type in the ListView line pnButton.DoClick = function(pnSelf) asmlib.LogInstance("Click "..asmlib.GetReport(pnSelf:GetText()), sLog..".Button") - if(not asmlib.GetAsmConvar("exportdb", "BUL")) then return end - if(inputIsKeyDown(KEY_LSHIFT)) then - asmlib.DoAction("OPEN_EXTERNDB") - asmlib.LogInstance("Open manager", sLog..".Button") - else - asmlib.ExportCategory(3, nil, nil, true) - asmlib.ExportDSV("PIECES", nil, nil, true) - asmlib.ExportDSV("ADDITIONS", nil, nil, true) - asmlib.ExportDSV("PHYSPROPERTIES", nil, nil, true) + if(asmlib.GetAsmConvar("exportdb", "BUL")) then + local sGen = asmlib.GetOpVar("DBEXP_PREFGEN") + asmlib.ExportCategory(3, nil, sGen, true) + asmlib.ExportDSV("PIECES", sGen, nil, true) + asmlib.ExportDSV("ADDITIONS", sGen, nil, true) + asmlib.ExportDSV("PHYSPROPERTIES", sGen, nil, true) asmlib.LogInstance("Export instance", sLog..".Button") + asmlib.SetAsmConvar(oPly, "exportdb", 0) + else + local fW = asmlib.GetOpVar("FORM_GITWIKI") + guiOpenURL(fW:format("Additional-features")) end - asmlib.SetAsmConvar(oPly, "exportdb", 0) end pnButton.DoRightClick = function(pnSelf) - local fW = asmlib.GetOpVar("FORM_GITWIKI") - guiOpenURL(fW:format("Additional-features")) + if(asmlib.GetAsmConvar("exportdb", "BUL")) then + asmlib.DoAction("OPEN_EXTERNDB") + asmlib.LogInstance("Open manager", sLog..".Button") + smlib.SetAsmConvar(oPly, "exportdb", 0) + else + local fW = asmlib.GetOpVar("FORM_GITWIKI") + guiOpenURL(fW:format("Additional-features")) + end end -- Leave the TextEntry here so it can access and update the local ListView reference pnTextEntry.OnEnter = function(pnSelf) @@ -1975,9 +1984,9 @@ asmlib.NewTable("PHYSPROPERTIES",{ --[[ Categories are only needed client side ]]-- if(CLIENT) then - if(fileExists(gsFullDSV.."CATEGORY.txt", "DATA")) then + if(fileExists(gsGrossDSV.."CATEGORY.txt", "DATA")) then asmlib.LogInstance("DB CATEGORY from DSV",gtInitLogs) - asmlib.ImportCategory(3) + asmlib.ImportCategory(3, gsGenerDSV) else asmlib.LogInstance("DB CATEGORY from LUA",gtInitLogs) end end @@ -1994,9 +2003,9 @@ end * First argument of Categorize() is used to provide default track type for TABLE:Record() * Second argument of Categorize() is used to generate track categories for the processed addon ]]-- -if(fileExists(gsFullDSV.."PIECES.txt", "DATA")) then +if(fileExists(gsGrossDSV.."PIECES.txt", "DATA")) then asmlib.LogInstance("DB PIECES from DSV",gtInitLogs) - asmlib.ImportDSV("PIECES", true) + asmlib.ImportDSV("PIECES", true, gsGenerDSV) else if(gsMoDB == "SQL") then sqlBegin() end asmlib.LogInstance("DB PIECES from LUA",gtInitLogs) @@ -4677,9 +4686,9 @@ else if(gsMoDB == "SQL") then sqlCommit() end end -if(fileExists(gsFullDSV.."PHYSPROPERTIES.txt", "DATA")) then +if(fileExists(gsGrossDSV.."PHYSPROPERTIES.txt", "DATA")) then asmlib.LogInstance("DB PHYSPROPERTIES from DSV",gtInitLogs) - asmlib.ImportDSV("PHYSPROPERTIES", true) + asmlib.ImportDSV("PHYSPROPERTIES", true, gsGenerDSV) else --- Valve's physical properties: https://developer.valvesoftware.com/wiki/Material_surface_properties if(gsMoDB == "SQL") then sqlBegin() end asmlib.LogInstance("DB PHYSPROPERTIES from LUA",gtInitLogs) @@ -4786,9 +4795,9 @@ else --- Valve's physical properties: https://developer.valvesoftware.com/wiki/M if(gsMoDB == "SQL") then sqlCommit() end end -if(fileExists(gsFullDSV.."ADDITIONS.txt", "DATA")) then +if(fileExists(gsGrossDSV.."ADDITIONS.txt", "DATA")) then asmlib.LogInstance("DB ADDITIONS from DSV",gtInitLogs) - asmlib.ImportDSV("ADDITIONS", true) + asmlib.ImportDSV("ADDITIONS", true, gsGenerDSV) else if(gsMoDB == "SQL") then sqlBegin() end asmlib.LogInstance("DB ADDITIONS from LUA",gtInitLogs) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index e6ddd35c..4f4b0342 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -705,6 +705,7 @@ function InitBase(sName, sPurp) SetOpVar("MISS_NOTP","TYPE") -- No track type SetOpVar("MISS_NOBS","0/0") -- No Bodygroup skin SetOpVar("MISS_NOSQL","NULL") -- No SQL value + SetOpVar("MISS_NOTR","Oops, missing ?") -- No translation found SetOpVar("FORM_PROGRESS", "%5.2f%%") SetOpVar("FORM_CONCMD", "%s %s") SetOpVar("FORM_INTEGER", "[%d]") @@ -717,6 +718,7 @@ function InitBase(sName, sPurp) SetOpVar("FORM_NTFGAME", "notification.AddLegacy(\"%s\", NOTIFY_%s, 6)") SetOpVar("FORM_NTFPLAY", "surface.PlaySound(\"ambient/water/drip%d.wav\")") SetOpVar("MODELNAM_FILE","%.mdl") + SetOpVar("DBEXP_PREFGEN","generic_") SetOpVar("VCOMPARE_SPAN", function(u, v) if(u.T ~= v.T) then return u.T < v.T end local uC = (u.C or {}) @@ -800,7 +802,6 @@ function InitBase(sName, sPurp) {name = "reload" , icon = "gui/r.png" }, {name = "reload_use", icon = "gui/r.png" , icon2 = "gui/e.png"} }) - SetOpVar("MISS_NOTR","Oops, missing ?") -- No translation found SetOpVar("TOOL_DEFMODE","gmod_tool") SetOpVar("FORM_FILENAMEAR", "z_autorun_[%s].txt") SetOpVar("FORM_DRAWDBG", "%s{%s}: %s > %s") @@ -3989,7 +3990,7 @@ function ProcessDSV(sDelim) local fName = (sBas..sSet..lbNam.."_dsv.txt") local F = fileOpen(fName, "rb" ,"DATA"); if(not F) then LogInstance("Open fail: "..GetReport(fName)); return false end - local sLine, isEOF, sIns = "", false, GetInstPref() + local sLine, isEOF, sGen = "", false, GetOpVar("DBEXP_PREFGEN") local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXDSV") local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} local sDv = sBas..GetOpVar("DIRPATH_DSV") @@ -4019,7 +4020,7 @@ function ProcessDSV(sDelim) for iD = 1, tab.Size do LogInstance("Prefix "..GetReport(iD, prf, tab[iD])) end else if(CLIENT) then - if(not fileExists(sDv..fForm:format(sIns, sNt.."CATEGORY"), "DATA")) then + if(not fileExists(sDv..fForm:format(sGen, sNt.."CATEGORY"), "DATA")) then if(fileExists(sDv..fForm:format(prf, sNt.."CATEGORY"), "DATA")) then if(not ImportCategory(3, prf)) then LogInstance("Failed "..GetReport(prf, "CATEGORY")) end @@ -4029,7 +4030,7 @@ function ProcessDSV(sDelim) for iD = 1, #libQTable do local makTab = GetBuilderID(iD) local defTab = makTab:GetDefinition() - if(not fileExists(sDv..fForm:format(sIns, sNt..defTab.Nick), "DATA")) then + if(not fileExists(sDv..fForm:format(sGen, sNt..defTab.Nick), "DATA")) then if(fileExists(sDv..fForm:format(prf, sNt..defTab.Nick), "DATA")) then if(not ImportDSV(defTab.Nick, true, prf)) then LogInstance("Failed "..GetReport(prf, defTab.Nick)) end From a42bd1537913784099340e2652ff5671cf92c1cc Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Fri, 1 Nov 2024 22:43:43 +0200 Subject: [PATCH 067/114] Changed: Utilize global file value Updated: Generic database prefix from library name Removed: `MISS_NOTR` as translations work differently now --- lua/autorun/trackassembly_init.lua | 9 ++++----- lua/trackassembly/trackasmlib.lua | 3 +-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 3f92015f..1f899274 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -1247,11 +1247,10 @@ if(CLIENT) then pnButton.DoClick = function(pnSelf) asmlib.LogInstance("Click "..asmlib.GetReport(pnSelf:GetText()), sLog..".Button") if(asmlib.GetAsmConvar("exportdb", "BUL")) then - local sGen = asmlib.GetOpVar("DBEXP_PREFGEN") - asmlib.ExportCategory(3, nil, sGen, true) - asmlib.ExportDSV("PIECES", sGen, nil, true) - asmlib.ExportDSV("ADDITIONS", sGen, nil, true) - asmlib.ExportDSV("PHYSPROPERTIES", sGen, nil, true) + asmlib.ExportCategory(3, nil, gsGenerDSV, true) + asmlib.ExportDSV("PIECES", gsGenerDSV, nil, true) + asmlib.ExportDSV("ADDITIONS", gsGenerDSV, nil, true) + asmlib.ExportDSV("PHYSPROPERTIES", gsGenerDSV, nil, true) asmlib.LogInstance("Export instance", sLog..".Button") asmlib.SetAsmConvar(oPly, "exportdb", 0) else diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4f4b0342..09f15448 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -705,7 +705,6 @@ function InitBase(sName, sPurp) SetOpVar("MISS_NOTP","TYPE") -- No track type SetOpVar("MISS_NOBS","0/0") -- No Bodygroup skin SetOpVar("MISS_NOSQL","NULL") -- No SQL value - SetOpVar("MISS_NOTR","Oops, missing ?") -- No translation found SetOpVar("FORM_PROGRESS", "%5.2f%%") SetOpVar("FORM_CONCMD", "%s %s") SetOpVar("FORM_INTEGER", "[%d]") @@ -718,7 +717,7 @@ function InitBase(sName, sPurp) SetOpVar("FORM_NTFGAME", "notification.AddLegacy(\"%s\", NOTIFY_%s, 6)") SetOpVar("FORM_NTFPLAY", "surface.PlaySound(\"ambient/water/drip%d.wav\")") SetOpVar("MODELNAM_FILE","%.mdl") - SetOpVar("DBEXP_PREFGEN","generic_") + SetOpVar("DBEXP_PREFGEN", GetOpVar("NAME_LIBRARY").."_") SetOpVar("VCOMPARE_SPAN", function(u, v) if(u.T ~= v.T) then return u.T < v.T end local uC = (u.C or {}) From 9968665dc79f3c353c6cf4db141d8cd3edd19c72 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Fri, 1 Nov 2024 22:53:30 +0200 Subject: [PATCH 068/114] Renamed: Generic prefix local variable --- lua/autorun/trackassembly_init.lua | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 1f899274..c0ecf116 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.800") +asmlib.SetOpVar("TOOL_VERSION","8.801") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -100,11 +100,11 @@ local gnMaxRot = asmlib.GetOpVar("MAX_ROTATION") local gsToolNameL = asmlib.GetOpVar("TOOLNAME_NL") local gsToolPrefL = asmlib.GetOpVar("TOOLNAME_PL") local gsToolPrefU = asmlib.GetOpVar("TOOLNAME_PU") -local gsGenerDSV = asmlib.GetOpVar("DBEXP_PREFGEN") +local gsGenerPrf = asmlib.GetOpVar("DBEXP_PREFGEN") local gsLimitName = asmlib.GetOpVar("CVAR_LIMITNAME") local gsDirDSV = asmlib.GetOpVar("DIRPATH_BAS")..asmlib.GetOpVar("DIRPATH_DSV") local gsNoAnchor = asmlib.GetOpVar("MISS_NOID")..gsSymRev..asmlib.GetOpVar("MISS_NOMD") -local gsGrossDSV = gsDirDSV..gsGenerDSV..gsToolPrefU +local gsGrossDSV = gsDirDSV..gsGenerPrf..gsToolPrefU ------------ VARIABLE FLAGS ------------ @@ -863,9 +863,9 @@ if(CLIENT) then if(not fileExists(sNam, "DATA")) then fileWrite(sNam, "") end local fD = fileOpen(sNam, "rb", "DATA"); if(not fD) then pnFrame:Close() asmlib.LogInstance("File error", sLog..".Import"); return nil end - local tGen = fileFind(gsDirDSV, gsGenerDSV..gsToolPrefU.."*.txt") + local tGen = fileFind(gsDirDSV, gsGenerPrf..gsToolPrefU.."*.txt") if(tGen and #tGen > 0) then - pnListView:AddLine("V", gsGenerDSV, gsGrossDSV.."*.txt"):SetTooltip(gsDirDSV) end + pnListView:AddLine("V", gsGenerPrf, gsGrossDSV.."*.txt"):SetTooltip(gsDirDSV) end local sLine, bEOF, bAct = "", false, true while(not bEOF) do sLine, bEOF = asmlib.GetStringFile(fD) @@ -902,7 +902,7 @@ if(CLIENT) then local sAct = ((pCur:GetColumnText(1) == "V") and "" or sOff) local sPrf, sPth = pCur:GetColumnText(2), pCur:GetColumnText(3) if(not asmlib.IsBlank(sPth)) then sPth = sDel..sPth end - if(sPrf ~= gsGenerDSV) then fD:Write(sAct..sPrf..sPth.."\n") end + if(sPrf ~= gsGenerPrf) then fD:Write(sAct..sPrf..sPth.."\n") end end; fD:Flush(); fD:Close() end pnListView.OnRowRightClick = function(pnSelf, nIndex, pnLine) @@ -1247,10 +1247,10 @@ if(CLIENT) then pnButton.DoClick = function(pnSelf) asmlib.LogInstance("Click "..asmlib.GetReport(pnSelf:GetText()), sLog..".Button") if(asmlib.GetAsmConvar("exportdb", "BUL")) then - asmlib.ExportCategory(3, nil, gsGenerDSV, true) - asmlib.ExportDSV("PIECES", gsGenerDSV, nil, true) - asmlib.ExportDSV("ADDITIONS", gsGenerDSV, nil, true) - asmlib.ExportDSV("PHYSPROPERTIES", gsGenerDSV, nil, true) + asmlib.ExportCategory(3, nil, gsGenerPrf, true) + asmlib.ExportDSV("PIECES", gsGenerPrf, nil, true) + asmlib.ExportDSV("ADDITIONS", gsGenerPrf, nil, true) + asmlib.ExportDSV("PHYSPROPERTIES", gsGenerPrf, nil, true) asmlib.LogInstance("Export instance", sLog..".Button") asmlib.SetAsmConvar(oPly, "exportdb", 0) else @@ -1985,7 +1985,7 @@ asmlib.NewTable("PHYSPROPERTIES",{ if(CLIENT) then if(fileExists(gsGrossDSV.."CATEGORY.txt", "DATA")) then asmlib.LogInstance("DB CATEGORY from DSV",gtInitLogs) - asmlib.ImportCategory(3, gsGenerDSV) + asmlib.ImportCategory(3, gsGenerPrf) else asmlib.LogInstance("DB CATEGORY from LUA",gtInitLogs) end end @@ -2004,7 +2004,7 @@ end ]]-- if(fileExists(gsGrossDSV.."PIECES.txt", "DATA")) then asmlib.LogInstance("DB PIECES from DSV",gtInitLogs) - asmlib.ImportDSV("PIECES", true, gsGenerDSV) + asmlib.ImportDSV("PIECES", true, gsGenerPrf) else if(gsMoDB == "SQL") then sqlBegin() end asmlib.LogInstance("DB PIECES from LUA",gtInitLogs) @@ -4687,7 +4687,7 @@ end if(fileExists(gsGrossDSV.."PHYSPROPERTIES.txt", "DATA")) then asmlib.LogInstance("DB PHYSPROPERTIES from DSV",gtInitLogs) - asmlib.ImportDSV("PHYSPROPERTIES", true, gsGenerDSV) + asmlib.ImportDSV("PHYSPROPERTIES", true, gsGenerPrf) else --- Valve's physical properties: https://developer.valvesoftware.com/wiki/Material_surface_properties if(gsMoDB == "SQL") then sqlBegin() end asmlib.LogInstance("DB PHYSPROPERTIES from LUA",gtInitLogs) @@ -4796,7 +4796,7 @@ end if(fileExists(gsGrossDSV.."ADDITIONS.txt", "DATA")) then asmlib.LogInstance("DB ADDITIONS from DSV",gtInitLogs) - asmlib.ImportDSV("ADDITIONS", true, gsGenerDSV) + asmlib.ImportDSV("ADDITIONS", true, gsGenerPrf) else if(gsMoDB == "SQL") then sqlBegin() end asmlib.LogInstance("DB ADDITIONS from LUA",gtInitLogs) From 099d65b03b990ab9e39928516000b66dbeceab9e Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 3 Nov 2024 21:09:33 +0200 Subject: [PATCH 069/114] Fixed: DSV manager properly showing generic database Fixed: Executing action OPEN_EXTERNDB status being unchecked Fixed: Frequent pieces retiring more that N when more than N are valid Fixed: Some runtime errors Added: Generic DB file existence checker for the exports Added: DSV synchronizer not handling existent open fail Added: Handle actions status properly for `pcall` Updated: Database synchronization script Updated: Frequently used data contains also request count Rename: FORM_PREFIXDSV > FORM_PREFIXFDB Removed: `iInd` from `GetFrequentPieces` as it is not used --- data/trackassembly/set/trackasmlib_slskip.txt | 1 + .../set/z_autorun_[trackassembly].txt | 2 +- .../set/z_autoset_[trackassembly].txt | 2 +- lua/autorun/trackassembly_init.lua | 25 ++--- lua/autorun/z_autorun_[shinji85_s_rails].lua | 44 ++++----- lua/trackassembly/trackasmlib.lua | 95 ++++++++++++------- .../gmod_tool/stools/trackassembly.lua | 6 +- 7 files changed, 102 insertions(+), 73 deletions(-) diff --git a/data/trackassembly/set/trackasmlib_slskip.txt b/data/trackassembly/set/trackasmlib_slskip.txt index 2308d683..7db9a3fa 100644 --- a/data/trackassembly/set/trackasmlib_slskip.txt +++ b/data/trackassembly/set/trackasmlib_slskip.txt @@ -3,6 +3,7 @@ SetNumSlider ModelToName: Cut ModelToName: Sub BIND_PRESS: +RegisterPOA: Store ModelToName: App DefaultType: Avoided LocatePOA: Missing ID diff --git a/data/trackassembly/set/z_autorun_[trackassembly].txt b/data/trackassembly/set/z_autorun_[trackassembly].txt index 36216363..df9eff38 100644 --- a/data/trackassembly/set/z_autorun_[trackassembly].txt +++ b/data/trackassembly/set/z_autorun_[trackassembly].txt @@ -141,7 +141,7 @@ end local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") -local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") +local gsFormPF = asmlib.GetOpVar("FORM_PREFIXFDB") -- This is the path to your DSV local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. diff --git a/data/trackassembly/set/z_autoset_[trackassembly].txt b/data/trackassembly/set/z_autoset_[trackassembly].txt index ea2e6b28..6178fedc 100644 --- a/data/trackassembly/set/z_autoset_[trackassembly].txt +++ b/data/trackassembly/set/z_autoset_[trackassembly].txt @@ -59,7 +59,7 @@ if(asmlib) then local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") local gsModeDB = asmlib.GetOpVar("MODE_DATABASE") - local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") + local gsFormPF = asmlib.GetOpVar("FORM_PREFIXFDB") -- This is the path to your DSV local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index c0ecf116..2fc0d101 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -863,9 +863,11 @@ if(CLIENT) then if(not fileExists(sNam, "DATA")) then fileWrite(sNam, "") end local fD = fileOpen(sNam, "rb", "DATA"); if(not fD) then pnFrame:Close() asmlib.LogInstance("File error", sLog..".Import"); return nil end - local tGen = fileFind(gsDirDSV, gsGenerPrf..gsToolPrefU.."*.txt") - if(tGen and #tGen > 0) then - pnListView:AddLine("V", gsGenerPrf, gsGrossDSV.."*.txt"):SetTooltip(gsDirDSV) end + local sGen = (gsDirDSV..gsGenerPrf..gsToolPrefU.."*.txt") + local tGen = fileFind(sGen, "DATA"); if(tGen and #tGen > 0) then + pnListView:AddLine("V", gsGenerPrf, sGen):SetTooltip(gsDirDSV) + else local iG = (tGen and #tGen or 0) + asmlib.LogInstance("Generic database: "..asmlib.GetReport(iG, sGen), sLog..".Import") end local sLine, bEOF, bAct = "", false, true while(not bEOF) do sLine, bEOF = asmlib.GetStringFile(fD) @@ -1251,7 +1253,7 @@ if(CLIENT) then asmlib.ExportDSV("PIECES", gsGenerPrf, nil, true) asmlib.ExportDSV("ADDITIONS", gsGenerPrf, nil, true) asmlib.ExportDSV("PHYSPROPERTIES", gsGenerPrf, nil, true) - asmlib.LogInstance("Export instance", sLog..".Button") + asmlib.LogInstance("Export data", sLog..".Button") asmlib.SetAsmConvar(oPly, "exportdb", 0) else local fW = asmlib.GetOpVar("FORM_GITWIKI") @@ -1260,9 +1262,10 @@ if(CLIENT) then end pnButton.DoRightClick = function(pnSelf) if(asmlib.GetAsmConvar("exportdb", "BUL")) then - asmlib.DoAction("OPEN_EXTERNDB") + local bS, vOut = asmlib.DoAction("OPEN_EXTERNDB"); if(not bS) then + asmlib.LogInstance("Open manager:"..vOut, sLog..".Button"); return nil end asmlib.LogInstance("Open manager", sLog..".Button") - smlib.SetAsmConvar(oPly, "exportdb", 0) + asmlib.SetAsmConvar(oPly, "exportdb", 0) else local fW = asmlib.GetOpVar("FORM_GITWIKI") guiOpenURL(fW:format("Additional-features")) @@ -1274,7 +1277,7 @@ if(CLIENT) then local sAbr, sCol = pnComboBox:GetSelected() -- Returns two values sAbr, sCol = tostring(sAbr or ""), tostring(sCol or "") if(not asmlib.UpdateListView(pnListView,frUsed,sCol,sPat)) then - asmlib.LogInstance("Update ListView fail"..asmlib.GetReport(sAbr,sCol,sPat,sLog..".TextEntry")); return nil + asmlib.LogInstance("Update ListView fail"..asmlib.GetReport(sAbr,sCol,sPat), sLog..".TextEntry"); return nil end end pnFrame:SetVisible(true); pnFrame:Center(); pnFrame:MakePopup() @@ -1984,7 +1987,7 @@ asmlib.NewTable("PHYSPROPERTIES",{ --[[ Categories are only needed client side ]]-- if(CLIENT) then if(fileExists(gsGrossDSV.."CATEGORY.txt", "DATA")) then - asmlib.LogInstance("DB CATEGORY from DSV",gtInitLogs) + asmlib.LogInstance("DB CATEGORY from GENERIC",gtInitLogs) asmlib.ImportCategory(3, gsGenerPrf) else asmlib.LogInstance("DB CATEGORY from LUA",gtInitLogs) end end @@ -2003,7 +2006,7 @@ end * Second argument of Categorize() is used to generate track categories for the processed addon ]]-- if(fileExists(gsGrossDSV.."PIECES.txt", "DATA")) then - asmlib.LogInstance("DB PIECES from DSV",gtInitLogs) + asmlib.LogInstance("DB PIECES from GENERIC",gtInitLogs) asmlib.ImportDSV("PIECES", true, gsGenerPrf) else if(gsMoDB == "SQL") then sqlBegin() end @@ -4686,7 +4689,7 @@ else end if(fileExists(gsGrossDSV.."PHYSPROPERTIES.txt", "DATA")) then - asmlib.LogInstance("DB PHYSPROPERTIES from DSV",gtInitLogs) + asmlib.LogInstance("DB PHYSPROPERTIES from GENERIC",gtInitLogs) asmlib.ImportDSV("PHYSPROPERTIES", true, gsGenerPrf) else --- Valve's physical properties: https://developer.valvesoftware.com/wiki/Material_surface_properties if(gsMoDB == "SQL") then sqlBegin() end @@ -4795,7 +4798,7 @@ else --- Valve's physical properties: https://developer.valvesoftware.com/wiki/M end if(fileExists(gsGrossDSV.."ADDITIONS.txt", "DATA")) then - asmlib.LogInstance("DB ADDITIONS from DSV",gtInitLogs) + asmlib.LogInstance("DB ADDITIONS from GENERIC",gtInitLogs) asmlib.ImportDSV("ADDITIONS", true, gsGenerPrf) else if(gsMoDB == "SQL") then sqlBegin() end diff --git a/lua/autorun/z_autorun_[shinji85_s_rails].lua b/lua/autorun/z_autorun_[shinji85_s_rails].lua index 56bcaf39..5e94e35e 100644 --- a/lua/autorun/z_autorun_[shinji85_s_rails].lua +++ b/lua/autorun/z_autorun_[shinji85_s_rails].lua @@ -56,6 +56,28 @@ end -- There is something to error about stop the execution and report it if(not asmlib) then ThrowError("Failed loading the required module!"); return end +-- Store a reference to disable symbol +local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") +local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") +local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") +local gsFormPF = asmlib.GetOpVar("FORM_PREFIXFDB") + +-- This is the path to your DSV +local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. + asmlib.GetOpVar("DIRPATH_DSV").. + gsFormPF:format(myPrefix, gsToolPF.."PIECES") + +--[[ + * This flag is used when the track pieces list needs to be processed. + * It generally represents the locking file persistence flag. It is + * bound to finding a "PIECES" DSV external database for the prefix + * of your addon. You can use it for boolean value deciding whenever + * or not to run certain events. For example you can stop exporting + * your local database every time Gmod loads, but then the user will + * skip the available updates of your addon until he/she deletes the DSVs. +]]-- +local myFlag = file.Exists(myDsv, "DATA") + --[[ * This logic statement is needed for reporting the error * in the console if the process fails. @@ -137,28 +159,6 @@ local function ExportCategory(tCatg) else asmlib.LogInstance("Category export SERVER "..sRep, mySource) end end --- Store a reference to disable symbol -local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") -local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") -local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") -local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") - --- This is the path to your DSV -local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. - asmlib.GetOpVar("DIRPATH_DSV").. - gsFormPF:format(myPrefix, gsToolPF.."PIECES") - ---[[ - * This flag is used when the track pieces list needs to be processed. - * It generally represents the locking file persistence flag. It is - * bound to finding a "PIECES" DSV external database for the prefix - * of your addon. You can use it for boolean value deciding whenever - * or not to run certain events. For example you can stop exporting - * your local database every time Gmod loads, but then the user will - * skip the available updates of your addon until he/she deletes the DSVs. -]]-- -local myFlag = file.Exists(myDsv, "DATA") - -- Tell TA what custom script we just called don't touch it asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}", mySource) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 09f15448..cc0a80d8 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -258,6 +258,18 @@ function IsOther(oEnt) return false end +function IsGenericDB(sSors) + local sSors = tostring(sSors or "") + local sName = GetOpVar("TOOLNAME_PU") + local fGenc = GetOpVar("DBEXP_PREFGEN") + local fDSV = GetOpVar("DIRPATH_BAS") + if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end + local fDSV = fDSV..GetOpVar("DIRPATH_DSV") + if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end + local fForm = GetOpVar("FORM_PREFIXFDB") + return fileExists(fDSV..fForm:format(fGenc, sName..sSors), "DATA") +end + --[[ * Reports the type and actual value for one argument * Reports vararg containing many values concatenated @@ -710,14 +722,14 @@ function InitBase(sName, sPurp) SetOpVar("FORM_INTEGER", "[%d]") SetOpVar("FORM_KEYSTMT","%s(%s)") SetOpVar("FORM_LOGSOURCE","%s.%s(%s)") - SetOpVar("FORM_PREFIXDSV", "%s%s.txt") + SetOpVar("FORM_PREFIXFDB", "%s%s.txt") SetOpVar("FORM_GITWIKI", "https://github.com/dvdvideo1234/TrackAssemblyTool/wiki/%s") SetOpVar("LOG_FILENAME",GetOpVar("DIRPATH_BAS")..GetOpVar("NAME_LIBRARY").."_log.txt") SetOpVar("FORM_SNAPSND", "physics/metal/metal_canister_impact_hard%d.wav") SetOpVar("FORM_NTFGAME", "notification.AddLegacy(\"%s\", NOTIFY_%s, 6)") SetOpVar("FORM_NTFPLAY", "surface.PlaySound(\"ambient/water/drip%d.wav\")") SetOpVar("MODELNAM_FILE","%.mdl") - SetOpVar("DBEXP_PREFGEN", GetOpVar("NAME_LIBRARY").."_") + SetOpVar("DBEXP_PREFGEN", "[generic]_") SetOpVar("VCOMPARE_SPAN", function(u, v) if(u.T ~= v.T) then return u.T < v.T end local uC = (u.C or {}) @@ -1698,7 +1710,7 @@ function UpdateListView(pnListView,frUsed,sCol,sPat) end end end; pnListView:SetVisible(true) - LogInstance("Processed "..GetReport(frUsed.Size)); return true + LogInstance("Processed "..GetReport(frUsed.Size, frUsed.Need)); return true end function GetNodeTypeRoot(pnBase, iRep, sSym) @@ -1846,13 +1858,13 @@ function GetFrequentPieces(iCnt) LogInstance("Missing table definition"); return nil end local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then LogInstance("Missing table cache space"); return nil end - local frUsed = GetOpVar("TABLE_FREQUENT_MODELS") - local iInd, tmNow = 1, Time(); tableEmpty(frUsed); frUsed.Size = 0 + local tmNow, frUsed = Time(), GetOpVar("TABLE_FREQUENT_MODELS") local coMo, coTy = makTab:GetColumnName(1), makTab:GetColumnName(2) local coNm, coSz = makTab:GetColumnName(3), makTab:GetColumnName(4) local tSort = Arrange(tCache, "Used"); if(not tSort) then LogInstance("Sorting table cache failed"); return nil end - for iD = tSort.Size, 1, -1 do -- For every record that is picked + tableEmpty(frUsed); frUsed.Size = 0; frUsed.Need = iCnt + for iD = tSort.Size, (tSort.Size - iCnt + 1), -1 do local oRec = tSort[iD] -- Index arranged record ID if(oRec) then oRec = oRec.Rec -- Jump over to the record if(not oRec.Post) then -- Initialized. Not yet picked @@ -3578,11 +3590,13 @@ function ExportCategory(vEq, tData, sPref, bExp) LogInstance(sHew.."Prefix empty"); return false end if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled"); return true end + if(IsGenericDB("CATEGORY")) then + LogInstance(sHew.." Generic database",sTable); return true end local fName, sFunc = GetOpVar("DIRPATH_BAS"), "ExportCategory" if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") + local fForm, sTool = GetOpVar("FORM_PREFIXFDB"), GetOpVar("TOOLNAME_PU") fName = fName..fForm:format(fPref, sTool.."CATEGORY") local F = fileOpen(fName, "wb", "DATA") if(not F) then LogInstance(sHew.." Open fail: "..fName); return false end @@ -3608,7 +3622,7 @@ function ImportCategory(vEq, sPref, bExp) local tHew = GetOpVar("PATTEM_EXCATHED") local fPref = tostring(sPref or GetInstPref()) local nEq = mathMax(mathFloor(tonumber(vEq) or 0), 0) - local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") + local fForm, sTool = GetOpVar("FORM_PREFIXFDB"), GetOpVar("TOOLNAME_PU") local fName, sHew = GetOpVar("DIRPATH_BAS"), tHew[2]:format(fPref, nEq) fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) fName = fName..fForm:format(fPref, sTool.."CATEGORY") @@ -3674,6 +3688,8 @@ function ExportDSV(sTable, sPref, sDelim, bExp) local sHew = tHew[2]:format(fPref, sTable) if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end + if(IsGenericDB(sTable)) then + LogInstance(sHew.." Generic database",sTable); return true end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return false end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then @@ -3682,7 +3698,7 @@ function ExportDSV(sTable, sPref, sDelim, bExp) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - local fForm = GetOpVar("FORM_PREFIXDSV") + local fForm = GetOpVar("FORM_PREFIXFDB") fName = fName..fForm:format(fPref, defTab.Name) local F = fileOpen(fName, "wb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end @@ -3736,7 +3752,7 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) LogInstance("Table mismatch "..GetReport(sTable)); return false end local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end - local tHew = GetOpVar("PATTEM_EXDSVHED") + local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") local sHew = tHew[2]:format(fPref, sTable) local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return nil end @@ -3746,7 +3762,7 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) LogInstance(sHew.." Missing table command",sTable); return false end local fName = GetOpVar("DIRPATH_BAS") --Switch the import source folder fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) - local fForm, sMoDB = GetOpVar("FORM_PREFIXDSV"), GetOpVar("MODE_DATABASE") + local fForm = GetOpVar("FORM_PREFIXFDB") fName = fName..fForm:format(fPref, defTab.Name) local F = fileOpen(fName, "rb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end @@ -3782,23 +3798,25 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) LogInstance("Table mismatch "..GetReport(sTable)); return false end local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref),sTable); return false end - local tHew = GetOpVar("PATTEM_EXDSVHED") - local sHew = tHew[2]:format(fPref, sTable) + local tHew, sFunc = GetOpVar("PATTEM_EXDSVHED"), "SynchronizeDSV" + local sHew, sMoDB = tHew[2]:format(fPref, sTable), GetOpVar("MODE_DATABASE") if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end + if(IsGenericDB(sTable)) then + LogInstance(sHew.." Generic database",sTable); return true end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return false end local defTab, iD = makTab:GetDefinition(), makTab:GetColumnID("LINEID") - local fName, sDelim = GetOpVar("DIRPATH_BAS"), tostring(sDelim or "\t"):sub(1,1) - if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - fName = fName..GetOpVar("DIRPATH_DSV") - if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - local fForm, sMoDB = GetOpVar("FORM_PREFIXDSV"), GetOpVar("MODE_DATABASE") - local sFunc = "SynchronizeDSV"; fName = fName..fForm:format(fPref, defTab.Name) - local bI, fData = fileExists(fName, "DATA"), {} - if(bI) then + local fDSV, sDelim = GetOpVar("DIRPATH_BAS"), tostring(sDelim or "\t"):sub(1,1) + if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end + local fDSV = fDSV..GetOpVar("DIRPATH_DSV") + if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end + local fForm, fData = GetOpVar("FORM_PREFIXFDB"), {} + local fName = fDSV..fForm:format(fPref, defTab.Name) + if(fileExists(fName, "DATA")) then local sLine, isEOF = "", false - local I = fileOpen(fName, "rb", "DATA") + local I = fileOpen(fName, "rb", "DATA"); if(not I) then + LogInstance(sHew.." Open fail: "..fName,sTable); return false end while(not isEOF) do sLine, isEOF = GetStringFile(I) if((not IsBlank(sLine)) and (not IsDisable(sLine))) then local tLine = sDelim:Explode(sLine) @@ -3882,24 +3900,29 @@ function TranslateDSV(sTable, sPref, sDelim) LogInstance("Table mismatch "..GetReport(sTable)); return false end local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end - local tHew = GetOpVar("PATTEM_EXDSVHED") - local sHew = tHew[2]:format(fPref, sTable) + local tHew = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("DBEXP_PREFGEN") + local sHew, sMoDB = tHew[2]:format(fPref, sTable), GetOpVar("MODE_DATABASE") if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end + if(IsGenericDB(sTable)) then + LogInstance(sHew.." Generic database",sTable); return true end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return false end local defTab, sFunc = makTab:GetDefinition(), "TranslateDSV" - local sNdsv, sNins = GetOpVar("DIRPATH_BAS"), GetOpVar("DIRPATH_BAS") - if(not fileExists(sNins,"DATA")) then fileCreateDir(sNins) end - sNdsv, sNins = sNdsv..GetOpVar("DIRPATH_DSV"), sNins..GetOpVar("DIRPATH_EXP") - if(not fileExists(sNins,"DATA")) then fileCreateDir(sNins) end - local fForm, sMoDB = GetOpVar("FORM_PREFIXDSV"), GetOpVar("MODE_DATABASE") - sNdsv, sNins = sNdsv..fForm:format(fPref, defTab.Name), sNins..fForm:format(fPref, defTab.Name) + local fBAS = GetOpVar("DIRPATH_BAS") + if(not fileExists(fBAS,"DATA")) then fileCreateDir(fBAS) end + local fDSV = fBAS..GetOpVar("DIRPATH_DSV") + if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end + local fEXP = fBAS..GetOpVar("DIRPATH_EXP") + if(not fileExists(fEXP,"DATA")) then fileCreateDir(fDSV) end + local fForm = GetOpVar("FORM_PREFIXFDB") + local sEXP = fEXP..fForm:format("[tr]"..fPref, defTab.Name) + local sDSV = fDSV..fForm:format(fPref, defTab.Name) local sDelim = tostring(sDelim or "\t"):sub(1,1) - local D = fileOpen(sNdsv, "rb", "DATA"); if(not D) then - LogInstance(sHew.." Open fail: "..sNdsv,sTable); return false end - local I = fileOpen(sNins, "wb", "DATA"); if(not I) then - LogInstance(sHew.." Open fail: "..sNins,sTable); return false end + local D = fileOpen(sDSV, "rb", "DATA"); if(not D) then + LogInstance(sHew.." Open fail: "..sDSV,sTable); return false end + local I = fileOpen(sEXP, "wb", "DATA"); if(not I) then + LogInstance(sHew.." Open fail: "..sEXP,sTable); return false end I:Write("# "..sFunc..":"..sHew.." "..GetDateTime().." [ "..sMoDB.." ]\n") I:Write("# "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") local sLine, isEOF = "", false @@ -3990,7 +4013,7 @@ function ProcessDSV(sDelim) local F = fileOpen(fName, "rb" ,"DATA"); if(not F) then LogInstance("Open fail: "..GetReport(fName)); return false end local sLine, isEOF, sGen = "", false, GetOpVar("DBEXP_PREFGEN") - local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXDSV") + local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXFDB") local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} local sDv = sBas..GetOpVar("DIRPATH_DSV") while(not isEOF) do sLine, isEOF = GetStringFile(F) @@ -4305,7 +4328,7 @@ function ExportTypeDSV(sType, sDelim) if(not fileExists(fDir,"DATA")) then fileCreateDir(fDir) end local fDir = fDir..GetOpVar("DIRPATH_EXP") if(not fileExists(fDir,"DATA")) then fileCreateDir(fDir) end - local fForm = GetOpVar("FORM_PREFIXDSV") + local fForm = GetOpVar("FORM_PREFIXFDB") local fName = fDir..fForm:format(fPref, defP.Name) local P = fileOpen(fName, "wb", "DATA"); if(not P) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 03fc3f24..238e3412 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2487,7 +2487,8 @@ if(CLIENT) then asmlib.LogInstance("Registered as "..asmlib.GetReport(CPanel.Name), sLog) end - asmlib.DoAction("TWEAK_PANEL", "Utilities", "User", setupUserSettings) + local bS, vOut = asmlib.DoAction("TWEAK_PANEL", "Utilities", "User", setupUserSettings) + if(not bS) then asmlib.LogInstance("User create: "..vOut, sLog) end -- Enter `spawnmenu_reload` in the console to reload the panel local function setupAdminSettings(CPanel) @@ -2654,5 +2655,6 @@ if(CLIENT) then asmlib.LogInstance("Registered as "..asmlib.GetReport(CPanel.Name), sLog) end - asmlib.DoAction("TWEAK_PANEL", "Utilities", "Admin", setupAdminSettings) + local bS, vOut = asmlib.DoAction("TWEAK_PANEL", "Utilities", "Admin", setupAdminSettings) + if(not bS) then asmlib.LogInstance("Admin create: "..vOut, sLog) end end From ce9f634cb4d6ce45cd773c98ef21ec9103277d3e Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Mon, 4 Nov 2024 08:37:16 +0200 Subject: [PATCH 070/114] Fixed: General sorting when values are missing. Nil is less than everything Optimized: Category sorting for nil/string --- lua/trackassembly/trackasmlib.lua | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index cc0a80d8..bd943a25 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -736,11 +736,9 @@ function InitBase(sName, sPurp) local vC = (v.C or {}) local uM, vM = #uC, #vC for i = 1, mathMax(uM, vM) do - local uS = tostring(uC[i] or "") - local vS = tostring(vC[i] or "") - if(uS ~= vS) then - if(uS == "") then return false end - if(vS == "") then return true end + if(uS ~= vS) then -- No category must fall behind + if(vS == nil or vS == "") then return true end + if(uS == nil or uS == "") then return false end return uS < vS end end @@ -752,7 +750,11 @@ function InitBase(sName, sPurp) local iR = c[iD] local uR, vR = u.Rec, v.Rec local uV, vV = uR[iR], vR[iR] - if(uV ~= vV) then return uV < vV end + if(uV ~= vV) then -- Nil is considered less + if(uV == nil or uV == "") then return true end + if(vV == nil or vV == "") then return false end + return uV < vV + end end; return false; end) SetOpVar("VCOMPARE_SKEY", function(u, v) return (u.Key < v.Key) end) SetOpVar("VCOMPARE_SREC", function(u, v) return (u.Rec < v.Rec) end) From 68641ac459e4b95b24beba89a5f2c6619aecc86b Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Thu, 7 Nov 2024 20:46:23 +0200 Subject: [PATCH 071/114] Fixed: Equalize export column order for SQL/LUA mode --- lua/autorun/trackassembly_init.lua | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 2fc0d101..d17c370a 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -1784,7 +1784,7 @@ asmlib.NewTable("PIECES",{ end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() - local tSort = asmlib.Arrange(tCache, "Type", "Slot") + local tSort = asmlib.Arrange(tCache, "Type", "Name", "Slot") if(not tSort) then oFile:Flush(); oFile:Close() asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end local noSQL = asmlib.GetOpVar("MISS_NOSQL") @@ -1890,16 +1890,17 @@ asmlib.NewTable("ADDITIONS",{ end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() - local tData = asmlib.Arrange(tCache) - for iRow = 1, tData.Size do - local tRow = tData[iRow] + local tSort = asmlib.Arrange(tCache, "Slot") + for iRow = 1, tSort.Size do + local tRow = tSort[iRow] local sKey, tRec = tRow.Key, tRow.Rec local sData = defTab.Name..sDelim..sKey - for iRec = 1, #tRec do local tData = tRec[iRec]; oFile:Write(sData) + for iRec = 1, #tRec do + local vRec = tRec[iRec]; oFile:Write(sData) for iID = 2, defTab.Size do local sC = makTab:GetColumnName(iID); if(not sC) then asmlib.LogInstance("Cannot index "..asmlib.GetReport(iID,sKey),vSrc); return false end - local vData = tData[sC]; if(not sC) then + local vData = vRec[sC]; if(not sC) then asmlib.LogInstance("Cannot extract "..asmlib.GetReport(iID,sKey),vSrc); return false end local vM = makTab:Match(vData,iID,true,"\""); if(not asmlib.IsHere(vM)) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(iID,vData)); return false From cfb614808aa4cb0210829ffcfab8ecebc5abb1d2 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 8 Nov 2024 18:53:33 +0200 Subject: [PATCH 072/114] Fixed: Failed routine `ExportTypeDSV` cannot index files P/A Rename: `ExportAR` to `ExportContentsRun` Updated: Frequent pieces now use indices for (model,type,name,act) Updated: Frequent pieces is searched by internal column ID (1,2,3,4) Updated: `ExportTypeRun` now uses proper indexed ordering Updated: `ExportContentsRun` routine request being run trough protected call Added: LUA mode routine for `ExportTypeRun` populating pieces table --- lua/autorun/trackassembly_init.lua | 65 +++++++++++++++----- lua/trackassembly/trackasmlib.lua | 99 +++++++++++------------------- 2 files changed, 86 insertions(+), 78 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index d17c370a..e80bc1b2 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -1102,10 +1102,10 @@ if(CLIENT) then pnComboBox:SetName(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb")) pnComboBox:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol")) pnComboBox:SetValue(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb1"), makTab:GetColumnName(1), false, asmlib.ToIcon("pn_srchcol_lb1")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb2"), makTab:GetColumnName(2), false, asmlib.ToIcon("pn_srchcol_lb2")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb3"), makTab:GetColumnName(3), false, asmlib.ToIcon("pn_srchcol_lb3")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb4"), makTab:GetColumnName(4), false, asmlib.ToIcon("pn_srchcol_lb4")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb1"), 1, false, asmlib.ToIcon("pn_srchcol_lb1")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb2"), 2, false, asmlib.ToIcon("pn_srchcol_lb2")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb3"), 3, false, asmlib.ToIcon("pn_srchcol_lb3")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb4"), 4, false, asmlib.ToIcon("pn_srchcol_lb4")) pnComboBox.OnSelect = function(pnSelf, nInd, sVal, anyData) asmlib.LogInstance("Selected "..asmlib.GetReport(nInd,sVal,anyData),sLog..".ComboBox") pnSelf:SetValue(sVal) @@ -1273,11 +1273,11 @@ if(CLIENT) then end -- Leave the TextEntry here so it can access and update the local ListView reference pnTextEntry.OnEnter = function(pnSelf) - local sPat = tostring(pnSelf:GetValue() or "") - local sAbr, sCol = pnComboBox:GetSelected() -- Returns two values - sAbr, sCol = tostring(sAbr or ""), tostring(sCol or "") - if(not asmlib.UpdateListView(pnListView,frUsed,sCol,sPat)) then - asmlib.LogInstance("Update ListView fail"..asmlib.GetReport(sAbr,sCol,sPat), sLog..".TextEntry"); return nil + local sPa = tostring(pnSelf:GetValue() or "") + local sAbr, nID = pnComboBox:GetSelected() -- Returns two values + sAbr, nID = tostring(sAbr or ""), (tonumber(nID) or 0) + if(not asmlib.UpdateListView(pnListView, frUsed, nID, sPa)) then + asmlib.LogInstance("Update ListView fail"..asmlib.GetReport(sAbr,nID,sPa), sLog..".TextEntry"); return nil end end pnFrame:SetVisible(true); pnFrame:Center(); pnFrame:MakePopup() @@ -1741,7 +1741,8 @@ asmlib.NewTable("PIECES",{ Query = { Record = {"%s","%s","%s","%d","%s","%s","%s","%s"}, ExportDSV = {2,3,1,4}, - ExportTypeDSV = {3,1,4} + ExportTypeDSV = {3,1,4}, + ExportTypeRun = {3,1,4} }, Trigs = { Record = function(arLine, vSrc) @@ -1811,7 +1812,7 @@ asmlib.NewTable("PIECES",{ end, ExportTypeDSV = function(fP, makP, PCache, fA, makA, ACache, fPref, sDelim, vSrc) local tSort = asmlib.Arrange(PCache, "Name", "Slot") - if(not tSort) then P:Flush(); P:Close(); A:Flush(); A:Close() + if(not tSort) then fP:Flush(); fP:Close(); fA:Flush(); fA:Close() asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end local defP, defA = makP:GetDefinition(), makA:GetDefinition() local noSQL = asmlib.GetOpVar("MISS_NOSQL") @@ -1850,7 +1851,43 @@ asmlib.NewTable("PIECES",{ end end; return true end, - ExportAR = function(aRow) aRow[2], aRow[4] = "myType", "gsSymOff" end + ExportTypeRun = function(fE, fS, makP, PCache, qPieces, vSrc) + local coMo, coTy = makP:GetColumnName(1), makP:GetColumnName(2) + local coNm, coLn = makP:GetColumnName(3), makP:GetColumnName(4) + local coP , coO = makP:GetColumnName(5), makP:GetColumnName(6) + local coA , coC = makP:GetColumnName(7), makP:GetColumnName(8) + local sClass, iCnt = asmlib.GetOpVar("ENTITY_DEFCLASS"), 0 + for mod, rec in pairs(PCache) do + if(rec.Type == sType) then + local iID, tOffs = 1, rec.Offs -- Start from the first point + local rPOA = tOffs[iID]; if(not asmlib.IsHere(rPOA)) then + asmlib.LogInstance("Missing point ID "..asmlib.GetReport(iID, rec.Slot),vSrc) + fE:Flush(); fE:Close(); fS:Close(); return false + end + for iID = 1, rec.Size do + iCnt = (iCnt + 1); qPieces[iCnt] = {} -- Allocate row memory + local qRow = qPieces[iCnt]; rPOA = tOffs[iID] + local sP, sO, sA = rPOA.P:Export(rPOA.O), rPOA.O:Export(), rPOA.A:Export() + local sC = (asmlib.IsHere(rec.Unit) and tostring(rec.Unit) or noSQL) + sC = ((sC == sClass) and noSQL or sC) -- Export default class as noSQL + qRow[coMo] = rec.Slot + qRow[coTy] = rec.Type + qRow[coNm] = rec.Name + qRow[coLn] = iID + qRow[coP ] = sP; qRow[coO ] = sO + qRow[coA ] = sA; qRow[coC ] = sC + end + end + end -- Must be the same format as returned from SQL + local tSort = asmlib.Arrange(qPieces, coNm, coMo, coLn) + if(not tSort) then + LogInstance("Sort cache mismatch",vSrc) + fE:Flush(); fE:Close(); fS:Close(); return false + end; tableEmpty(qPieces) + for iD = 1, tSort.Size do qPieces[iD] = tSort[iD].Rec end + return true + end, + ExportContentsRun = function(aRow) aRow[2], aRow[4] = "myType", "gsSymOff" end }, [1] = {"MODEL" , "TEXT" , "LOW", "QMK"}, [2] = {"TYPE" , "TEXT" , nil , "QMK"}, @@ -1909,7 +1946,7 @@ asmlib.NewTable("ADDITIONS",{ end end; return true end, - ExportAR = function(aRow) aRow[4] = "gsSymOff" end + ExportContentsRun = function(aRow) aRow[4] = "gsSymOff" end }, [1] = {"MODELBASE", "TEXT" , "LOW", "QMK"}, [2] = {"MODELADD" , "TEXT" , "LOW", "QMK"}, @@ -1976,7 +2013,7 @@ asmlib.NewTable("PHYSPROPERTIES",{ end end; return true end, - ExportAR = function(aRow) aRow[1], aRow[2] = "myType", "gsSymOff" end + ExportContentsRun = function(aRow) aRow[1], aRow[2] = "myType", "gsSymOff" end }, [1] = {"TYPE" , "TEXT" , nil , "QMK"}, [2] = {"LINEID", "INTEGER", "FLR", nil }, diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index bd943a25..168f6eb3 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1671,16 +1671,16 @@ end --[[ * Updates a VGUI pnListView with a search preformed in the already generated - * frequently used pieces "frUsed" for the pattern "sPat" given by the user + * frequently used pieces "frUsed" for the pattern "sPa" given by the user * and a column name selected `sCol`. * On success populates `pnListView` with the search preformed * On fail a parameter is not valid or missing and returns non-success * pnListView > The panel which must be updated * frUsed > The list of the frequently used tracks - * sCol > The name of the column it preforms search by - * sPat > Search pattern to preform the search with + * nID > The index of the column it preforms search by + * sPa > Search pattern to preform the search with ]] -function UpdateListView(pnListView,frUsed,sCol,sPat) +function UpdateListView(pnListView,frUsed,nID,sPa) if(not (IsHere(frUsed) and IsHere(frUsed[1]))) then LogInstance("Missing data"); return false end if(not IsHere(pnListView)) then @@ -1690,24 +1690,21 @@ function UpdateListView(pnListView,frUsed,sCol,sPat) local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then LogInstance("Missing table builder"); return nil end pnListView:SetVisible(false); pnListView:Clear() - local sMo, sTy = makTab:GetColumnName(1), makTab:GetColumnName(2) - local sNm, sAc = makTab:GetColumnName(3), makTab:GetColumnName(4) - local sCo, sPa = tostring(sCol or ""), tostring(sPat or "") + local nID, sPa = (tonumber(nID) or 0), tostring(sPa or "") for iCnt = 1, frUsed.Size do local tInfo = frUsed[iCnt]; if(not IsHere(tInfo)) then LogInstance("Missing data on index "..GetReport(iCnt)); return false end - local nUsed = mathRound(tInfo.Time,3) - local sModel, sType = tInfo.Data[sMo], tInfo.Data[sTy] - local sName , nAct = tInfo.Data[sNm], tInfo.Data[sAc] + local nUsed = mathRound(tInfo.Time, 3) + local sModel, sType, sName, nAct = unpack(tInfo.Data) if(IsBlank(sPa)) then - local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel) - if(not IsValid(pnLine)) then LogInstance("Line invalid "..GetReport(iCnt)); return false end + local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel); if(not IsValid(pnLine)) then + LogInstance("Line invalid "..GetReport(iCnt)); return false end pnLine:SetTooltip(sModel) else - local sDa = tostring(frUsed[iCnt].Data[sCo] or "") + local sDa = tostring(frUsed[iCnt].Data[nID] or "") if(sDa:find(sPa)) then - local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel) - if(not IsValid(pnLine)) then LogInstance("Line invalid "..GetReport(iCnt, sDa, sPa, sCo)); return false end + local pnLine = pnListView:AddLine(nUsed,nAct,sType,sName,sModel); if(not IsValid(pnLine)) then + LogInstance("Line invalid "..GetReport(iCnt,sDa,sPa,nID)); return false end pnLine:SetTooltip(sModel) end end @@ -1861,8 +1858,6 @@ function GetFrequentPieces(iCnt) local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then LogInstance("Missing table cache space"); return nil end local tmNow, frUsed = Time(), GetOpVar("TABLE_FREQUENT_MODELS") - local coMo, coTy = makTab:GetColumnName(1), makTab:GetColumnName(2) - local coNm, coSz = makTab:GetColumnName(3), makTab:GetColumnName(4) local tSort = Arrange(tCache, "Used"); if(not tSort) then LogInstance("Sorting table cache failed"); return nil end tableEmpty(frUsed); frUsed.Size = 0; frUsed.Need = iCnt @@ -1871,8 +1866,7 @@ function GetFrequentPieces(iCnt) if(oRec) then oRec = oRec.Rec -- Jump over to the record if(not oRec.Post) then -- Initialized. Not yet picked local nT = (tmNow - oRec.Used) -- Time to display - local tD = {[coMo] = oRec.Slot, [coTy] = oRec.Type, - [coNm] = oRec.Name, [coSz] = oRec.Size} + local tD = {oRec.Slot, oRec.Type, oRec.Name, oRec.Size} frUsed.Size = (frUsed.Size + 1) -- Increment size tableInsert(frUsed, {Time = nT, Data = tD}) end -- Time and panel data has been stored and passed @@ -4116,7 +4110,7 @@ function SetAdditionsRun(sModel, makTab, qList) for iD = 1, #qData do qList[iE + iD] = qData[iD] end end -function ExportPiecesRun(fF,qData,sName,sInd,qList) +function ExportContentsRun(fF,qData,sName,sInd,qList) local dbNull = GetOpVar("MISS_NOSQL") local keyBld, makAdd = GetOpVar("KEYQ_BUILDER") local makTab = qData[keyBld]; if(not IsHere(makTab)) then @@ -4125,7 +4119,7 @@ function ExportPiecesRun(fF,qData,sName,sInd,qList) LogInstance("Missing table definition"); return end local mgrTab = defTab.Cache; if(not IsHere(mgrTab)) then LogInstance("Cache manager missing"); return end - if(not IsHere(mgrTab.ExportAR)) then + local sFunc = "ExportContentsRun"; if(not IsHere(mgrTab[sFunc])) then LogInstance("Missing data handler"); return end if(IsHere(qList) and istable(qList)) then if(IsHere(qList[keyBld])) then makAdd = qList[keyBld] else @@ -4137,7 +4131,7 @@ function ExportPiecesRun(fF,qData,sName,sInd,qList) if(istable(qData) and IsHere(qData[1])) then fF:Write("local "..sName.." = {\n") local pkID, sInd, fRow = 1, " ", true - local idxID = makTab:GetColumnID("LINEID") + local ixID = makTab:GetColumnID("LINEID") local coMo = makTab:GetColumnName(1) for iD = 1, #qData do local qRow = qData[iD] @@ -4152,13 +4146,15 @@ function ExportPiecesRun(fF,qData,sName,sInd,qList) fF:Write(sInd:rep(1).."["..aRow[pkID].."] = {\n") SetAdditionsRun(mMod, makAdd, qList) else - if(aRow[idxID] == 1) then fF:Seek(fF:Tell() - 2) + if(aRow[ixID] == 1) then fF:Seek(fF:Tell() - 2) fF:Write("\n"..sInd:rep(1).."},\n"..sInd:rep(1).."["..aRow[pkID].."] = {\n") SetAdditionsRun(mMod, makAdd, qList) end end - mgrTab.ExportAR(aRow); tableRemove(aRow, 1) - fF:Write(sInd:rep(2).."{"..tableConcat(aRow, ", ").."},\n") + local bS, sR = pcall(mgrTab[sFunc], aRow); + if(not bS) then LogInstance("Routine error "..GetReport(iD,mMod)..": "..sR); return end + if(not sR) then LogInstance("Internal error "..GetReport(iD,mMod)); return end + tableRemove(aRow, 1); fF:Write(sInd:rep(2).."{"..tableConcat(aRow, ", ").."},\n") end fF:Seek(fF:Tell() - 2) fF:Write("\n"..sInd:rep(1).."}\n") @@ -4208,7 +4204,7 @@ function ExportTypeRun(sType) local qType = makP:Match(sType, 2, true) local qIndx = qsKey:format(sFunc, "PIECES") local Q = makP:Get(qIndx, qType); if(not IsHere(Q)) then - Q = makP:Select():Where({2,"%s"}):Order(1,4):Store(qIndx):Get(qIndx, qType) end + Q = makP:Select():Where({2,"%s"}):Order(defP.Query[sFunc]):Store(qIndx):Get(qIndx, qType) end if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,qType)) fE:Flush(); fE:Close(); fS:Close(); return @@ -4222,41 +4218,16 @@ function ExportTypeRun(sType) if(not IsHere(qPieces)) then qPieces = {} end end elseif(sMoDB == "LUA") then - local iCnt = 0; qPieces = {} local tCache = libCache[defP.Name] - local coMo, coTy = makP:GetColumnName(1), makP:GetColumnName(2) - local coNm, coLn = makP:GetColumnName(3), makP:GetColumnName(4) - local coP , coO = makP:GetColumnName(5), makP:GetColumnName(6) - local coA , coC = makP:GetColumnName(7), makP:GetColumnName(8) - local sClass = GetOpVar("ENTITY_DEFCLASS") - for mod, rec in pairs(tCache) do - if(rec.Type == sType) then - local iID, tOffs = 1, rec.Offs -- Start from the first point - local rPOA = tOffs[iID]; if(not IsHere(rPOA)) then - LogInstance("Missing point ID "..GetReport(iID, rec.Slot)) - fE:Flush(); fE:Close(); fS:Close(); return - end - for iID = 1, rec.Size do - iCnt = (iCnt + 1); qPieces[iCnt] = {} -- Allocate row memory - local qRow = qPieces[iCnt]; rPOA = tOffs[iID] - local sP, sO, sA = rPOA.P:Export(rPOA.O), rPOA.O:Export(), rPOA.A:Export() - local sC = (IsHere(rec.Unit) and tostring(rec.Unit) or noSQL) - sC = ((sC == sClass) and noSQL or sC) -- Export default class as noSQL - qRow[coMo] = rec.Slot - qRow[coTy] = rec.Type - qRow[coNm] = rec.Name - qRow[coLn] = iID - qRow[coP ] = sP; qRow[coO ] = sO - qRow[coA ] = sA; qRow[coC ] = sC - end - end - end - local tSort = Arrange(qPieces, coMo, coLn) - if(not tSort) then - LogInstance("Sort cache mismatch") - fE:Flush(); fE:Close(); fS:Close(); return - end; tableEmpty(qPieces) - for iD = 1, tSort.Size do qPieces[iD] = tSort[iD].Rec end + if(not IsHere(tCache)) then fE:Flush(); fE:Close(); fS:Close() + LogInstance("Cache missing",defP.Nick) ; return false end + local fsLog = GetOpVar("FORM_LOGSOURCE"); qPieces = {} + local ssLog = "*"..fsLog:format(defP.Nick,sFunc,"%s") + local bS, sR = pcall(fE, fS, makP, tCache, qPieces, ssLog:format("Cache")) + if(not bS) then fE:Flush(); fE:Close(); fS:Close() + LogInstance("Cache manager fail for "..sR,defP.Nick) ; return end + if(not sR) then fE:Flush(); fE:Close(); fS:Close() + LogInstance("Cache routine fail",defP.Nick) ; return end else LogInstance("Unsupported mode "..GetReport(sMoDB)) fE:Flush(); fE:Close(); fS:Close(); return @@ -4293,9 +4264,9 @@ function ExportTypeRun(sType) fE:Write("asmlib.WorkshopID(myAddon)\n") end elseif(sLine:find(patPiece)) then isSkip = true - ExportPiecesRun(fE, qPieces, "myPieces", sInd, qAdditions) + ExportContentsRun(fE, qPieces, "myPieces", sInd, qAdditions) elseif(sLine:find(patAddit)) then isSkip = true - ExportPiecesRun(fE, qAdditions, "myAdditions", sInd) + ExportContentsRun(fE, qAdditions, "myAdditions", sInd) else if(isSkip and IsBlank(sLine:Trim())) then isSkip = false end end @@ -4343,8 +4314,8 @@ function ExportTypeDSV(sType, sDelim) local sMoDB = GetOpVar("MODE_DATABASE") -- Read database mode P:Write("#1 "..sFunc..":("..fPref.."@"..defP.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") P:Write("#2 "..defP.Nick..":("..makP:GetColumnList(sDelim)..")\n") - A:Write("#1 "..sFunc..":("..fPref.."@"..defA.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") - A:Write("#2 "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") + A:Write("#3 "..sFunc..":("..fPref.."@"..defA.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") + A:Write("#4 "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") local qType = makP:Match(sType, 2, true) From b06f29232001d65e64b52db9f232fb10a845806b Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 8 Nov 2024 19:28:46 +0200 Subject: [PATCH 073/114] Updated: Routine pieces translation in one place Added: Routine pieces can also export content --- lua/autorun/trackassembly_init.lua | 29 ++++++++++++++++++- .../localization/en/trackassembly.properties | 17 +++++------ 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index e80bc1b2..4ac17bd3 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -481,6 +481,9 @@ if(CLIENT) then asmlib.ToIcon("pn_routine_cmws" , "cart" ) asmlib.ToIcon("pn_routine_cmwsid", "key_go" ) asmlib.ToIcon("pn_routine_cmwsop", "world" ) + asmlib.ToIcon("pn_routine_cmex" , "transmit" ) + asmlib.ToIcon("pn_routine_cmexdv", "database_table" ) + asmlib.ToIcon("pn_routine_cmexru", "script_code" ) asmlib.ToIcon("pn_externdb_cmcp" , "page_copy" ) asmlib.ToIcon("pn_externdb_cmcp1", "database_go" ) asmlib.ToIcon("pn_externdb_cmcp2", "database_lightning") @@ -1215,7 +1218,9 @@ if(CLIENT) then local sI = "pn_routine_cm" local sT = "tool.trackassembly."..sI local mX, mY = inputGetCursorPos() - local sID = asmlib.WorkshopID(pnLine:GetColumnText(3)) + local sTyp = pnLine:GetColumnText(3) + local bEx = asmlib.GetAsmConvar("exportdb", "BUL") + local sID = asmlib.WorkshopID(sTyp) local pMenu = vguiCreate("DMenu") if(not IsValid(pMenu)) then pnFrame:Close() asmlib.LogInstance("Menu invalid",sLog..".ListView"); return nil end @@ -1232,6 +1237,7 @@ if(CLIENT) then function() asmlib.SetListViewBoxClipboard(pnSelf, mX, mY) end):SetImage(asmlib.ToIcon(sI.."cpbv")) pIn:AddOption(languageGetPhrase(sT.."cprw"), function() asmlib.SetListViewRowClipboard(pnSelf) end):SetImage(asmlib.ToIcon(sI.."cprw")) + -- Handle workshop specific options if(sID) then local sUR = asmlib.GetOpVar("FORM_URLADDON") local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."ws")) @@ -1241,6 +1247,27 @@ if(CLIENT) then pIn:AddOption(languageGetPhrase(sT.."wsid"), function() SetClipboardText(sID) end):SetIcon(asmlib.ToIcon(sI.."wsid")) pIn:AddOption(languageGetPhrase(sT.."wsop"), function() guiOpenURL(sUR:format(sID)) end):SetIcon(asmlib.ToIcon(sI.."wsop")) end + -- Export database contents + if(bEx) then + local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."ex")) + if(not (IsValid(pIn) and IsValid(pOp))) then + asmlib.LogInstance("Base export invalid"); return nil end + pOp:SetIcon(asmlib.ToIcon(sI.."ex")) + pIn:AddOption(languageGetPhrase(sT.."exdv"), + function() + local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then + asmlib.LogInstance("Player invalid"); return nil end + asmlib.LogInstance("Export "..asmlib.GetReport(oPly:Nick(), sTyp)) + asmlib.ExportTypeDSV(sTyp); asmlib.SetAsmConvar(oPly, "exportdb", 0) + end):SetIcon(asmlib.ToIcon(sI.."exdv")) + pIn:AddOption(languageGetPhrase(sT.."exru"), + function() + local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then + asmlib.LogInstance("Player invalid"); return nil end + asmlib.LogInstance("Export "..asmlib.GetReport(oPly:Nick(), sTyp)) + asmlib.ExportTypeRun(sTyp); asmlib.SetAsmConvar(oPly, "exportdb", 0) + end):SetIcon(asmlib.ToIcon(sI.."exru")) + end pMenu:Open() end if(not asmlib.UpdateListView(pnListView,frUsed)) then diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index c416b3ca..34e048f6 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -119,6 +119,11 @@ tool.trackassembly.pn_export=Click to export the client database as a file tool.trackassembly.pn_export_lb=Export DB tool.trackassembly.pn_routine=The list of your frequently used track pieces tool.trackassembly.pn_routine_hd=Frequent pieces by\: +tool.trackassembly.pn_routine_lb=Routine items +tool.trackassembly.pn_routine_lb1=Used +tool.trackassembly.pn_routine_lb2=End +tool.trackassembly.pn_routine_lb3=Type +tool.trackassembly.pn_routine_lb4=Name tool.trackassembly.pn_routine_cmcp=Copy tool.trackassembly.pn_routine_cmcpmd=Row model tool.trackassembly.pn_routine_cmcpbv=Box value @@ -126,6 +131,9 @@ tool.trackassembly.pn_routine_cmcprw=Entire row tool.trackassembly.pn_routine_cmws=Workshop tool.trackassembly.pn_routine_cmwsid=Copy WID tool.trackassembly.pn_routine_cmwsop=Open page +tool.trackassembly.pn_routine_cmex=Export +tool.trackassembly.pn_routine_cmexdv=Extern +tool.trackassembly.pn_routine_cmexru=Autorun tool.trackassembly.pn_externdb_hd=External databases by\: tool.trackassembly.pn_externdb_ttt=Current modified configuration value\: tool.trackassembly.pn_externdb_bti=Import @@ -167,15 +175,6 @@ tool.trackassembly.pn_srchcol_lb1=Model tool.trackassembly.pn_srchcol_lb2=Type tool.trackassembly.pn_srchcol_lb3=Name tool.trackassembly.pn_srchcol_lb4=End -tool.trackassembly.pn_routine_lb=Routine items -tool.trackassembly.pn_routine_lb1=Used -tool.trackassembly.pn_routine_lb2=End -tool.trackassembly.pn_routine_lb3=Type -tool.trackassembly.pn_routine_lb4=Name -tool.trackassembly.pn_routine_cmcp=Copy -tool.trackassembly.pn_routine_cmcpmd=Row model -tool.trackassembly.pn_routine_cmcpbv=Box value -tool.trackassembly.pn_routine_cmcprw=Entire row tool.trackassembly.pn_display_lb=Piece display tool.trackassembly.pn_pattern_lb=Write pattern tool.trackassembly.treemenu_cpy=Copy From 0898eb6792a69e35d9f67964081495a4dcf3402b Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sat, 9 Nov 2024 12:10:05 +0200 Subject: [PATCH 074/114] Fixed: Export auto-run failing due to the new control statement Fixed: DSV auto-run loading due to `FORM_PREFIXDSV` being changed Fixed: Some table routines runtime errors `ExportContentsRun` Fixed: Routine `ExportTypeRun` failed to export contents in lua mode Updated: Exported content include purpose in the file name Updated: Rearrange auto-run export file --- .../set/z_autorun_[trackassembly].txt | 48 ++++---- .../set/z_autoset_[trackassembly].txt | 2 +- lua/autorun/trackassembly_init.lua | 24 ++-- lua/autorun/z_autorun_[shinji85_s_rails].lua | 30 +++-- lua/trackassembly/trackasmlib.lua | 106 ++++++++++-------- 5 files changed, 109 insertions(+), 101 deletions(-) diff --git a/data/trackassembly/set/z_autorun_[trackassembly].txt b/data/trackassembly/set/z_autorun_[trackassembly].txt index df9eff38..6c55eb8a 100644 --- a/data/trackassembly/set/z_autorun_[trackassembly].txt +++ b/data/trackassembly/set/z_autorun_[trackassembly].txt @@ -40,6 +40,29 @@ local myScript = tostring(debug.getinfo(1).source or "N/A") myScript = "@"..myScript:gsub("^%W+", ""):gsub("\\","/") mySource = tostring(mySource or ""):gsub("^%W+", "") mySource = (asmlib.IsBlank(mySource) and "DSV" or mySource) + +-- Store a reference to disable symbol +local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") +local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") +local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") +local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") + +-- This is the path to your DSV +local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. + asmlib.GetOpVar("DIRPATH_DSV").. + gsFormPF:format(myPrefix, gsToolPF.."PIECES") + +--[[ + * This flag is used when the track pieces list needs to be processed. + * It generally represents the locking file persistence flag. It is + * bound to finding a "PIECES" DSV external database for the prefix + * of your addon. You can use it for boolean value deciding whenever + * or not to run certain events. For example you can stop exporting + * your local database every time Gmod loads, but then the user will + * skip the available updates of your addon until he/she deletes the DSVs. +]]-- +local myFlag = file.Exists(myDsv, "DATA") + --[[ * This function defines what happens when there is an error present * Usually you can tell Gmod that you want it to generate an error @@ -53,9 +76,6 @@ local function ThrowError(vMesg) ErrorNoHaltWithStack(sMesg.."\n") -- Produce an error without breaking the stack end --- There is something to error about stop the execution and report it -if(not asmlib) then ThrowError("Failed loading the required module!"); return end - --[[ * This logic statement is needed for reporting the error * in the console if the process fails. @@ -137,28 +157,6 @@ local function ExportCategory(tCatg) else asmlib.LogInstance("Category export SERVER "..sRep, mySource) end end --- Store a reference to disable symbol -local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") -local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") -local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") -local gsFormPF = asmlib.GetOpVar("FORM_PREFIXFDB") - --- This is the path to your DSV -local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. - asmlib.GetOpVar("DIRPATH_DSV").. - gsFormPF:format(myPrefix, gsToolPF.."PIECES") - ---[[ - * This flag is used when the track pieces list needs to be processed. - * It generally represents the locking file persistence flag. It is - * bound to finding a "PIECES" DSV external database for the prefix - * of your addon. You can use it for boolean value deciding whenever - * or not to run certain events. For example you can stop exporting - * your local database every time Gmod loads, but then the user will - * skip the available updates of your addon until he/she deletes the DSVs. -]]-- -local myFlag = file.Exists(myDsv, "DATA") - -- Tell TA what custom script we just called don't touch it asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}", mySource) diff --git a/data/trackassembly/set/z_autoset_[trackassembly].txt b/data/trackassembly/set/z_autoset_[trackassembly].txt index 6178fedc..ea2e6b28 100644 --- a/data/trackassembly/set/z_autoset_[trackassembly].txt +++ b/data/trackassembly/set/z_autoset_[trackassembly].txt @@ -59,7 +59,7 @@ if(asmlib) then local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") local gsModeDB = asmlib.GetOpVar("MODE_DATABASE") - local gsFormPF = asmlib.GetOpVar("FORM_PREFIXFDB") + local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") -- This is the path to your DSV local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 4ac17bd3..e53cea2c 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.801") +asmlib.SetOpVar("TOOL_VERSION","8.802") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1255,14 +1255,14 @@ if(CLIENT) then pOp:SetIcon(asmlib.ToIcon(sI.."ex")) pIn:AddOption(languageGetPhrase(sT.."exdv"), function() - local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then + local oPly = LocalPlayer(); if(not asmlib.IsPlayer(oPly)) then asmlib.LogInstance("Player invalid"); return nil end asmlib.LogInstance("Export "..asmlib.GetReport(oPly:Nick(), sTyp)) asmlib.ExportTypeDSV(sTyp); asmlib.SetAsmConvar(oPly, "exportdb", 0) end):SetIcon(asmlib.ToIcon(sI.."exdv")) pIn:AddOption(languageGetPhrase(sT.."exru"), function() - local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then + local oPly = LocalPlayer(); if(not asmlib.IsPlayer(oPly)) then asmlib.LogInstance("Player invalid"); return nil end asmlib.LogInstance("Export "..asmlib.GetReport(oPly:Nick(), sTyp)) asmlib.ExportTypeRun(sTyp); asmlib.SetAsmConvar(oPly, "exportdb", 0) @@ -1276,10 +1276,11 @@ if(CLIENT) then pnButton.DoClick = function(pnSelf) asmlib.LogInstance("Click "..asmlib.GetReport(pnSelf:GetText()), sLog..".Button") if(asmlib.GetAsmConvar("exportdb", "BUL")) then - asmlib.ExportCategory(3, nil, gsGenerPrf, true) - asmlib.ExportDSV("PIECES", gsGenerPrf, nil, true) - asmlib.ExportDSV("ADDITIONS", gsGenerPrf, nil, true) - asmlib.ExportDSV("PHYSPROPERTIES", gsGenerPrf, nil, true) + local fPref = "["..gsMoDB:lower().."-dsv]"..gsGenerPrf + asmlib.ExportCategory(3, nil, fPref, true) + asmlib.ExportDSV("PIECES", fPref, nil, true) + asmlib.ExportDSV("ADDITIONS", fPref, nil, true) + asmlib.ExportDSV("PHYSPROPERTIES", fPref, nil, true) asmlib.LogInstance("Export data", sLog..".Button") asmlib.SetAsmConvar(oPly, "exportdb", 0) else @@ -1878,7 +1879,7 @@ asmlib.NewTable("PIECES",{ end end; return true end, - ExportTypeRun = function(fE, fS, makP, PCache, qPieces, vSrc) + ExportTypeRun = function(fE, fS, sType, makP, PCache, qPieces, vSrc) local coMo, coTy = makP:GetColumnName(1), makP:GetColumnName(2) local coNm, coLn = makP:GetColumnName(3), makP:GetColumnName(4) local coP , coO = makP:GetColumnName(5), makP:GetColumnName(6) @@ -1912,9 +1913,10 @@ asmlib.NewTable("PIECES",{ fE:Flush(); fE:Close(); fS:Close(); return false end; tableEmpty(qPieces) for iD = 1, tSort.Size do qPieces[iD] = tSort[iD].Rec end + asmlib.LogInstance("Sorted rows count "..asmlib.GetReport(tSort.Size, sType),vSrc) return true end, - ExportContentsRun = function(aRow) aRow[2], aRow[4] = "myType", "gsSymOff" end + ExportContentsRun = function(aRow) aRow[2], aRow[4] = "myType", "gsSymOff"; return true end }, [1] = {"MODEL" , "TEXT" , "LOW", "QMK"}, [2] = {"TYPE" , "TEXT" , nil , "QMK"}, @@ -1973,7 +1975,7 @@ asmlib.NewTable("ADDITIONS",{ end end; return true end, - ExportContentsRun = function(aRow) aRow[4] = "gsSymOff" end + ExportContentsRun = function(aRow) aRow[4] = "gsSymOff"; return true end }, [1] = {"MODELBASE", "TEXT" , "LOW", "QMK"}, [2] = {"MODELADD" , "TEXT" , "LOW", "QMK"}, @@ -2040,7 +2042,7 @@ asmlib.NewTable("PHYSPROPERTIES",{ end end; return true end, - ExportContentsRun = function(aRow) aRow[1], aRow[2] = "myType", "gsSymOff" end + ExportContentsRun = function(aRow) aRow[1], aRow[2] = "myType", "gsSymOff"; return true end }, [1] = {"TYPE" , "TEXT" , nil , "QMK"}, [2] = {"LINEID", "INTEGER", "FLR", nil }, diff --git a/lua/autorun/z_autorun_[shinji85_s_rails].lua b/lua/autorun/z_autorun_[shinji85_s_rails].lua index 5e94e35e..59a276a2 100644 --- a/lua/autorun/z_autorun_[shinji85_s_rails].lua +++ b/lua/autorun/z_autorun_[shinji85_s_rails].lua @@ -40,27 +40,12 @@ local myScript = tostring(debug.getinfo(1).source or "N/A") myScript = "@"..myScript:gsub("^%W+", ""):gsub("\\","/") mySource = tostring(mySource or ""):gsub("^%W+", "") mySource = (asmlib.IsBlank(mySource) and "DSV" or mySource) ---[[ - * This function defines what happens when there is an error present - * Usually you can tell Gmod that you want it to generate an error - * and throw the message to the log also. In this case you will not - * have to change the function name in lots of places - * when you need it to do something else. ---]] -local function ThrowError(vMesg) - local sMesg = (myScript.." > ("..myAddon.."): "..tostring(vMesg)) -- Convert to string - if(asmlib) then asmlib.LogInstance(sMesg, mySource) end -- Update the tool logs - ErrorNoHaltWithStack(sMesg.."\n") -- Produce an error without breaking the stack -end - --- There is something to error about stop the execution and report it -if(not asmlib) then ThrowError("Failed loading the required module!"); return end -- Store a reference to disable symbol local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") -local gsFormPF = asmlib.GetOpVar("FORM_PREFIXFDB") +local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") -- This is the path to your DSV local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. @@ -78,6 +63,19 @@ local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. ]]-- local myFlag = file.Exists(myDsv, "DATA") +--[[ + * This function defines what happens when there is an error present + * Usually you can tell Gmod that you want it to generate an error + * and throw the message to the log also. In this case you will not + * have to change the function name in lots of places + * when you need it to do something else. +--]] +local function ThrowError(vMesg) + local sMesg = (myScript.." > ("..myAddon.."): "..tostring(vMesg)) -- Convert to string + if(asmlib) then asmlib.LogInstance(sMesg, mySource) end -- Update the tool logs + ErrorNoHaltWithStack(sMesg.."\n") -- Produce an error without breaking the stack +end + --[[ * This logic statement is needed for reporting the error * in the console if the process fails. diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 168f6eb3..82e6c1c5 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -266,7 +266,7 @@ function IsGenericDB(sSors) if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end local fDSV = fDSV..GetOpVar("DIRPATH_DSV") if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end - local fForm = GetOpVar("FORM_PREFIXFDB") + local fForm = GetOpVar("FORM_PREFIXDSV") return fileExists(fDSV..fForm:format(fGenc, sName..sSors), "DATA") end @@ -722,7 +722,7 @@ function InitBase(sName, sPurp) SetOpVar("FORM_INTEGER", "[%d]") SetOpVar("FORM_KEYSTMT","%s(%s)") SetOpVar("FORM_LOGSOURCE","%s.%s(%s)") - SetOpVar("FORM_PREFIXFDB", "%s%s.txt") + SetOpVar("FORM_PREFIXDSV", "%s%s.txt") SetOpVar("FORM_GITWIKI", "https://github.com/dvdvideo1234/TrackAssemblyTool/wiki/%s") SetOpVar("LOG_FILENAME",GetOpVar("DIRPATH_BAS")..GetOpVar("NAME_LIBRARY").."_log.txt") SetOpVar("FORM_SNAPSND", "physics/metal/metal_canister_impact_hard%d.wav") @@ -3592,7 +3592,7 @@ function ExportCategory(vEq, tData, sPref, bExp) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - local fForm, sTool = GetOpVar("FORM_PREFIXFDB"), GetOpVar("TOOLNAME_PU") + local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") fName = fName..fForm:format(fPref, sTool.."CATEGORY") local F = fileOpen(fName, "wb", "DATA") if(not F) then LogInstance(sHew.." Open fail: "..fName); return false end @@ -3618,7 +3618,7 @@ function ImportCategory(vEq, sPref, bExp) local tHew = GetOpVar("PATTEM_EXCATHED") local fPref = tostring(sPref or GetInstPref()) local nEq = mathMax(mathFloor(tonumber(vEq) or 0), 0) - local fForm, sTool = GetOpVar("FORM_PREFIXFDB"), GetOpVar("TOOLNAME_PU") + local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") local fName, sHew = GetOpVar("DIRPATH_BAS"), tHew[2]:format(fPref, nEq) fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) fName = fName..fForm:format(fPref, sTool.."CATEGORY") @@ -3694,7 +3694,7 @@ function ExportDSV(sTable, sPref, sDelim, bExp) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - local fForm = GetOpVar("FORM_PREFIXFDB") + local fForm = GetOpVar("FORM_PREFIXDSV") fName = fName..fForm:format(fPref, defTab.Name) local F = fileOpen(fName, "wb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end @@ -3758,7 +3758,7 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) LogInstance(sHew.." Missing table command",sTable); return false end local fName = GetOpVar("DIRPATH_BAS") --Switch the import source folder fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) - local fForm = GetOpVar("FORM_PREFIXFDB") + local fForm = GetOpVar("FORM_PREFIXDSV") fName = fName..fForm:format(fPref, defTab.Name) local F = fileOpen(fName, "rb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end @@ -3807,7 +3807,7 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end local fDSV = fDSV..GetOpVar("DIRPATH_DSV") if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end - local fForm, fData = GetOpVar("FORM_PREFIXFDB"), {} + local fForm, fData = GetOpVar("FORM_PREFIXDSV"), {} local fName = fDSV..fForm:format(fPref, defTab.Name) if(fileExists(fName, "DATA")) then local sLine, isEOF = "", false @@ -3911,7 +3911,7 @@ function TranslateDSV(sTable, sPref, sDelim) if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end local fEXP = fBAS..GetOpVar("DIRPATH_EXP") if(not fileExists(fEXP,"DATA")) then fileCreateDir(fDSV) end - local fForm = GetOpVar("FORM_PREFIXFDB") + local fForm = GetOpVar("FORM_PREFIXDSV") local sEXP = fEXP..fForm:format("[tr]"..fPref, defTab.Name) local sDSV = fDSV..fForm:format(fPref, defTab.Name) local sDelim = tostring(sDelim or "\t"):sub(1,1) @@ -4009,7 +4009,7 @@ function ProcessDSV(sDelim) local F = fileOpen(fName, "rb" ,"DATA"); if(not F) then LogInstance("Open fail: "..GetReport(fName)); return false end local sLine, isEOF, sGen = "", false, GetOpVar("DBEXP_PREFGEN") - local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXFDB") + local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXDSV") local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} local sDv = sBas..GetOpVar("DIRPATH_DSV") while(not isEOF) do sLine, isEOF = GetStringFile(F) @@ -4066,9 +4066,10 @@ end * qList > The list to insert the found additions ]] function SetAdditionsRun(sModel, makTab, qList) - if(not IsHere(makTab)) then return end - local defTab = makTab:GetDefinition() - if(not IsHere(defTab)) then LogInstance("Table definition missing") end + if(not IsHere(makTab)) then + LogInstance("Table builder missing "..GetReport(qModel)); return false end + local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then + LogInstance("Table definition missing "); return false end local sMoDB, sFunc, qData = GetOpVar("MODE_DATABASE"), "SetAdditionsRun" if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") @@ -4077,9 +4078,9 @@ function SetAdditionsRun(sModel, makTab, qList) local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end if(not IsHere(Q)) then - LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return end + LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return false end qData = sqlQuery(Q); if(not qData and isbool(qData)) then - LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return end + LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return false end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)) if(not IsHere(qData)) then qData = {} end @@ -4101,31 +4102,31 @@ function SetAdditionsRun(sModel, makTab, qList) end end local tSort = Arrange(qData, coMo, coLn); if(not tSort) then - LogInstance("Sort cache mismatch"); return end; tableEmpty(qData) + LogInstance("Sort cache mismatch"); return false end; tableEmpty(qData) for iD = 1, tSort.Size do qData[iD] = tSort[iD].Rec end - else - LogInstance("Unsupported mode "..GetReport(sMoDB, sModel)); return - end; local iE = #qList - if(not IsHere(qData) or IsEmpty(qData)) then return end - for iD = 1, #qData do qList[iE + iD] = qData[iD] end + else LogInstance("Unsupported mode "..GetReport(sMoDB, sModel)); return false end + if(not IsHere(qData) or IsEmpty(qData)) then + LogInstance("Additions empty "..GetReport(IsHere(qData), IsEmpty(qData), sModel)); return true end + local iE = #qList; for iD = 1, #qData do qList[iE + iD] = qData[iD] end + return true end function ExportContentsRun(fF,qData,sName,sInd,qList) local dbNull = GetOpVar("MISS_NOSQL") local keyBld, makAdd = GetOpVar("KEYQ_BUILDER") local makTab = qData[keyBld]; if(not IsHere(makTab)) then - LogInstance("Missing table builder"); return end + LogInstance("Missing table builder"); return false end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then - LogInstance("Missing table definition"); return end + LogInstance("Missing table definition"); return false end local mgrTab = defTab.Cache; if(not IsHere(mgrTab)) then - LogInstance("Cache manager missing"); return end + LogInstance("Cache manager missing"); return false end local sFunc = "ExportContentsRun"; if(not IsHere(mgrTab[sFunc])) then - LogInstance("Missing data handler"); return end + LogInstance("Missing data handler"); return false end if(IsHere(qList) and istable(qList)) then if(IsHere(qList[keyBld])) then makAdd = qList[keyBld] else makAdd = GetBuilderNick("ADDITIONS"); if(not IsHere(makAdd)) then - LogInstance("Missing table list builder"); return end - qList[keyBld] = makAdd; LogInstance("Store list builder") + LogInstance("Missing table list builder"); return false end + qList[keyBld] = makAdd; LogInstance("Store addition builder "..GetReport(qList, keyBld)) end end if(istable(qData) and IsHere(qData[1])) then @@ -4139,21 +4140,23 @@ function ExportContentsRun(fF,qData,sName,sInd,qList) local aRow = makTab:GetArrayRow(qRow) for iA = 1, #aRow do local vA = aRow[iA] aRow[iA] = makTab:Match(vA,iA,true,"\"",true,true); if(not IsHere(aRow[iA])) then - LogInstance("Matching error "..GetReport(iA,vA,mMod)); return end + LogInstance("Matching error "..GetReport(iA,vA,mMod)); return false end if(vA == dbNull) then aRow[iA] = "gsMissDB" end end if(fRow) then fRow = false fF:Write(sInd:rep(1).."["..aRow[pkID].."] = {\n") - SetAdditionsRun(mMod, makAdd, qList) + if(makAdd and qList) then if(not SetAdditionsRun(mMod, makAdd, qList)) then + LogInstance("Addition primary error "..GetReport(iD,qList,mMod)); return false end end else if(aRow[ixID] == 1) then fF:Seek(fF:Tell() - 2) fF:Write("\n"..sInd:rep(1).."},\n"..sInd:rep(1).."["..aRow[pkID].."] = {\n") - SetAdditionsRun(mMod, makAdd, qList) + if(makAdd and qList) then if(not SetAdditionsRun(mMod, makAdd, qList)) then + LogInstance("Addition secondary error "..GetReport(iD,qList,mMod)); return false end end end end local bS, sR = pcall(mgrTab[sFunc], aRow); - if(not bS) then LogInstance("Routine error "..GetReport(iD,mMod)..": "..sR); return end - if(not sR) then LogInstance("Internal error "..GetReport(iD,mMod)); return end + if(not bS) then LogInstance("Routine error "..GetReport(iD,mMod)..": "..sR); return false end + if(not sR) then LogInstance("Internal error "..GetReport(iD,mMod)); return false end tableRemove(aRow, 1); fF:Write(sInd:rep(2).."{"..tableConcat(aRow, ", ").."},\n") end fF:Seek(fF:Tell() - 2) @@ -4161,7 +4164,7 @@ function ExportContentsRun(fF,qData,sName,sInd,qList) fF:Write("}\n") else fF:Write("local "..sName.." = {}\n") - end + end; return true end --[[ @@ -4183,10 +4186,11 @@ function ExportTypeRun(sType) local sPref = sType:gsub("[^%w]","_") local sMoDB = GetOpVar("MODE_DATABASE") local sForm = GetOpVar("FORM_FILENAMEAR") + local fMon = "["..sMoDB:lower().."-run]" local sS = sBase..GetOpVar("DIRPATH_SET") sS = sS..sForm:format(sTool) local sN = sBase..GetOpVar("DIRPATH_EXP") - sN = sN..sForm:format(sPref) + sN = sN..fMon..sForm:format(sPref) local fE = fileOpen(sN, "wb", "DATA"); if(not fE) then LogInstance("Generate fail "..GetReport(sN)); return end local fS = fileOpen(sS, "rb", "DATA"); if(not fS) then fE:Flush(); fE:Close() @@ -4198,7 +4202,7 @@ function ExportTypeRun(sType) if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") if(not IsHere(makP)) then - LogInstance("Missing table builder PIECES") + LogInstance("Missing table builder",defP.Nick) fE:Flush(); fE:Close(); fS:Close(); return end local qType = makP:Match(sType, 2, true) @@ -4206,15 +4210,15 @@ function ExportTypeRun(sType) local Q = makP:Get(qIndx, qType); if(not IsHere(Q)) then Q = makP:Select():Where({2,"%s"}):Order(defP.Query[sFunc]):Store(qIndx):Get(qIndx, qType) end if(not Q) then - LogInstance("Build statement failed "..GetReport(qIndx,qType)) + LogInstance("Build statement failed "..GetReport(qIndx,qType),defP.Nick) fE:Flush(); fE:Close(); fS:Close(); return end qPieces = sqlQuery(Q); if(not qPieces and isbool(qPieces)) then - LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)) + LogInstance("SQL exec error "..GetReport(sqlLastError(), Q),defP.Nick) fE:Flush(); fE:Close(); fS:Close(); return end if(not IsHere(qPieces) or IsEmpty(qPieces)) then - LogInstance("No data found "..GetReport(Q)) + LogInstance("No data found "..GetReport(Q),defP.Nick) if(not IsHere(qPieces)) then qPieces = {} end end elseif(sMoDB == "LUA") then @@ -4223,13 +4227,13 @@ function ExportTypeRun(sType) LogInstance("Cache missing",defP.Nick) ; return false end local fsLog = GetOpVar("FORM_LOGSOURCE"); qPieces = {} local ssLog = "*"..fsLog:format(defP.Nick,sFunc,"%s") - local bS, sR = pcall(fE, fS, makP, tCache, qPieces, ssLog:format("Cache")) + local bS, sR = pcall(defP.Cache[sFunc], fE, fS, sType, makP, tCache, qPieces, ssLog:format("Cache")) if(not bS) then fE:Flush(); fE:Close(); fS:Close() LogInstance("Cache manager fail for "..sR,defP.Nick) ; return end if(not sR) then fE:Flush(); fE:Close(); fS:Close() LogInstance("Cache routine fail",defP.Nick) ; return end else - LogInstance("Unsupported mode "..GetReport(sMoDB)) + LogInstance("Unsupported mode "..GetReport(sMoDB),defP.Nick) fE:Flush(); fE:Close(); fS:Close(); return end if(IsHere(qPieces) and IsHere(qPieces[1])) then @@ -4264,9 +4268,15 @@ function ExportTypeRun(sType) fE:Write("asmlib.WorkshopID(myAddon)\n") end elseif(sLine:find(patPiece)) then isSkip = true - ExportContentsRun(fE, qPieces, "myPieces", sInd, qAdditions) + if(not ExportContentsRun(fE, qPieces, "myPieces", sInd, qAdditions)) then + LogInstance("Pieces variable fail "..GetReport(patPiece,sLine),defP.Nick) + fE:Flush(); fE:Close(); fS:Close(); return + end elseif(sLine:find(patAddit)) then isSkip = true - ExportContentsRun(fE, qAdditions, "myAdditions", sInd) + if(not ExportContentsRun(fE, qAdditions, "myAdditions", sInd)) then + LogInstance("Additions variable fail "..GetReport(patAddit,sLine),defP.Nick) + fE:Flush(); fE:Close(); fS:Close(); return + end else if(isSkip and IsBlank(sLine:Trim())) then isSkip = false end end @@ -4276,7 +4286,7 @@ function ExportTypeRun(sType) end fE:Write("\n"); fE:Flush() fE:Close(); fS:Close() - end + else LogInstance("Export content missing "..GetReport(sMoDB),defP.Nick) end end --[[ @@ -4297,25 +4307,25 @@ function ExportTypeDSV(sType, sDelim) LogInstance("("..fPref..") Missing additions builder"); return false end local defA = makA:GetDefinition(); if(not IsHere(defA)) then LogInstance("("..fPref..") Missing additions definition"); return nil end + local sMoDB = GetOpVar("MODE_DATABASE") -- Read database mode local fDir = GetOpVar("DIRPATH_BAS") if(not fileExists(fDir,"DATA")) then fileCreateDir(fDir) end local fDir = fDir..GetOpVar("DIRPATH_EXP") if(not fileExists(fDir,"DATA")) then fileCreateDir(fDir) end - local fForm = GetOpVar("FORM_PREFIXFDB") - local fName = fDir..fForm:format(fPref, defP.Name) + local fForm, fMon = GetOpVar("FORM_PREFIXDSV"), "["..sMoDB:lower().."-dsv]" + local fName = fDir..fForm:format(fMon..fPref, defP.Name) local P = fileOpen(fName, "wb", "DATA"); if(not P) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end - local fName = fDir..fForm:format(fPref, defA.Name) + local fName = fDir..fForm:format(fMon..fPref, defA.Name) local A = fileOpen(fName, "wb", "DATA"); if(not A) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end local sDelim, sFunc = tostring(sDelim or "\t"):sub(1,1), "ExportTypeDSV" local fsLog = GetOpVar("FORM_LOGSOURCE") -- Read the log source format local ssLog = "*"..fsLog:format(defP.Nick,sFunc,"%s") - local sMoDB = GetOpVar("MODE_DATABASE") -- Read database mode P:Write("#1 "..sFunc..":("..fPref.."@"..defP.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") P:Write("#2 "..defP.Nick..":("..makP:GetColumnList(sDelim)..")\n") - A:Write("#3 "..sFunc..":("..fPref.."@"..defA.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") - A:Write("#4 "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") + A:Write("#1 "..sFunc..":("..fPref.."@"..defA.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") + A:Write("#2 "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") local qType = makP:Match(sType, 2, true) From 23161b97a0dad2ee942dd3f9c7d0abafcdf91b4b Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 10 Nov 2024 12:51:35 +0200 Subject: [PATCH 075/114] Fixed: Export track type as DSV in SQL mode Added: Automatic Z offset update when selecting curve node via active point --- lua/trackassembly/trackasmlib.lua | 50 ++++++++++++------- .../gmod_tool/stools/trackassembly.lua | 9 +++- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 82e6c1c5..e4731b3d 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -682,9 +682,10 @@ function InitBase(sName, sPurp) SetOpVar("ANG_ZERO",Angle()) SetOpVar("VEC_ZERO",Vector()) SetOpVar("ANG_REV",Angle(0,180,0)) - SetOpVar("VEC_FW",Vector(1,0,0)) - SetOpVar("VEC_RG",Vector(0,-1,1)) - SetOpVar("VEC_UP",Vector(0,0,1)) + SetOpVar("VEC_FW",Vector(1, 0, 0)) + SetOpVar("VEC_RG",Vector(0,-1, 1)) + SetOpVar("VEC_UP",Vector(0, 0, 1)) + SetOpVar("VEC_DW",Vector(0, 0,-1)) SetOpVar("OPSYM_DISABLE","#") SetOpVar("OPSYM_DIVIDER","_") SetOpVar("OPSYM_VERTDIV","|") @@ -4341,25 +4342,38 @@ function ExportTypeDSV(sType, sDelim) if(not IsHere(qP) or IsEmpty(qP)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") No data found "..GetReport(Q), defP.Nick); return false end local rwP, rwA, rwM = "", "", "" - local coMo = makTab:GetColumnName(1) - local coLI = makTab:GetColumnName(4) + local coMo = makP:GetColumnName(1) + local coLI = makP:GetColumnName(4) for iP = 1, #qP do - local qRec = qP[iP]; rwP = defP.Name - for iC = 1, defP.Size do - local sC = defP[iC][1], "" - local vC = qRec[sC] - local mC = makP:Match(vC,iC,true,"\"",true) - rwP, rwM = (rwP..sDelim..vC), (sC == coMo and mC or rwM) - if(sC == coLI and (tonumber(vC) or 0) == 1) then - local Q = makA:Get(qInxA, rwM); if(not IsHere(Q)) then - Q = makA:Select():Where({1,"%s"}):Order(unpack(defP.Query[sFunc])):Store(qInxA):Get(qInxA, rwM) end + local qRP = qP[iP]; rwP = defP.Name + for iCP = 1, defP.Size do + local cP = defP[iCP][1] + local vP = qRP[cP] + local mP = makP:Match(vP,iCP,true,"\"",true) + rwP, rwM = (rwP..sDelim..mP), (cP == coMo and vP or rwM) + if(cP == coLI and (tonumber(vP) or 0) == 1) then + local qrMo = makP:Match(rwM, 1, true) + local Q = makA:Get(qInxA, qrMo); if(not IsHere(Q)) then + Q = makA:Select():Where({1,"%s"}):Order(unpack(defA.Query[sFunc])):Store(qInxA):Get(qInxA, qrMo) end if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") Build statement failed",defA.Nick); return false end if(iP == 1) then A:Write("#3 Query:<"..Q..">\n") end local qA = sqlQuery(Q); if(not qA and isbool(qA)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defA.Nick); return false end - if(not IsHere(qA) or IsEmpty(qA)) then P:Flush(); P:Close(); A:Flush(); A:Close() - LogInstance("("..fPref..") No data found "..GetReport(Q), defA.Nick); return false end + if(not IsHere(qA) or IsEmpty(qA)) then + LogInstance("("..fPref..") No data found "..GetReport(Q), defA.Nick) + else + for iA = 1, #qA do + local qRA = qA[iA]; rwA = defA.Name + for iCA = 1, defA.Size do + local cA = defA[iCA][1] + local vA = qRA[cA] + local mA = makA:Match(vA,iCA,true,"\"",true) + rwA = (rwA..sDelim..mA) + end + A:Write(rwA.."\n"); rwA = "" + end + end end end; P:Write(rwP.."\n"); rwP = "" end -- Matching will not crash as it is matched during insertion @@ -4587,7 +4601,7 @@ end * ivPoID > Point ID selected for its model * nLen > Length of the trace ]] -function GetTraceEntityPoint(trEnt, ivPoID, nLen) +function GetTraceEntityPoint(trEnt, ivPoID, nLen, vDir) if(not (trEnt and trEnt:IsValid())) then LogInstance("Trace entity invalid"); return nil end local nLen = (tonumber(nLen) or 0); if(nLen <= 0) then @@ -4602,7 +4616,7 @@ function GetTraceEntityPoint(trEnt, ivPoID, nLen) trDt.start:Add(trEnt:GetPos()) trAng:SetUnpacked(trPOA.A:Get()) trAng:Set(trEnt:LocalToWorldAngles(trAng)) - trDt.endpos:Set(trAng:Forward()); trDt.endpos:Mul(nLen) + trDt.endpos:Set(vDir or trAng:Forward()); trDt.endpos:Mul(nLen) trDt.endpos:Add(trDt.start); SetOpVar("TRACE_FILTER", trEnt) return utilTraceLine(trDt), trDt end diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 238e3412..4f8d8d3b 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -871,7 +871,7 @@ function TOOL:GetCurveTransform(stTrace, bPnt) asmlib.LogInstance("Trace missing", gtLogs); return nil end if(not stTrace.Hit) then asmlib.LogInstance("Trace not hit", gtLogs); return nil end - local user = self:GetOwner() + local user, nT = self:GetOwner(), 0 local angsnap = self:GetAngSnap() local elevpnt = self:GetElevation() local surfsnap = self:GetSurfaceSnap() @@ -895,11 +895,16 @@ function TOOL:GetCurveTransform(stTrace, bPnt) tData.Orw:Set(tData.Org); tData.Anw:Set(tData.Ang) -- Transform of POA tData.ID = oID; tData.Min = oMin -- Point ID and minimum distance tData.POA = oPOA; tData.Rec = oRec -- POA and cache record + local trDt = asmlib.GetTraceEntityPoint(eEnt, oID, 30000, asmlib.GetOpVar("VEC_DW")) + if(trDt and trDt.Hit) then + nT = (tData.Orw.z - trDt.HitPos.z) + asmlib.SetAsmConvar(user, "nextz", nT) + end end -- Use the track piece active end to create relative curve node else -- Offset the curve node when it is not driven by an active point tData.Org:Add(vNrm * elevpnt) -- Apply model active point elevation end -- Apply the positional and angular offsets to the return value - tData.Org:Add(tData.Ang:Up() * nextz) + tData.Org:Add(tData.Ang:Up() * (nextz - nT)) tData.Org:Add(tData.Ang:Right() * nexty) tData.Org:Add(tData.Ang:Forward() * nextx) tData.Ang:RotateAroundAxis(tData.Ang:Up() ,-nextyaw) From 8e302c5edfd42dd42b90562ba901a656131e37c3 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 10 Nov 2024 20:50:46 +0200 Subject: [PATCH 076/114] Fixed: Physical properties table exports PK without quotes Fixed: Physical properties exported as DSV PKs are not ordered Fixed: Exporting content to autorun file trigger order error in SQL mode Fixed: Exporting DSV in SQL mode triggers data matching error Fixed: Angle grid/snap triggering log messages Fixed: Create table STMT building improper error logs Fixed: Population additions on autorun checking for no data found Added: Customizable table row concatenation Remove: table definition local variable `PHYSPROPERTIES` not used Updated: Statement key `CacheQueryPiece` used only in SQL mode Updated: Type as DSV table cloture concatenation in SQL mode --- lua/autorun/trackassembly_init.lua | 31 ++--- lua/trackassembly/trackasmlib.lua | 108 +++++++++--------- .../gmod_tool/stools/trackassembly.lua | 2 +- 3 files changed, 71 insertions(+), 70 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index e53cea2c..b9eac0bd 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.802") +asmlib.SetOpVar("TOOL_VERSION","8.803") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1960,7 +1960,7 @@ asmlib.NewTable("ADDITIONS",{ for iRow = 1, tSort.Size do local tRow = tSort[iRow] local sKey, tRec = tRow.Key, tRow.Rec - local sData = defTab.Name..sDelim..sKey + local sData = defTab.Name..sDelim..makTab:Match(sKey,1,true,"\"") for iRec = 1, #tRec do local vRec = tRec[iRec]; oFile:Write(sData) for iID = 2, defTab.Size do @@ -2009,7 +2009,6 @@ asmlib.NewTable("PHYSPROPERTIES",{ Record = function(makTab, tCache, snPK, arLine, vSrc) local skName = asmlib.GetOpVar("HASH_PROPERTY_NAMES") local skType = asmlib.GetOpVar("HASH_PROPERTY_TYPES") - local defTab = makTab:GetDefinition() local tTypes = tCache[skType]; if(not tTypes) then tCache[skType] = {}; tTypes = tCache[skType]; tTypes.Size = 0 end local tNames = tCache[skName]; if(not tNames) then @@ -2026,19 +2025,23 @@ asmlib.NewTable("PHYSPROPERTIES",{ tNames[snPK].Size = tNames[snPK].Size + 1 tNames[snPK][iNameID] = makTab:Match(arLine[3],3); return true end, - ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) + ExportDSV = function(oF, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() - local tTypes = tCache[asmlib.GetOpVar("HASH_PROPERTY_TYPES")] - local tNames = tCache[asmlib.GetOpVar("HASH_PROPERTY_NAMES")] - if(not (tTypes or tNames)) then F:Flush(); F:Close() + local pT = asmlib.GetOpVar("HASH_PROPERTY_TYPES") + local pN = asmlib.GetOpVar("HASH_PROPERTY_NAMES") + local tTypes, tNames, tT = tCache[pT], tCache[pN], {} + if(not (tTypes or tNames)) then oF:Flush(); oF:Close() asmlib.LogInstance("("..fPref..") No data found",vSrc); return false end - for iInd = 1, tTypes.Size do local sType = tTypes[iInd] - local tType = tNames[sType]; if(not tType) then F:Flush(); F:Close() - asmlib.LogInstance("("..fPref..") Missing index "..asmlib.GetReport(iInd, sType),vSrc); return false end - for iCnt = 1, tType.Size do local vType = tType[iCnt] - oFile:Write(defTab.Name..sDelim..makTab:Match(sType,1,true,"\"").. - sDelim..makTab:Match(iCnt ,2,true,"\"").. - sDelim..makTab:Match(vType,3,true,"\"").."\n") + for iD = 1, tTypes.Size do tableInsert(tT, tTypes[iD]) end + local tS = asmlib.Arrange(tT); if(not tS) then oF:Flush(); oF:Close() + asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end + for iS = 1, tS.Size do local sT = tS[iS].Rec + local tProp = tNames[sT]; if(not tProp) then oF:Flush(); oF:Close() + asmlib.LogInstance("("..fPref..") Missing index "..asmlib.GetReport(iS, sT),vSrc); return false end + for iP = 1, tProp.Size do local sP = tProp[iP] + oF:Write(defTab.Name..sDelim..makTab:Match(sT,1,true,"\"").. + sDelim..makTab:Match(iP,2,true,"\"").. + sDelim..makTab:Match(sP,3,true,"\"").."\n") end end; return true end, diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index e4731b3d..fc06b87d 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -871,19 +871,16 @@ end function SnapAngle(aBase, nvDec) if(not aBase) then LogInstance("Base invalid"); return nil end - local D = (tonumber(nvDec) or 0); if(D <= 0) then - LogInstance("Low mismatch "..GetReport(nvDec)); return nil end - if(D >= GetOpVar("MAX_ROTATION")) then - LogInstance("High mismatch "..GetReport(nvDec)); return nil end - -- Snap player viewing rotation angle for using walls and ceiling + local R = GetOpVar("MAX_ROTATION") + local D = (tonumber(nvDec) or 0) + if(D <= 0 or D >= R) then return aBase end aBase:SnapTo("pitch", D):SnapTo("yaw", D):SnapTo("roll", D) return aBase end function GridAngle(aBase, nvDec) if(not aBase) then LogInstance("Base invalid"); return nil end - local D = tonumber(nvDec or 0); if(not IsHere(D)) then - LogInstance("Grid mismatch "..GetReport(nvDec)); return nil end + local D = tonumber(nvDec or 0); if(D == 0) then return aBase end local P, Y, R = aBase:Unpack() if(P == 0 and P == 0 and D > 0) then Y = GetGrid(Y, D) end aBase:SetUnpacked(P, Y, R) return aBase @@ -2958,6 +2955,23 @@ function NewTable(sTable,defTab,bDelete,bReload) else LogInstance("Invalid column type "..GetReport(tyCol),tabDef.Nick); return nil end; return snOut end + function self:GetConcat(tLine, sDelim, fFoo) + local qtDef, sLine = self:GetDefinition(), ""; if(not istable(tLine)) then + LogInstance("Source not table "..GetReport(tLine, sDelim), tabDef.Nick); return nil end + local sDelim = tostring(sDelim or "\t"):sub(1,1) + for iCnt = 1, qtDef.Size do + local tC = qtDef[iCnt]; if(not tC) then + LogInstance("Column missing "..GetReport(iCnt, qtDef.Size), tabDef.Nick); return nil end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column name mismatch "..GetReport(iCnt, qtDef.Size),tabDef.Nick); return nil end + local vC, sD = tLine[sC], (iCnt == 1 and "" or sDelim) -- Extract the value + if(fFoo) then -- Call the conversion handler function when provided + local bS, sR = pcall(fFoo, iCnt, sC, vC); if(not bS) then + LogInstance("Value convert error "..GetReport(iCnt, qtDef.Size, vC)..": "..sR,tabDef.Nick); return nil end + vC = sR -- The value is converted and updaed successfully + end; sLine = sLine..sD..tostring(vC or "") + end; return sLine + end -- Build SQL drop statement function self:Drop() local qtDef = self:GetDefinition() @@ -3010,11 +3024,11 @@ function NewTable(sTable,defTab,bDelete,bReload) local sStmt = qtCmd.STMT.." TABLE IF NOT EXISTS "..qtDef.Name.." ( " for iCnt = 1, qtDef.Size do local tC = qtDef[iCnt]; if(not tC) then - LogInstance("Column missing "..GetReport(nA,iCnt), tabDef.Nick); return self:Deny() end + LogInstance("Column missing "..GetReport(iCnt,qtDef.Size), tabDef.Nick); return self:Deny() end local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then - LogInstance("Column name mismatch "..GetReport(nA,iCnt),tabDef.Nick); return self:Deny() end + LogInstance("Column name mismatch "..GetReport(iCnt,qtDef.Size),tabDef.Nick); return self:Deny() end local sT = tostring(tC[2] or ""); if(IsBlank(sT)) then - LogInstance("Column type mismatch "..GetReport(nA,iCnt),tabDef.Nick); return self:Deny() end + LogInstance("Column type mismatch "..GetReport(iCnt,qtDef.Size),tabDef.Nick); return self:Deny() end sStmt = sStmt..sC.." "..sT..(iCnt ~= qtDef.Size and ", " or " );") end; qtCmd[qtCmd.STMT] = sStmt; return self end @@ -3287,7 +3301,7 @@ function CacheQueryPiece(sModel) LogInstance("Missing table definition"); return nil end local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then LogInstance("Cache missing for "..GetReport(defTab.Name)); return nil end - local sModel, qsKey = makTab:Match(sModel,1,false,"",true,true), GetOpVar("FORM_KEYSTMT") + local sModel = makTab:Match(sModel,1,false,"",true,true) local stData, sFunc = tCache[sModel], "CacheQueryPiece" if(IsHere(stData) and IsHere(stData.Size)) then if(stData.Size <= 0) then stData = nil else @@ -3296,6 +3310,7 @@ function CacheQueryPiece(sModel) else local sMoDB = GetOpVar("MODE_DATABASE") if(sMoDB == "SQL") then + local qsKey = GetOpVar("FORM_KEYSTMT") local qModel = makTab:Match(sModel,1,true) LogInstance("Save >> "..GetReport(sModel)) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 @@ -3321,7 +3336,7 @@ function CacheQueryPiece(sModel) LogInstance("Cannot process offset "..GetReport(iCnt, sModel)); return nil end end; stData = makTab:TimerAttach(sFunc, defTab.Name, sModel); return stData - elseif(sMoDB == "LUA") then LogInstance("Record missing"); return nil + elseif(sMoDB == "LUA") then LogInstance("Record missing: "..sModel); return nil else LogInstance("Unsupported mode "..GetReport(sMoDB,defTab.Nick)); return nil end end end @@ -3707,7 +3722,7 @@ function ExportDSV(sTable, sPref, sDelim, bExp) F:Write("#2 "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") - local qIndx = qsKey:format(sFunc,"") + local qIndx = qsKey:format(sFunc, sTable) local Q = makTab:Get(qIndx); if(not IsHere(Q)) then Q = makTab:Select():Order(unpack(defTab.Query[sFunc])):Store(qIndx):Get(qIndx) end if(not IsHere(Q)) then F:Flush(); F:Close() @@ -3717,11 +3732,9 @@ function ExportDSV(sTable, sPref, sDelim, bExp) LogInstance(sHew.." SQL exec error "..GetReport(sqlLastError(), Q), sTable); return nil end if(not IsHere(qData) or IsEmpty(qData)) then F:Flush(); F:Close() LogInstance(sHew.." No data found "..GetReport(Q), sTable); return false end - local sData, sTab = "", defTab.Name - for iCnt = 1, #qData do local qRec = qData[iCnt]; sData = sTab - for iInd = 1, defTab.Size do local sHash = defTab[iInd][1] - sData = sData..sDelim..makTab:Match(qRec[sHash],iInd,true,"\"",true) - end; F:Write(sData.."\n"); sData = "" + for iCnt = 1, #qData do + F:Write(defTab.Name..sDelim..makTab:GetConcat(qData[iCnt], sDelim, + function(iCT, sCT, vCT) return makTab:Match(vCT,iCT,true,"\"",true) end).."\n") end -- Matching will not crash as it is matched during insertion elseif(sMoDB == "LUA") then local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then F:Flush(); F:Close() @@ -4082,10 +4095,6 @@ function SetAdditionsRun(sModel, makTab, qList) LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return false end qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return false end - if(not IsHere(qData) or IsEmpty(qData)) then - LogInstance("No data found "..GetReport(Q)) - if(not IsHere(qData)) then qData = {} end - end elseif(sMoDB == "LUA") then local iCnt = 0; qData = {} local tCache = libCache[defTab.Name] @@ -4209,7 +4218,7 @@ function ExportTypeRun(sType) local qType = makP:Match(sType, 2, true) local qIndx = qsKey:format(sFunc, "PIECES") local Q = makP:Get(qIndx, qType); if(not IsHere(Q)) then - Q = makP:Select():Where({2,"%s"}):Order(defP.Query[sFunc]):Store(qIndx):Get(qIndx, qType) end + Q = makP:Select():Where({2,"%s"}):Order(unpack(defP.Query[sFunc])):Store(qIndx):Get(qIndx, qType) end if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,qType),defP.Nick) fE:Flush(); fE:Close(); fS:Close(); return @@ -4328,6 +4337,7 @@ function ExportTypeDSV(sType, sDelim) A:Write("#1 "..sFunc..":("..fPref.."@"..defA.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") A:Write("#2 "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then + local qsNov = GetOpVar("MISS_NOAV") local qsKey = GetOpVar("FORM_KEYSTMT") local qType = makP:Match(sType, 2, true) local qInxP = qsKey:format(sFunc, defP.Nick) @@ -4341,41 +4351,29 @@ function ExportTypeDSV(sType, sDelim) LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defP.Nick); return false end if(not IsHere(qP) or IsEmpty(qP)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") No data found "..GetReport(Q), defP.Nick); return false end - local rwP, rwA, rwM = "", "", "" - local coMo = makP:GetColumnName(1) - local coLI = makP:GetColumnName(4) + local coMo, coLI, rwM = makP:GetColumnName(1), makP:GetColumnName(4), "" for iP = 1, #qP do - local qRP = qP[iP]; rwP = defP.Name - for iCP = 1, defP.Size do - local cP = defP[iCP][1] - local vP = qRP[cP] - local mP = makP:Match(vP,iCP,true,"\"",true) - rwP, rwM = (rwP..sDelim..mP), (cP == coMo and vP or rwM) - if(cP == coLI and (tonumber(vP) or 0) == 1) then - local qrMo = makP:Match(rwM, 1, true) - local Q = makA:Get(qInxA, qrMo); if(not IsHere(Q)) then - Q = makA:Select():Where({1,"%s"}):Order(unpack(defA.Query[sFunc])):Store(qInxA):Get(qInxA, qrMo) end - if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() - LogInstance("("..fPref..") Build statement failed",defA.Nick); return false end - if(iP == 1) then A:Write("#3 Query:<"..Q..">\n") end - local qA = sqlQuery(Q); if(not qA and isbool(qA)) then P:Flush(); P:Close(); A:Flush(); A:Close() - LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defA.Nick); return false end - if(not IsHere(qA) or IsEmpty(qA)) then - LogInstance("("..fPref..") No data found "..GetReport(Q), defA.Nick) - else - for iA = 1, #qA do - local qRA = qA[iA]; rwA = defA.Name - for iCA = 1, defA.Size do - local cA = defA[iCA][1] - local vA = qRA[cA] - local mA = makA:Match(vA,iCA,true,"\"",true) - rwA = (rwA..sDelim..mA) + P:Write(defP.Name..sDelim..makP:GetConcat(qP[iP], sDelim, + function(iCP, sCP, vCP) + rwM = (sCP == coMo and vCP or rwM) + if(sCP == coLI and (tonumber(vCP) or 0) == 1) then + local qrMo = makP:Match(rwM, 1, true) + local Q = makA:Get(qInxA, qrMo); if(not IsHere(Q)) then + Q = makA:Select():Where({1,"%s"}):Order(unpack(defA.Query[sFunc])):Store(qInxA):Get(qInxA, qrMo) end + if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") Build statement failed",defA.Nick); return qsNov end + if(iP == 1) then A:Write("#3 Query:<"..Q..">\n") end + local qA = sqlQuery(Q); if(not qA and isbool(qA)) then P:Flush(); P:Close(); A:Flush(); A:Close() + LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defA.Nick); return qsNov end + if(not IsHere(qA) or IsEmpty(qA)) then + LogInstance("("..fPref..") No data found "..GetReport(Q), defA.Nick) + else + for iA = 1, #qA do + A:Write(defA.Name..sDelim..makA:GetConcat(qA[iA], sDelim, + function(iCA, sCA, vCA) return makA:Match(vCA,iCA,true,"\"",true) end).."\n") end - A:Write(rwA.."\n"); rwA = "" end - end - end - end; P:Write(rwP.."\n"); rwP = "" + end; return makP:Match(vCP,iCP,true,"\"",true) end).."\n") end -- Matching will not crash as it is matched during insertion elseif(sMoDB == "LUA") then local PCache, ACache = libCache[defP.Name], libCache[defA.Name] diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 4f8d8d3b..d6ac5d6f 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -897,7 +897,7 @@ function TOOL:GetCurveTransform(stTrace, bPnt) tData.POA = oPOA; tData.Rec = oRec -- POA and cache record local trDt = asmlib.GetTraceEntityPoint(eEnt, oID, 30000, asmlib.GetOpVar("VEC_DW")) if(trDt and trDt.Hit) then - nT = (tData.Orw.z - trDt.HitPos.z) + nT = ((tData.Orw.z - trDt.HitPos.z) - elevpnt) asmlib.SetAsmConvar(user, "nextz", nT) end end -- Use the track piece active end to create relative curve node From 5d01d287aed91c9a0241a757538515a44bc8084f Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 12 Nov 2024 12:10:32 +0200 Subject: [PATCH 077/114] Fixed: DB export flag not being reset on menu error Changed: Panels context menu localization and icon hashes --- lua/autorun/trackassembly_init.lua | 174 ++++++++---------- lua/trackassembly/trackasmlib.lua | 45 +++-- .../localization/bg/trackassembly.properties | 30 +-- .../localization/en/trackassembly.properties | 75 ++++---- .../localization/ru/trackassembly.properties | 18 +- .../zh-cn/trackassembly.properties | 12 +- 6 files changed, 169 insertions(+), 185 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index b9eac0bd..306e9920 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.803") +asmlib.SetOpVar("TOOL_VERSION","8.804") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -461,51 +461,39 @@ if(CLIENT) then asmlib.ToIcon(gsToolPrefU.."ADDITIONS" , "bricks" ) asmlib.ToIcon(gsToolPrefU.."PHYSPROPERTIES", "wand" ) asmlib.ToIcon(gsToolPrefL.."context_menu" , "database_gear" ) - asmlib.ToIcon("treemenu_cpy" , "page_copy" ) - asmlib.ToIcon("treemenu_cpy_mod" , "brick_go" ) - asmlib.ToIcon("treemenu_cpy_typ" , "database_go" ) - asmlib.ToIcon("treemenu_cpy_nam" , "script_go" ) - asmlib.ToIcon("treemenu_cpy_pth" , "map_go" ) - asmlib.ToIcon("treemenu_ws" , "cart" ) - asmlib.ToIcon("treemenu_ws_cid" , "key_go" ) - asmlib.ToIcon("treemenu_ws_opp" , "world" ) - asmlib.ToIcon("treemenu_expand" , "zoom" ) - asmlib.ToIcon("treemenu_exp" , "transmit" ) - asmlib.ToIcon("treemenu_exp_dsv" , "database_table" ) - asmlib.ToIcon("treemenu_exp_run" , "script_code" ) - asmlib.ToIcon("subfolder_item" , "folder_brick" ) - asmlib.ToIcon("pn_routine_cmcp" , "page_copy" ) - asmlib.ToIcon("pn_routine_cmcpmd", "brick" ) - asmlib.ToIcon("pn_routine_cmcpbv", "brick_go" ) - asmlib.ToIcon("pn_routine_cmcprw", "brick_link" ) - asmlib.ToIcon("pn_routine_cmws" , "cart" ) - asmlib.ToIcon("pn_routine_cmwsid", "key_go" ) - asmlib.ToIcon("pn_routine_cmwsop", "world" ) - asmlib.ToIcon("pn_routine_cmex" , "transmit" ) - asmlib.ToIcon("pn_routine_cmexdv", "database_table" ) - asmlib.ToIcon("pn_routine_cmexru", "script_code" ) - asmlib.ToIcon("pn_externdb_cmcp" , "page_copy" ) - asmlib.ToIcon("pn_externdb_cmcp1", "database_go" ) - asmlib.ToIcon("pn_externdb_cmcp2", "database_lightning") - asmlib.ToIcon("pn_externdb_cmcp3", "folder_database" ) - asmlib.ToIcon("pn_externdb_cmtg" , "database_connect" ) - asmlib.ToIcon("pn_externdb_cmli" , "database" ) - asmlib.ToIcon("pn_externdb_cmli1", "database_edit" ) - asmlib.ToIcon("pn_externdb_cmli2", "database_add" ) - asmlib.ToIcon("pn_externdb_cmli3", "database_delete" ) - asmlib.ToIcon("pn_externdb_cmmv" , "joystick" ) - asmlib.ToIcon("pn_externdb_cmmv1", "arrow_up" ) - asmlib.ToIcon("pn_externdb_cmmv2", "arrow_down" ) - asmlib.ToIcon("pn_externdb_cmmv3", "arrow_redo" ) - asmlib.ToIcon("pn_externdb_cmmv4", "arrow_undo" ) - asmlib.ToIcon("pn_externdb_cmst" , "database_gear" ) - asmlib.ToIcon("pn_externdb_cmsi" , "database_key" ) - asmlib.ToIcon("pn_externdb_cmst1", "folder_find" ) - asmlib.ToIcon("pn_externdb_cmst2", "map_go" ) - asmlib.ToIcon("pn_externdb_cmst3", "time_go" ) - asmlib.ToIcon("pn_externdb_cmst4", "compress" ) - asmlib.ToIcon("pn_externdb_cmst5", "table_edit" ) - asmlib.ToIcon("pn_externdb_cmst6", "table_delete" ) + asmlib.ToIcon("subfolder_item" , "folder_brick" ) + asmlib.ToIcon("pn_contextm_cp" , "page_copy" ) + asmlib.ToIcon("pn_contextm_cpbx" , "application_go" ) + asmlib.ToIcon("pn_contextm_cprw" , "report_go" ) + asmlib.ToIcon("pn_contextm_cpty" , "database_go" ) + asmlib.ToIcon("pn_contextm_cpnm" , "script_go" ) + asmlib.ToIcon("pn_contextm_cpth" , "map_go" ) + asmlib.ToIcon("pn_contextm_cpmd" , "brick_go" ) + asmlib.ToIcon("pn_contextm_li" , "database" ) + asmlib.ToIcon("pn_contextm_licg" , "database_edit" ) + asmlib.ToIcon("pn_contextm_licr" , "database_add" ) + asmlib.ToIcon("pn_contextm_lirm" , "database_delete" ) + asmlib.ToIcon("pn_contextm_ws" , "cart" ) + asmlib.ToIcon("pn_contextm_wsid" , "key_go" ) + asmlib.ToIcon("pn_contextm_wsop" , "world" ) + asmlib.ToIcon("pn_contextm_ex" , "transmit" ) + asmlib.ToIcon("pn_contextm_exdv" , "database_table" ) + asmlib.ToIcon("pn_contextm_exru" , "script_code" ) + asmlib.ToIcon("pn_contextm_mv" , "joystick" ) + asmlib.ToIcon("pn_contextm_mvup" , "arrow_up" ) + asmlib.ToIcon("pn_contextm_mvdn" , "arrow_down" ) + asmlib.ToIcon("pn_contextm_mvtp" , "arrow_redo" ) + asmlib.ToIcon("pn_contextm_mvbt" , "arrow_undo" ) + asmlib.ToIcon("pn_contextm_st" , "database_gear" ) + asmlib.ToIcon("pn_contextm_si" , "database_key" ) + asmlib.ToIcon("pn_contextm_stnk" , "folder_find" ) + asmlib.ToIcon("pn_contextm_stpt" , "map_go" ) + asmlib.ToIcon("pn_contextm_sttm" , "time_go" ) + asmlib.ToIcon("pn_contextm_stsz" , "compress" ) + asmlib.ToIcon("pn_contextm_sted" , "table_edit" ) + asmlib.ToIcon("pn_contextm_stdl" , "table_delete" ) + asmlib.ToIcon("pn_contextm_tg" , "database_connect" ) + asmlib.ToIcon("pn_contextm_ep" , "zoom" ) asmlib.ToIcon("pn_srchcol_lb1" , "brick" ) asmlib.ToIcon("pn_srchcol_lb2" , "package" ) asmlib.ToIcon("pn_srchcol_lb3" , "tag_green" ) @@ -914,10 +902,8 @@ if(CLIENT) then local pnMenu = vguiCreate("DMenu") if(not IsValid(pnMenu)) then pnFrame:Close() asmlib.LogInstance("Menu invalid",sLog..".ListView"); return nil end - local sI = "pn_externdb_cm" - local sP = pnLine:GetColumnText(2) - local mX, mY = inputGetCursorPos() - local sT = ("tool."..gsToolNameL.."."..sI) + local sI, mX, mY = "pn_contextm_", inputGetCursorPos() + local sP, sT = pnLine:GetColumnText(2), ("tool."..gsToolNameL.."."..sI) -- Enable and disable DSV pnMenu:AddOption(languageGetPhrase(sT.."tg"), function() pnLine:SetColumnText(1, ((pnLine:GetColumnText(1) == "V") and "X" or "V")) @@ -929,12 +915,12 @@ if(CLIENT) then if(not IsValid(pOp)) then pnFrame:Close() asmlib.LogInstance("Copy opts invalid",sLog..".ListView"); return nil end pOp:SetIcon(asmlib.ToIcon(sI.."cp")) - pIn:AddOption(languageGetPhrase(sT.."cp1"), - function() asmlib.SetListViewBoxClipboard(pnSelf, mX, mY) end):SetImage(asmlib.ToIcon(sI.."cp1")) - pIn:AddOption(languageGetPhrase(sT.."cp2"), - function() asmlib.SetListViewRowClipboard(pnSelf) end):SetImage(asmlib.ToIcon(sI.."cp2")) - pIn:AddOption(languageGetPhrase(sT.."cp3"), - function() SetClipboardText(sDsv) end):SetImage(asmlib.ToIcon(sI.."cp3")) + pIn:AddOption(languageGetPhrase(sT.."cpbx"), + function() asmlib.SetListViewBoxClipboard(pnSelf, mX, mY) end):SetImage(asmlib.ToIcon(sI.."cpbx")) + pIn:AddOption(languageGetPhrase(sT.."cprw"), + function() asmlib.SetListViewRowClipboard(pnSelf) end):SetImage(asmlib.ToIcon(sI.."cprw")) + pIn:AddOption(languageGetPhrase(sT.."cpth"), + function() SetClipboardText(sDsv) end):SetImage(asmlib.ToIcon(sI.."cpth")) -- Panel data line manipulation for import/export local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."li")) if(not IsValid(pIn)) then pnFrame:Close() @@ -942,12 +928,12 @@ if(CLIENT) then if(not IsValid(pOp)) then pnFrame:Close() asmlib.LogInstance("Internals opts invalid",sLog..".ListView"); return nil end pOp:SetIcon(asmlib.ToIcon(sI.."li")) - pIn:AddOption(languageGetPhrase(sT.."li1"), - function() tpText:Scan(pnLine, true) end):SetImage(asmlib.ToIcon(sI.."li1")) - pIn:AddOption(languageGetPhrase(sT.."li2"), - function() tpText:Scan(pnLine) end):SetImage(asmlib.ToIcon(sI.."li2")) - pIn:AddOption(languageGetPhrase(sT.."li3"), - function() pnSelf:RemoveLine(nIndex) end):SetImage(asmlib.ToIcon(sI.."li3")) + pIn:AddOption(languageGetPhrase(sT.."licg"), + function() tpText:Scan(pnLine, true) end):SetImage(asmlib.ToIcon(sI.."licg")) + pIn:AddOption(languageGetPhrase(sT.."licr"), + function() tpText:Scan(pnLine) end):SetImage(asmlib.ToIcon(sI.."licr")) + pIn:AddOption(languageGetPhrase(sT.."lirm"), + function() pnSelf:RemoveLine(nIndex) end):SetImage(asmlib.ToIcon(sI.."lirm")) -- Move current line around local pIn, pOp = pnMenu:AddSubMenu(languageGetPhrase(sT.."mv")) if(not IsValid(pIn)) then pnFrame:Close() @@ -955,26 +941,26 @@ if(CLIENT) then if(not IsValid(pOp)) then pnFrame:Close() asmlib.LogInstance("Internals opts invalid",sLog..".ListView"); return nil end pOp:SetIcon(asmlib.ToIcon(sI.."mv")) - pIn:AddOption(languageGetPhrase(sT.."mv1"), + pIn:AddOption(languageGetPhrase(sT.."mvup"), function() if(nIndex <= 1) then return end tpText:Swap(pnLine, pnSelf:GetLine(nIndex - 1)) - end):SetImage(asmlib.ToIcon(sI.."mv1")) - pIn:AddOption(languageGetPhrase(sT.."mv2"), + end):SetImage(asmlib.ToIcon(sI.."mvup")) + pIn:AddOption(languageGetPhrase(sT.."mvdn"), function() local nT = #pnSelf:GetLines() if(nIndex >= nT) then return end tpText:Swap(pnLine, pnSelf:GetLine(nIndex + 1)) - end):SetImage(asmlib.ToIcon(sI.."mv2")) - pIn:AddOption(languageGetPhrase(sT.."mv3"), + end):SetImage(asmlib.ToIcon(sI.."mvdn")) + pIn:AddOption(languageGetPhrase(sT.."mvtp"), function() if(nIndex <= 1) then return end tpText:Swap(pnLine, pnSelf:GetLine(1)) - end):SetImage(asmlib.ToIcon(sI.."mv3")) - pIn:AddOption(languageGetPhrase(sT.."mv4"), + end):SetImage(asmlib.ToIcon(sI.."mvtp")) + pIn:AddOption(languageGetPhrase(sT.."mvbt"), function() local nT = #pnSelf:GetLines() if(nIndex >= nT) then return end tpText:Swap(pnLine, pnSelf:GetLine(nT)) - end):SetImage(asmlib.ToIcon(sI.."mv4")) + end):SetImage(asmlib.ToIcon(sI.."mvbt")) -- Populate the sub-menu with all table nicknames local iD, pIn, pOp = 1, nil, nil local makTab = asmlib.GetBuilderID(iD) @@ -989,7 +975,7 @@ if(CLIENT) then asmlib.LogInstance("Settings menu invalid",sLog..".ListView"); return nil end if(not IsValid(pOp)) then pnFrame:Close() asmlib.LogInstance("Settings opts invalid",sLog..".ListView"); return nil end - pOp:SetIcon(asmlib.ToIcon(sI.."st")); pOp:SetTooltip(languageGetPhrase(sI.."stt")) + pOp:SetIcon(asmlib.ToIcon(sI.."st")) end -- When there is at least one DSV table present make table sub-menu if(pIn and pOp) then -- When the sub-menu pointer is available add tables local pTb, pOb = pIn:AddSubMenu(defTab.Nick) @@ -998,15 +984,15 @@ if(CLIENT) then if(not IsValid(pOb)) then pnFrame:Close() asmlib.LogInstance("Manage opts invalid",sLog..".ListView"); return nil end pOb:SetIcon(asmlib.ToIcon(sI.."si")) - pTb:AddOption(languageGetPhrase(sT.."st1"), - function() SetClipboardText(defTab.Nick) end):SetImage(asmlib.ToIcon(sI.."st1")) - pTb:AddOption(languageGetPhrase(sT.."st2"), - function() SetClipboardText(sFile) end):SetImage(asmlib.ToIcon(sI.."st2")) - pTb:AddOption(languageGetPhrase(sT.."st3"), - function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(asmlib.ToIcon(sI.."st3")) - pTb:AddOption(languageGetPhrase(sT.."st4"), - function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(asmlib.ToIcon(sI.."st4")) - pTb:AddOption(languageGetPhrase(sT.."st5"), + pTb:AddOption(languageGetPhrase(sT.."stnk"), + function() SetClipboardText(defTab.Nick) end):SetImage(asmlib.ToIcon(sI.."stnk")) + pTb:AddOption(languageGetPhrase(sT.."stpt"), + function() SetClipboardText(sFile) end):SetImage(asmlib.ToIcon(sI.."stpt")) + pTb:AddOption(languageGetPhrase(sT.."sttm"), + function() SetClipboardText(asmlib.GetDateTime(fileTime(sFile, "DATA"))) end):SetImage(asmlib.ToIcon(sI.."sttm")) + pTb:AddOption(languageGetPhrase(sT.."stsz"), + function() SetClipboardText(tostring(fileSize(sFile, "DATA")).."B") end):SetImage(asmlib.ToIcon(sI.."stsz")) + pTb:AddOption(languageGetPhrase(sT.."sted"), function() -- Edit the database contents using the Luapad addon if(not luapad) then return end -- Luapad is not installed do nothing asmlib.LogInstance("Modify "..asmlib.GetReport(sFile), sLog..".ListView") @@ -1020,15 +1006,15 @@ if(CLIENT) then end -- Luapad is designed not to be closed so we need to make it invisible luapad.Frame:SetVisible(true); luapad.Frame:Center() luapad.Frame:MakePopup(); conElements:Push({luapad.Frame}) - end):SetImage(asmlib.ToIcon(sI.."st5")) - pTb:AddOption(languageGetPhrase(sT.."st6"), + end):SetImage(asmlib.ToIcon(sI.."sted")) + pTb:AddOption(languageGetPhrase(sT.."stdl"), function() fileDelete(sFile) asmlib.LogInstance("Deleted "..asmlib.GetReport(sFile), sLog..".ListView") if(defTab.Nick == "PIECES") then local sCats = fDSV:format(sP, "CATEGORY") if(fileExists(sCats,"DATA")) then fileDelete(sCats) -- Delete category when present asmlib.LogInstance("Deleted "..asmlib.GetReport(sCats), sLog..".ListView") end end - end):SetImage(asmlib.ToIcon(sI.."st6")) + end):SetImage(asmlib.ToIcon(sI.."stdl")) end end iD = (iD + 1); makTab = asmlib.GetBuilderID(iD) @@ -1215,10 +1201,8 @@ if(CLIENT) then asmlib.SetAsmConvar(oPly, "model" , uiMod) end -- Copy the line model to the clipboard so it can be pasted with Ctrl+V pnListView.OnRowRightClick = function(pnSelf, nIndex, pnLine) - local sI = "pn_routine_cm" - local sT = "tool.trackassembly."..sI - local mX, mY = inputGetCursorPos() - local sTyp = pnLine:GetColumnText(3) + local sI, mX, mY = "pn_contextm_", inputGetCursorPos() + local sT, sTyp = "tool.trackassembly."..sI, pnLine:GetColumnText(3) local bEx = asmlib.GetAsmConvar("exportdb", "BUL") local sID = asmlib.WorkshopID(sTyp) local pMenu = vguiCreate("DMenu") @@ -1233,8 +1217,8 @@ if(CLIENT) then pOp:SetIcon(asmlib.ToIcon(sI.."cp")) pIn:AddOption(languageGetPhrase(sT.."cpmd"), function() SetClipboardText(pnLine:GetColumnText(5)) end):SetImage(asmlib.ToIcon(sI.."cpmd")) - pIn:AddOption(languageGetPhrase(sT.."cpbv"), - function() asmlib.SetListViewBoxClipboard(pnSelf, mX, mY) end):SetImage(asmlib.ToIcon(sI.."cpbv")) + pIn:AddOption(languageGetPhrase(sT.."cpbx"), + function() asmlib.SetListViewBoxClipboard(pnSelf, mX, mY) end):SetImage(asmlib.ToIcon(sI.."cpbx")) pIn:AddOption(languageGetPhrase(sT.."cprw"), function() asmlib.SetListViewRowClipboard(pnSelf) end):SetImage(asmlib.ToIcon(sI.."cprw")) -- Handle workshop specific options @@ -1244,8 +1228,10 @@ if(CLIENT) then if(not IsValid(pIn)) then LogInstance("Base WS invalid"); return nil end pOp:SetIcon(asmlib.ToIcon(sI.."ws")) - pIn:AddOption(languageGetPhrase(sT.."wsid"), function() SetClipboardText(sID) end):SetIcon(asmlib.ToIcon(sI.."wsid")) - pIn:AddOption(languageGetPhrase(sT.."wsop"), function() guiOpenURL(sUR:format(sID)) end):SetIcon(asmlib.ToIcon(sI.."wsop")) + pIn:AddOption(languageGetPhrase(sT.."wsid"), + function() SetClipboardText(sID) end):SetIcon(asmlib.ToIcon(sI.."wsid")) + pIn:AddOption(languageGetPhrase(sT.."wsop"), + function() guiOpenURL(sUR:format(sID)) end):SetIcon(asmlib.ToIcon(sI.."wsop")) end -- Export database contents if(bEx) then @@ -1255,17 +1241,19 @@ if(CLIENT) then pOp:SetIcon(asmlib.ToIcon(sI.."ex")) pIn:AddOption(languageGetPhrase(sT.."exdv"), function() + asmlib.SetAsmConvar(oPly, "exportdb", 0) local oPly = LocalPlayer(); if(not asmlib.IsPlayer(oPly)) then asmlib.LogInstance("Player invalid"); return nil end asmlib.LogInstance("Export "..asmlib.GetReport(oPly:Nick(), sTyp)) - asmlib.ExportTypeDSV(sTyp); asmlib.SetAsmConvar(oPly, "exportdb", 0) + asmlib.ExportTypeDSV(sTyp) end):SetIcon(asmlib.ToIcon(sI.."exdv")) pIn:AddOption(languageGetPhrase(sT.."exru"), function() + asmlib.SetAsmConvar(oPly, "exportdb", 0) local oPly = LocalPlayer(); if(not asmlib.IsPlayer(oPly)) then asmlib.LogInstance("Player invalid"); return nil end asmlib.LogInstance("Export "..asmlib.GetReport(oPly:Nick(), sTyp)) - asmlib.ExportTypeRun(sTyp); asmlib.SetAsmConvar(oPly, "exportdb", 0) + asmlib.ExportTypeRun(sTyp) end):SetIcon(asmlib.ToIcon(sI.."exru")) end pMenu:Open() diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index fc06b87d..a5e5b29f 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1733,22 +1733,26 @@ function OpenNodeMenu(pnBase) local pT, sP = GetNodeTypeRoot(pnBase, 1) if(not IsValid(pT)) then LogInstance("Base root invalid"); return nil end - local sM, sI = GetOpVar("TOOLNAME_NL"), "treemenu_" + local sM, sI = GetOpVar("TOOLNAME_NL"), "pn_contextm_" local sT = "tool."..sM.."."..sI local sID = WorkshopID(pT:GetText()) local bEx = GetAsmConvar("exportdb", "BUL") -- Copy node information - local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."cpy")) + local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."cp")) if(not (IsValid(pIn) and IsValid(pOp))) then LogInstance("Base copy invalid"); return nil end -- Copy various strings - pOp:SetIcon(ToIcon(sI.."cpy")) + pOp:SetIcon(ToIcon(sI.."cp")) if(pnBase.Content) then - pIn:AddOption(languageGetPhrase(sT.."cpy_mod"), function() SetClipboardText(pnBase.Content) end):SetIcon(ToIcon(sI.."cpy_mod")) + pIn:AddOption(languageGetPhrase(sT.."cpmd"), + function() SetClipboardText(pnBase.Content) end):SetIcon(ToIcon(sI.."cpmd")) end - pIn:AddOption(languageGetPhrase(sT.."cpy_typ"), function() SetClipboardText(pT:GetText()) end):SetIcon(ToIcon(sI.."cpy_typ")) - pIn:AddOption(languageGetPhrase(sT.."cpy_nam"), function() SetClipboardText(pnBase:GetText()) end):SetIcon(ToIcon(sI.."cpy_nam")) - pIn:AddOption(languageGetPhrase(sT.."cpy_pth"), function() SetClipboardText(sP) end):SetIcon(ToIcon(sI.."cpy_pth")) + pIn:AddOption(languageGetPhrase(sT.."cpty"), + function() SetClipboardText(pT:GetText()) end):SetIcon(ToIcon(sI.."cpty")) + pIn:AddOption(languageGetPhrase(sT.."cpnm"), + function() SetClipboardText(pnBase:GetText()) end):SetIcon(ToIcon(sI.."cpnm")) + pIn:AddOption(languageGetPhrase(sT.."cpth"), + function() SetClipboardText(sP) end):SetIcon(ToIcon(sI.."cpth")) -- Handle workshop if(sID) then local sUR = GetOpVar("FORM_URLADDON") @@ -1756,33 +1760,38 @@ function OpenNodeMenu(pnBase) if(not (IsValid(pIn) and IsValid(pOp))) then LogInstance("Base WS invalid"); return nil end pOp:SetIcon(ToIcon(sI.."ws")) - pIn:AddOption(languageGetPhrase(sT.."ws_cid"), function() SetClipboardText(sID) end):SetIcon(ToIcon(sI.."ws_cid")) - pIn:AddOption(languageGetPhrase(sT.."ws_opp"), function() guiOpenURL(sUR:format(sID)) end):SetIcon(ToIcon(sI.."ws_opp")) + pIn:AddOption(languageGetPhrase(sT.."wsid"), + function() SetClipboardText(sID) end):SetIcon(ToIcon(sI.."wsid")) + pIn:AddOption(languageGetPhrase(sT.."wsop"), + function() guiOpenURL(sUR:format(sID)) end):SetIcon(ToIcon(sI.."wsop")) end -- Panel handling if(not pnBase.Content) then - pMenu:AddOption(languageGetPhrase(sT.."expand"), function() SetNodeExpand(pnBase) end):SetIcon(ToIcon(sI.."expand")) + pMenu:AddOption(languageGetPhrase(sT.."ep"), + function() SetNodeExpand(pnBase) end):SetIcon(ToIcon(sI.."ep")) end -- Export database contents on autorun if(bEx and pnBase == pT) then - local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."exp")) + local pIn, pOp = pMenu:AddSubMenu(languageGetPhrase(sT.."ex")) if(not (IsValid(pIn) and IsValid(pOp))) then LogInstance("Base export invalid"); return nil end - pOp:SetIcon(ToIcon(sI.."exp")) - pIn:AddOption(languageGetPhrase(sT.."exp_dsv"), + pOp:SetIcon(ToIcon(sI.."ex")) + pIn:AddOption(languageGetPhrase(sT.."exdv"), function() + SetAsmConvar(oPly, "exportdb", 0) local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then LogInstance("Player invalid"); return nil end LogInstance("Export "..GetReport(oPly:Nick(), pT:GetText())) - ExportTypeDSV(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) - end):SetIcon(ToIcon(sI.."exp_dsv")) - pIn:AddOption(languageGetPhrase(sT.."exp_run"), + ExportTypeDSV(pT:GetText()) + end):SetIcon(ToIcon(sI.."exdv")) + pIn:AddOption(languageGetPhrase(sT.."exru"), function() + SetAsmConvar(oPly, "exportdb", 0) local oPly = LocalPlayer(); if(not IsPlayer(oPly)) then LogInstance("Player invalid"); return nil end LogInstance("Export "..GetReport(oPly:Nick(), pT:GetText())) - ExportTypeRun(pT:GetText()); SetAsmConvar(oPly, "exportdb", 0) - end):SetIcon(ToIcon(sI.."exp_run")) + ExportTypeRun(pT:GetText()) + end):SetIcon(ToIcon(sI.."exru")) end pMenu:Open() end diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index 5a6de253..842e2917 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -134,12 +134,12 @@ tool.trackassembly.pn_externdb_bt5=Копирай времето на табли tool.trackassembly.pn_externdb_bt6=Копирай размера на таблицата tool.trackassembly.pn_externdb_bt7=Редактирай елементите (Luapad) tool.trackassembly.pn_externdb_bt8=Изтрий файла на базата данни -tool.trackassembly.pn_externdb_cm1=Копирай стойността -tool.trackassembly.pn_externdb_cm2=Копирай цялата линия -tool.trackassembly.pn_externdb_cm3=Разреши/Забрани -tool.trackassembly.pn_externdb_cm4=Промени линията -tool.trackassembly.pn_externdb_cm5=Създай нова линия -tool.trackassembly.pn_externdb_cm6=Премахни линията +tool.trackassembly.pn_contextm_1_1=Копирай стойността +tool.trackassembly.pn_contextm_1_2=Копирай цялата линия +tool.trackassembly.pn_contextm_1_3=Разреши/Забрани +tool.trackassembly.pn_contextm_1_4=Промени линията +tool.trackassembly.pn_contextm_1_5=Създай нова линия +tool.trackassembly.pn_contextm_1_6=Премахни линията tool.trackassembly.pn_ext_dsv_lb=Външен DSV списък tool.trackassembly.pn_ext_dsv_hd=Списъка на DSV базите данни е показан тук tool.trackassembly.pn_ext_dsv_1=Активен @@ -160,15 +160,15 @@ tool.trackassembly.pn_routine_lb3=Тип tool.trackassembly.pn_routine_lb4=Име tool.trackassembly.pn_display_lb=Дисплей за парчето tool.trackassembly.pn_pattern_lb=Напишете шаблон -tool.trackassembly.treemenu_cpy=Копирай -tool.trackassembly.treemenu_cpy_mod=Модел -tool.trackassembly.treemenu_cpy_typ=Тип -tool.trackassembly.treemenu_cpy_nam=Име -tool.trackassembly.treemenu_cpy_pth=Път -tool.trackassembly.treemenu_ws=Работилница -tool.trackassembly.treemenu_ws_cid=Копирай WID -tool.trackassembly.treemenu_ws_opp=Отвори страница -tool.trackassembly.treemenu_expand=Разгърни възел +tool.trackassembly.pn_contextm_2_cpy=Копирай +tool.trackassembly.pn_contextm_2_cpy_mod=Модел +tool.trackassembly.pn_contextm_2_cpy_typ=Тип +tool.trackassembly.pn_contextm_2_cpy_nam=Име +tool.trackassembly.pn_contextm_2_cpy_pth=Път +tool.trackassembly.pn_contextm_2_ws=Работилница +tool.trackassembly.pn_contextm_2_ws_cid=Копирай WID +tool.trackassembly.pn_contextm_2_ws_opp=Отвори страница +tool.trackassembly.pn_contextm_2_expand=Разгърни възел tool.trackassembly.sizeucs=Мащаб за показваните координатни системи tool.trackassembly.sizeucs_con=Мащаб UCS\: tool.trackassembly.maxstatts=Дефинира след колко опита за натрупване на парче ще се изведе грешка diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 34e048f6..f11532a6 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -115,6 +115,37 @@ tool.trackassembly.subfolder=Select the track category to use by expanding the f tool.trackassembly.subfolder_con=Track category\: tool.trackassembly.workmode=Change this option to select a different working mode tool.trackassembly.workmode_con=Work mode\: +tool.trackassembly.pn_contextm_cp=Copy +tool.trackassembly.pn_contextm_cpbx=Box +tool.trackassembly.pn_contextm_cprw=Row +tool.trackassembly.pn_contextm_cpty=Type +tool.trackassembly.pn_contextm_cpnm=Name +tool.trackassembly.pn_contextm_cpth=Path +tool.trackassembly.pn_contextm_cpmd=Model +tool.trackassembly.pn_contextm_li=Line +tool.trackassembly.pn_contextm_licg=Change +tool.trackassembly.pn_contextm_licr=Create +tool.trackassembly.pn_contextm_lirm=Remove +tool.trackassembly.pn_contextm_ws=Workshop +tool.trackassembly.pn_contextm_wsid=Copy WID +tool.trackassembly.pn_contextm_wsop=Open page +tool.trackassembly.pn_contextm_ex=Export +tool.trackassembly.pn_contextm_exdv=Extern +tool.trackassembly.pn_contextm_exru=Autorun +tool.trackassembly.pn_contextm_mv=Move +tool.trackassembly.pn_contextm_mvup=Up +tool.trackassembly.pn_contextm_mvdn=Down +tool.trackassembly.pn_contextm_mvtp=Top +tool.trackassembly.pn_contextm_mvbt=Bottom +tool.trackassembly.pn_contextm_st=Tables +tool.trackassembly.pn_contextm_stnk=Copy nick +tool.trackassembly.pn_contextm_stpt=Copy path +tool.trackassembly.pn_contextm_sttm=Copy time +tool.trackassembly.pn_contextm_stsz=Copy size +tool.trackassembly.pn_contextm_sted=Edit (Luapad) +tool.trackassembly.pn_contextm_stdl=Delete files +tool.trackassembly.pn_contextm_tg=Toggle +tool.trackassembly.pn_contextm_ep=Expand node tool.trackassembly.pn_export=Click to export the client database as a file tool.trackassembly.pn_export_lb=Export DB tool.trackassembly.pn_routine=The list of your frequently used track pieces @@ -124,44 +155,12 @@ tool.trackassembly.pn_routine_lb1=Used tool.trackassembly.pn_routine_lb2=End tool.trackassembly.pn_routine_lb3=Type tool.trackassembly.pn_routine_lb4=Name -tool.trackassembly.pn_routine_cmcp=Copy -tool.trackassembly.pn_routine_cmcpmd=Row model -tool.trackassembly.pn_routine_cmcpbv=Box value -tool.trackassembly.pn_routine_cmcprw=Entire row -tool.trackassembly.pn_routine_cmws=Workshop -tool.trackassembly.pn_routine_cmwsid=Copy WID -tool.trackassembly.pn_routine_cmwsop=Open page -tool.trackassembly.pn_routine_cmex=Export -tool.trackassembly.pn_routine_cmexdv=Extern -tool.trackassembly.pn_routine_cmexru=Autorun tool.trackassembly.pn_externdb_hd=External databases by\: tool.trackassembly.pn_externdb_ttt=Current modified configuration value\: tool.trackassembly.pn_externdb_bti=Import tool.trackassembly.pn_externdb_bti_tp=Imports information from the file list into the panel to edit tool.trackassembly.pn_externdb_bte=Export tool.trackassembly.pn_externdb_bte_tp=Exports information from the panel to the file list and apply -tool.trackassembly.pn_externdb_cmcp=Copy -tool.trackassembly.pn_externdb_cmcp1=Box value -tool.trackassembly.pn_externdb_cmcp2=Entire row -tool.trackassembly.pn_externdb_cmcp3=File path -tool.trackassembly.pn_externdb_cmli=Line -tool.trackassembly.pn_externdb_cmli1=Change -tool.trackassembly.pn_externdb_cmli2=Create -tool.trackassembly.pn_externdb_cmli3=Remove -tool.trackassembly.pn_externdb_cmmv=Move -tool.trackassembly.pn_externdb_cmmv1=Up -tool.trackassembly.pn_externdb_cmmv2=Down -tool.trackassembly.pn_externdb_cmmv3=Top -tool.trackassembly.pn_externdb_cmmv4=Bottom -tool.trackassembly.pn_externdb_cmst=Tables -tool.trackassembly.pn_externdb_cmstt=Databases for\: -tool.trackassembly.pn_externdb_cmst1=Copy nick -tool.trackassembly.pn_externdb_cmst2=Copy path -tool.trackassembly.pn_externdb_cmst3=Copy time -tool.trackassembly.pn_externdb_cmst4=Copy size -tool.trackassembly.pn_externdb_cmst5=Edit (Luapad) -tool.trackassembly.pn_externdb_cmst6=Delete files -tool.trackassembly.pn_externdb_cmtg=Toggle tool.trackassembly.pn_ext_dsv_lb=External DSV list tool.trackassembly.pn_ext_dsv_hd=External DSV databases list is displayed here tool.trackassembly.pn_ext_dsv_1=Active @@ -177,18 +176,6 @@ tool.trackassembly.pn_srchcol_lb3=Name tool.trackassembly.pn_srchcol_lb4=End tool.trackassembly.pn_display_lb=Piece display tool.trackassembly.pn_pattern_lb=Write pattern -tool.trackassembly.treemenu_cpy=Copy -tool.trackassembly.treemenu_cpy_mod=Model -tool.trackassembly.treemenu_cpy_typ=Type -tool.trackassembly.treemenu_cpy_nam=Name -tool.trackassembly.treemenu_cpy_pth=Path -tool.trackassembly.treemenu_ws=Workshop -tool.trackassembly.treemenu_ws_cid=Copy WID -tool.trackassembly.treemenu_ws_opp=Open page -tool.trackassembly.treemenu_exp=Export -tool.trackassembly.treemenu_exp_dsv=Extern -tool.trackassembly.treemenu_exp_run=Autorun -tool.trackassembly.treemenu_expand=Expand node tool.trackassembly.sizeucs=Scale set for the coordinate systems displayed tool.trackassembly.sizeucs_con=Scale UCS\: tool.trackassembly.maxstatts=Defines how many stack attempts the script will try before failing diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index a727e128..4bee55b7 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -114,15 +114,15 @@ tool.trackassembly.pn_routine_lb3=Тип tool.trackassembly.pn_routine_lb4=Имя tool.trackassembly.pn_display_lb=Показать кусок tool.trackassembly.pn_pattern_lb=Напишите шаблон -tool.trackassembly.treemenu_cpy=Копировать -tool.trackassembly.treemenu_cpy_mod=Модель -tool.trackassembly.treemenu_cpy_typ=Тип -tool.trackassembly.treemenu_cpy_nam=Имя -tool.trackassembly.treemenu_cpy_pth=Путь -tool.trackassembly.treemenu_ws=Мастерская -tool.trackassembly.treemenu_ws_cid=Копировать WID -tool.trackassembly.treemenu_ws_opp=Открыть страницу -tool.trackassembly.treemenu_expand=Развернуть узел +tool.trackassembly.pn_contextm_2_cpy=Копировать +tool.trackassembly.pn_contextm_2_cpy_mod=Модель +tool.trackassembly.pn_contextm_2_cpy_typ=Тип +tool.trackassembly.pn_contextm_2_cpy_nam=Имя +tool.trackassembly.pn_contextm_2_cpy_pth=Путь +tool.trackassembly.pn_contextm_2_ws=Мастерская +tool.trackassembly.pn_contextm_2_ws_cid=Копировать WID +tool.trackassembly.pn_contextm_2_ws_opp=Открыть страницу +tool.trackassembly.pn_contextm_2_expand=Развернуть узел tool.trackassembly.buttonas<>=Уменьшить/Увеличить tool.trackassembly.buttonas+/-=Начение по умолчаниюз tool.trackassembly.buttonas@M=Запомнить стоимость diff --git a/resource/localization/zh-cn/trackassembly.properties b/resource/localization/zh-cn/trackassembly.properties index aae58676..68620372 100644 --- a/resource/localization/zh-cn/trackassembly.properties +++ b/resource/localization/zh-cn/trackassembly.properties @@ -134,12 +134,12 @@ tool.trackassembly.pn_externdb_bt5=复制表时间 tool.trackassembly.pn_externdb_bt6=复制表尺寸 tool.trackassembly.pn_externdb_bt7=编辑表格内容(Luapad) tool.trackassembly.pn_externdb_bt8=删除数据库条目 -tool.trackassembly.pn_externdb_cm1=复制单元格值 -tool.trackassembly.pn_externdb_cm2=复制整行 -tool.trackassembly.pn_externdb_cm3=启用/禁用 -tool.trackassembly.pn_externdb_cm4=更改线路 -tool.trackassembly.pn_externdb_cm5=创造线路 -tool.trackassembly.pn_externdb_cm6=移除线路 +tool.trackassembly.pn_contextm_1_1=复制单元格值 +tool.trackassembly.pn_contextm_1_2=复制整行 +tool.trackassembly.pn_contextm_1_3=启用/禁用 +tool.trackassembly.pn_contextm_1_4=更改线路 +tool.trackassembly.pn_contextm_1_5=创造线路 +tool.trackassembly.pn_contextm_1_6=移除线路 tool.trackassembly.pn_ext_dsv_lb=外部 DSV 列表 tool.trackassembly.pn_ext_dsv_hd=此处显示外部 DSV 数据库列表 tool.trackassembly.pn_ext_dsv_1=活动的 From 6f85f812ad5c10b7d46d16d9c161199e37d77ff1 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 12 Nov 2024 18:39:45 +0200 Subject: [PATCH 078/114] Added: Some missing translations --- .../localization/bg/trackassembly.properties | 455 +++++++++--------- .../localization/en/trackassembly.properties | 426 ++++++++-------- .../localization/ru/trackassembly.properties | 185 ++++++- 3 files changed, 611 insertions(+), 455 deletions(-) diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index 842e2917..fc92b21d 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -1,9 +1,86 @@  -tool.trackassembly.workmode.1=Обикновено създаване/залепяне -tool.trackassembly.workmode.2=Пресичане на активни точки -tool.trackassembly.workmode.3=Линейна сегментна интерполация -tool.trackassembly.workmode.4=Преобръщане спрямо нормалата -tool.trackassembly.workmode.5=Преход на завой по допирателна +Cleaned_asmtracks=Всички парчета трасе са почистени +Cleanup_asmtracks=Сглобени парчета трасе +SBoxLimit_asmtracks=Достигнахте границата на създадените парчета трасе! +sbox_maxasmtracks=Променете тук за да настроите нещата които са създадени от инструмента на сървъра +sbox_maxasmtracks_con=Общо сегменти\: +tool.trackassembly.activrad=Минимално разстояние за да се избере активна точка +tool.trackassembly.activrad_con=Активен радиус\: +tool.trackassembly.adviser=Управлява изобразяването на позиционен/ъглов съветник +tool.trackassembly.adviser_con=Изобразявай съветника +tool.trackassembly.angsnap=Залепете първото създадено парче на толкова градуса +tool.trackassembly.angsnap_con=Ъглово подравняване\: +tool.trackassembly.appangfst=Приложи ъгловото отместване само върху първото парче за насочване +tool.trackassembly.appangfst_con=Приложи ъгловото на първи +tool.trackassembly.applinfst=Приложи линейното отместване само върху първото парче за позициониране +tool.trackassembly.applinfst_con=Приложи линейното на първи +tool.trackassembly.bgskids=Селекционен код за избор на Телесна-група/Кожа ID +tool.trackassembly.bgskids_con=Телесна-група/Кожа\: +tool.trackassembly.bgskids_def=Запишете селекционен код тук. Например 1,0,0,2,1/3 +tool.trackassembly.bnderrmod=Променете тук за да дефинирате поведение когато клиентите създават парчета извън картата +tool.trackassembly.bnderrmod_con=Режим на ограничение\: +tool.trackassembly.bnderrmod_error=Забранено натрупване/създаване грешка е показана +tool.trackassembly.bnderrmod_generic=Забранено натрупване/създаване съобщение е изписано +tool.trackassembly.bnderrmod_hint=Забранено натрупване/създаване подсказка е изобразена +tool.trackassembly.bnderrmod_log=Забранено натрупване/създаване грешката е записана +tool.trackassembly.bnderrmod_off=Разрешено натрупване/създаване без граници +tool.trackassembly.buttonas+/-=Обърни знака +tool.trackassembly.buttonas<>=Намали/Увеличи +tool.trackassembly.buttonas@=Приложи стойност\: +tool.trackassembly.buttonas@D=Дефолтна стойност +tool.trackassembly.buttonas@M=Запомни стойност +tool.trackassembly.client_var=Клиентски предпочитания на играча. Променливи създадени чрез инструмента конфигурация +tool.trackassembly.crvleanlm=Променете тук за да настроите остротата на наклона при сегментиране на кривата +tool.trackassembly.crvleanlm_con=Наклон на кривината\: +tool.trackassembly.crvturnlm=Променете тук за да настроите остротата на завоя при сегментиране на кривата +tool.trackassembly.crvturnlm_con=Завой на кривината\: +tool.trackassembly.curvefact=Променете тук за да настроите тангенциалния коефициент на кривата +tool.trackassembly.curvefact_con=Фактор на кривата\: +tool.trackassembly.curvsmple=Променете тук за да настроите интерполационните проби на кривата +tool.trackassembly.curvsmple_con=Проби на кривата\: +tool.trackassembly.desc=Сглобява трасе по което да вървят превозните средства +tool.trackassembly.devmode=Когато се разреши пуска режим на разработчик за анализ и дебъг на грешки +tool.trackassembly.devmode_con=Включи режим на разработчик +tool.trackassembly.dtmessage=Управлява времевия интервал между сървърните съобщения на контекстното меню +tool.trackassembly.dtmessage_con=Времеви интервал\: +tool.trackassembly.enctxmall=Когато е разрешено включва специалното контекстно меню за всички предмети +tool.trackassembly.enctxmall_con=Разреши контекстно меню за всички +tool.trackassembly.enctxmenu=Когато е разрешено включва специалното контекстно меню за парчета трасе +tool.trackassembly.enctxmenu_con=Включи контекстно меню +tool.trackassembly.endsvlock=Когато е разрешено заключва файловете на външната DSV база данни +tool.trackassembly.endsvlock_con=Разреши DSV заключването +tool.trackassembly.engunsnap=Управлява залепването когато парчето е изпуснато с физическото оръдие на играча +tool.trackassembly.engunsnap_con=Залепване при изпускане +tool.trackassembly.enmultask=Когато е разрешено включва многозадачната система по време на натрупване +tool.trackassembly.enmultask_con=Включи многозадачна система +tool.trackassembly.enpntmscr=Когато се разреши позволява превключване на активните точки чрез скрола на мишката +tool.trackassembly.enpntmscr_con=Разреши скрола за точките +tool.trackassembly.enradmenu=Когато се пусне позволява управление на режимите на работа чрез кръгово меню +tool.trackassembly.enradmenu_con=Разреши кръгово меню +tool.trackassembly.enwiremod=Когато е разрешено включва разширението за wiremod expression чипа +tool.trackassembly.enwiremod_con=Включи wiremod expression +tool.trackassembly.exportdb=Когато се пусне разрешава експортирането на базата данни в един голям файл +tool.trackassembly.exportdb_con=Разреши експорт на базата данни +tool.trackassembly.factory_reset=Кликнете за да приложите фабрични настройки на конзолните променливи +tool.trackassembly.factory_reset_con=Приложи фабрични настройки +tool.trackassembly.forcelim=Управлява колко сила е необходима за да се счупи заварката +tool.trackassembly.forcelim_con=Якост на заварката\: +tool.trackassembly.freeze=Създава парчето в замразено състояние +tool.trackassembly.freeze_con=Замрази парчето +tool.trackassembly.ghostblnd=Управлява прозрачността на парчето сянка. Малка стойност за по-прозрачно +tool.trackassembly.ghostblnd_con=Преливане на парчета сенки\: +tool.trackassembly.ghostcnt=Управлява изобразяването на броя парчета сенки +tool.trackassembly.ghostcnt_con=Изобразявай парчета сенки +tool.trackassembly.gravity=Управлява гравитацията върху създаденото парче +tool.trackassembly.gravity_con=Приложи гравитация върху парчето +tool.trackassembly.ignphysgn=Пренебрегва хващането с физическо оръдие на парчето създадено/залепено/натрупано +tool.trackassembly.ignphysgn_con=Пренебрегни хващането с физическо оръдие +tool.trackassembly.igntype=Пренебрегва различните типове парчета при лепене/натрупване +tool.trackassembly.igntype_con=Пренебрегни типа на парчето +tool.trackassembly.incsnpang=Дефинира стъпката на ъглово отместване за слайд бутоните +tool.trackassembly.incsnpang_con=Ъглова стъпка\: +tool.trackassembly.incsnplin=Дефинира стъпката на линейно отместване за слайд бутоните +tool.trackassembly.incsnplin_con=Линейна стъпка\: tool.trackassembly.info.1=Създава парчета върху картата или ги сглобява едно спрямо друго tool.trackassembly.info.2=Свързва секциите на трасето със специален сегмент проектиран за това tool.trackassembly.info.3=Създава непрекъснати трасета преминаващи през дадени контролни точки @@ -14,262 +91,192 @@ tool.trackassembly.left.2=Създаване на парче в пресечен tool.trackassembly.left.3=Създаване на интерполирана крива на трасе от предмети tool.trackassembly.left.4=Създаване на огледалните парчета на избрания списък tool.trackassembly.left.5=Създаване на интерполирана крива на трасе от предмети -tool.trackassembly.right.1=Копиране на модела на парчето или отваряне на чести записи -tool.trackassembly.right.2=Копиране на модела на парчето или отваряне на чести записи -tool.trackassembly.right.3=Създаване на възел за сегментна крива. Задръжте SHIFT да обновите -tool.trackassembly.right.4=Регистриране на предмет в списъка за обръщане. Задръжте SHIFT за смяна на модела -tool.trackassembly.right.5=Създаване на възел за сегментна крива. Задръжте SHIFT да обновите -tool.trackassembly.right_use.1=Забранен SCROLL. Копиране на модела на парчето или отваряне на чести записи -tool.trackassembly.right_use.2=Забранен SCROLL. Копиране на модела на парчето или отваряне на чести записи -tool.trackassembly.right_use.3=Генериране на възел от най-близката активна точка на парчето -tool.trackassembly.right_use.4=Забранен SCROLL. Копиране на модела на парчето или отваряне на чести записи -tool.trackassembly.right_use.5=Генериране на възел от най-близката активна точка на парчето -tool.trackassembly.reload.1=Премахване на парче трасе. Задръжте SHIFT за да изберете опора -tool.trackassembly.reload.2=Премахване на парче трасе. Задръжте SHIFT изберете релационен лъч -tool.trackassembly.reload.3=Премахване на възел от интерполираната крива. Задръжте SHIFT за да изчистите стека -tool.trackassembly.reload.4=Изчистване списъка от предмети за обръщане. Ако е празен маха парче -tool.trackassembly.reload.5=Премахване на възел от интерполираната крива. Задръжте SHIFT за да изчистите стека -tool.trackassembly.reload_use.1=Позволете експорт на данните за да отворите DSV мениджър -tool.trackassembly.reload_use.2=Позволете експорт на данните за да отворите DSV мениджър -tool.trackassembly.reload_use.3=Позволете експорт на данните за да отворите DSV мениджър -tool.trackassembly.reload_use.4=Позволете експорт на данните за да отворите DSV мениджър -tool.trackassembly.reload_use.5=Позволете експорт на данните за да отворите DSV мениджър -tool.trackassembly.desc=Сглобява трасе по което да вървят превозните средства -tool.trackassembly.name=Монтаж на трасе -tool.trackassembly.phytype=Изберете типа на физическите свойства от дадените тук -tool.trackassembly.phytype_con=Тип на повърхността\: -tool.trackassembly.phytype_def=<Избери тип на повърхността> -tool.trackassembly.phyname=Изберете името на физическите свойства което да се използва при създаване на трасе като това ще повлияе на повърхностното триене -tool.trackassembly.phyname_con=Име на повърхността\: -tool.trackassembly.phyname_def=<Избери име на повърхността> -tool.trackassembly.bgskids=Селекционен код за избор на Телесна-група/Кожа ID -tool.trackassembly.bgskids_con=Телесна-група/Кожа\: -tool.trackassembly.bgskids_def=Запишете селекционен код тук. Например 1,0,0,2,1/3 +tool.trackassembly.logfile=Когато е включено започва да пише лог поток в специален файл +tool.trackassembly.logfile_con=Включи лог файла +tool.trackassembly.logsmax=Променете тук за да настроите максималните линии за дължина на лога +tool.trackassembly.logsmax_con=Дължина на лога\: tool.trackassembly.mass=Колко тежко ще бъде създаденото парче tool.trackassembly.mass_con=Маса на парчето\: +tool.trackassembly.maxactrad=Променете тук за да настроите максималния радиус за взимане на индекс за снаждане +tool.trackassembly.maxactrad_con=Граница на радиус\: +tool.trackassembly.maxforce=Променете тук за да настроите максималната сила при на заварките +tool.trackassembly.maxforce_con=Граница на сила\: +tool.trackassembly.maxfruse=Променете тук за да настроите дълбочината на често срещаните парчета в списъка +tool.trackassembly.maxfruse_con=Чести парчета\: +tool.trackassembly.maxghcnt=Променете тук за да настроите максималния брой парчета сенки при натрупване +tool.trackassembly.maxghcnt_con=Граница на парчета сенки\: +tool.trackassembly.maxlinear=Променете тук за да настроите максималното отместване на парчето +tool.trackassembly.maxlinear_con=Граница на отместване\: +tool.trackassembly.maxmass=Променете тук за да настроите максималната маза на парчетата при създаване +tool.trackassembly.maxmass_con=Граница на маса\: +tool.trackassembly.maxmenupr=Променете тук за да използвате различен брой знаци след десетичната точка +tool.trackassembly.maxmenupr_con=Десетични знаци\: +tool.trackassembly.maxspmarg=Променете тук за да настроите маржа на разстоянието от предишното създаване +tool.trackassembly.maxspmarg_con=Марж на създаване\: +tool.trackassembly.maxstatts=Дефинира след колко опита за натрупване на парче ще се изведе грешка +tool.trackassembly.maxstatts_con=Опити за натрупване\: +tool.trackassembly.maxstcnt=Променете тук за да настроите максималния брой парчета в режим на натрупване +tool.trackassembly.maxstcnt_con=Граница на натрупване\: +tool.trackassembly.maxtrmarg=Променете тук за да използвате различен интервал между проследяванията +tool.trackassembly.maxtrmarg_con=Марж на проследяване\: +tool.trackassembly.modedb=Променете тук за да дефинирате поведението при съхранение на базата данни +tool.trackassembly.modedb_con=Режим на базата\: +tool.trackassembly.modedb_lua=Използвайте директно съхранение в кеша +tool.trackassembly.modedb_sql=Кеширане само на заявените записи tool.trackassembly.model=Изберете парче за да започнете/продължите трасето си избирайки типа в дървото и кликвайки на листо tool.trackassembly.model_con=Модел на парчето\: -tool.trackassembly.activrad=Минимално разстояние за да се избере активна точка -tool.trackassembly.activrad_con=Активен радиус\: -tool.trackassembly.stackcnt=Максимален брой парчета които може да се създадат при натрупване -tool.trackassembly.stackcnt_con=Брой парчета\: -tool.trackassembly.angsnap=Залепете първото създадено парче на толкова градуса -tool.trackassembly.angsnap_con=Ъглово подравняване\: -tool.trackassembly.resetvars=Цъкнете за да нулирате допълнителните стойности -tool.trackassembly.resetvars_con=V Нулиране на променливите V +tool.trackassembly.name=Монтаж на трасе tool.trackassembly.nextpic=Допълнително отместване на началото по тангаж tool.trackassembly.nextpic_con=Тангаж на началото\: -tool.trackassembly.nextyaw=Допълнително отместване на началото по азимут -tool.trackassembly.nextyaw_con=Азимут на началото\: tool.trackassembly.nextrol=Допълнително отместване на началото по крен tool.trackassembly.nextrol_con=Крен на началото\: tool.trackassembly.nextx=Допълнително отместване на началото по абсциса tool.trackassembly.nextx_con=Отместване по абсциса\: tool.trackassembly.nexty=Допълнително отместване на началото по ордината tool.trackassembly.nexty_con=Отместване по ордината\: +tool.trackassembly.nextyaw=Допълнително отместване на началото по азимут +tool.trackassembly.nextyaw_con=Азимут на началото\: tool.trackassembly.nextz=Допълнително отместване на началото по апликата tool.trackassembly.nextz_con=Отместване по апликата\: -tool.trackassembly.gravity=Управлява гравитацията върху създаденото парче -tool.trackassembly.gravity_con=Приложи гравитация върху парчето -tool.trackassembly.weld=Създава заварки между парчетата или парчета/опора -tool.trackassembly.weld_con=Създай заварка -tool.trackassembly.forcelim=Управлява колко сила е необходима за да се счупи заварката -tool.trackassembly.forcelim_con=Якост на заварката\: -tool.trackassembly.ignphysgn=Пренебрегва хващането с физическо оръдие на парчето създадено/залепено/натрупано -tool.trackassembly.ignphysgn_con=Пренебрегни хващането с физическо оръдие tool.trackassembly.nocollide=Създава не-сблъсък между парчетата или парчета/опора tool.trackassembly.nocollide_con=Създай не-сблъсък tool.trackassembly.nocollidew=Създава не-сблъсък между парчетата и света tool.trackassembly.nocollidew_con=Създай не-сблъсък свят -tool.trackassembly.freeze=Създава парчето в замразено състояние -tool.trackassembly.freeze_con=Замрази парчето -tool.trackassembly.igntype=Пренебрегва различните типове парчета при лепене/натрупване -tool.trackassembly.igntype_con=Пренебрегни типа на парчето -tool.trackassembly.spnflat=Следващото парче ще бъде създадено/залепено/натрупано хоризонтално -tool.trackassembly.spnflat_con=Създай хоризонтално -tool.trackassembly.spawncn=Създава парчето в центъра иначе спрямо избраната активна точка -tool.trackassembly.spawncn_con=Начало спрямо центъра -tool.trackassembly.surfsnap=Залепи парчето по повърхнината към която сочи потребителя -tool.trackassembly.surfsnap_con=Залепи по повърхнината -tool.trackassembly.appangfst=Приложи ъгловото отместване само върху първото парче за насочване -tool.trackassembly.appangfst_con=Приложи ъгловото на първи -tool.trackassembly.applinfst=Приложи линейното отместване само върху първото парче за позициониране -tool.trackassembly.applinfst_con=Приложи линейното на първи -tool.trackassembly.adviser=Управлява изобразяването на позиционен/ъглов съветник -tool.trackassembly.adviser_con=Изобразявай съветника -tool.trackassembly.pntasist=Управлява изобразяването на асистента за лепене -tool.trackassembly.pntasist_con=Изобразявай асистента -tool.trackassembly.ghostcnt=Управлява изобразяването на броя парчета сенки -tool.trackassembly.ghostcnt_con=Изобразявай парчета сенки -tool.trackassembly.ghostblnd=Управлява прозрачността на парчето сянка. Малка стойност за по-прозрачно -tool.trackassembly.ghostblnd_con=Преливане на парчета сенки\: -tool.trackassembly.dtmessage=Управлява времевия интервал между сървърните съобщения на контекстното меню -tool.trackassembly.dtmessage_con=Времеви интервал\: -tool.trackassembly.engunsnap=Управлява залепването когато парчето е изпуснато с физическото оръдие на играча -tool.trackassembly.engunsnap_con=Залепване при изпускане -tool.trackassembly.upspanchor=Включете за обновяване на опората при всяко създаване без натрупвате -tool.trackassembly.upspanchor_con=Обнови опората при създаване -tool.trackassembly.type=Изберете типа трасе което да използвате като разширите папката -tool.trackassembly.type_con=Тип трасе\: -tool.trackassembly.subfolder=Изберете категорията трасе която да използвате като разширите папката -tool.trackassembly.subfolder_con=Категория трасе\: -tool.trackassembly.workmode=Сменете тази опция за да изберете различен режим на работа -tool.trackassembly.workmode_con=Работен режим\: +tool.trackassembly.nonrep_var=Контроли за не-репликирани променливи. Приемат различни стойности на сървъра и клиента +tool.trackassembly.phyname=Изберете името на физическите свойства което да се използва при създаване на трасе като това ще повлияе на повърхностното триене +tool.trackassembly.phyname_con=Име на повърхността\: +tool.trackassembly.phyname_def=<Избери име на повърхността> +tool.trackassembly.phytype=Изберете типа на физическите свойства от дадените тук +tool.trackassembly.phytype_con=Тип на повърхността\: +tool.trackassembly.phytype_def=<Избери тип на повърхността> +tool.trackassembly.pn_contextm_cp=Копирай +tool.trackassembly.pn_contextm_cpbx=Клетка +tool.trackassembly.pn_contextm_cpmd=Модел +tool.trackassembly.pn_contextm_cpnm=Име +tool.trackassembly.pn_contextm_cprw=Ред +tool.trackassembly.pn_contextm_cpth=Път +tool.trackassembly.pn_contextm_cpty=Тип +tool.trackassembly.pn_contextm_ep=Разгъни +tool.trackassembly.pn_contextm_ex=Съхрани +tool.trackassembly.pn_contextm_exdv=Външно +tool.trackassembly.pn_contextm_exru=Скрипт +tool.trackassembly.pn_contextm_li=Линия +tool.trackassembly.pn_contextm_licg=Промени +tool.trackassembly.pn_contextm_licr=Създай +tool.trackassembly.pn_contextm_lirm=Премахни +tool.trackassembly.pn_contextm_mv=Премести +tool.trackassembly.pn_contextm_mvbt=Отдолу +tool.trackassembly.pn_contextm_mvdn=Долу +tool.trackassembly.pn_contextm_mvtp=Отгоре +tool.trackassembly.pn_contextm_mvup=Горе +tool.trackassembly.pn_contextm_st=Таблици +tool.trackassembly.pn_contextm_stdl=Изтрий +tool.trackassembly.pn_contextm_sted=Редактирай (Luapad) +tool.trackassembly.pn_contextm_stnk=Копирай ника +tool.trackassembly.pn_contextm_stpt=Копирай пътя +tool.trackassembly.pn_contextm_stsz=Копирай размера +tool.trackassembly.pn_contextm_sttm=Копирай времето +tool.trackassembly.pn_contextm_tg=Превключи +tool.trackassembly.pn_contextm_ws=Работилница +tool.trackassembly.pn_contextm_wsid=Копирай WID +tool.trackassembly.pn_contextm_wsop=Отвори URL +tool.trackassembly.pn_display=Моделът на вашето парче трасе се показва тук +tool.trackassembly.pn_display_lb=Дисплей за парчето tool.trackassembly.pn_export=Цъкнете за да съхраните базата данни на файл tool.trackassembly.pn_export_lb=Съхрани DB -tool.trackassembly.pn_routine=Списъкът с редовно използваните ви парчета трасе -tool.trackassembly.pn_routine_hd=Редовни парчета на\: -tool.trackassembly.pn_externdb=Налични външни бази данни на\: -tool.trackassembly.pn_externdb_hd=Външни бази данни на\: -tool.trackassembly.pn_externdb_ttt=Текущата стойност от конфигурацията\: -tool.trackassembly.pn_externdb_bti=Импорт -tool.trackassembly.pn_externdb_bti_tp=Импортира информацията от файла към панела за редактиране -tool.trackassembly.pn_externdb_bte=Експорт -tool.trackassembly.pn_externdb_bte_tp=Експортира информацията от панела към файла за използване -tool.trackassembly.pn_externdb_bt1=Копирай уникален префикс -tool.trackassembly.pn_externdb_bt2=Копирай пътя към DSV папката -tool.trackassembly.pn_externdb_bt3=Копирай ника на таблицата -tool.trackassembly.pn_externdb_bt4=Копирай пътя към таблицата -tool.trackassembly.pn_externdb_bt5=Копирай времето на таблицата -tool.trackassembly.pn_externdb_bt6=Копирай размера на таблицата -tool.trackassembly.pn_externdb_bt7=Редактирай елементите (Luapad) -tool.trackassembly.pn_externdb_bt8=Изтрий файла на базата данни -tool.trackassembly.pn_contextm_1_1=Копирай стойността -tool.trackassembly.pn_contextm_1_2=Копирай цялата линия -tool.trackassembly.pn_contextm_1_3=Разреши/Забрани -tool.trackassembly.pn_contextm_1_4=Промени линията -tool.trackassembly.pn_contextm_1_5=Създай нова линия -tool.trackassembly.pn_contextm_1_6=Премахни линията -tool.trackassembly.pn_ext_dsv_lb=Външен DSV списък -tool.trackassembly.pn_ext_dsv_hd=Списъка на DSV базите данни е показан тук tool.trackassembly.pn_ext_dsv_1=Активен tool.trackassembly.pn_ext_dsv_2=Уникален префикс на базата tool.trackassembly.pn_ext_dsv_3=Допълнителна информация -tool.trackassembly.pn_display=Моделът на вашето парче трасе се показва тук +tool.trackassembly.pn_ext_dsv_hd=Списъка на DSV базите данни е показан тук +tool.trackassembly.pn_ext_dsv_lb=Външен DSV списък +tool.trackassembly.pn_externdb_bte=Експорт +tool.trackassembly.pn_externdb_bte_tp=Експортира информацията от панела към файла за използване +tool.trackassembly.pn_externdb_bti=Импорт +tool.trackassembly.pn_externdb_bti_tp=Импортира информацията от файла към панела за редактиране +tool.trackassembly.pn_externdb_hd=Външни бази данни на\: +tool.trackassembly.pn_externdb_ttt=Текущата стойност от конфигурацията\: tool.trackassembly.pn_pattern=Напишете шаблон тук и натиснете ЕНТЪР за да извършите търсене +tool.trackassembly.pn_pattern_lb=Напишете шаблон +tool.trackassembly.pn_routine=Списъкът с редовно използваните ви парчета трасе +tool.trackassembly.pn_routine_hd=Редовни парчета на\: +tool.trackassembly.pn_routine_lb1=Срок +tool.trackassembly.pn_routine_lb2=Ръб +tool.trackassembly.pn_routine_lb3=Тип +tool.trackassembly.pn_routine_lb4=Име +tool.trackassembly.pn_routine_lb=Рутинни обекти tool.trackassembly.pn_srchcol=Изберете по коя колона да извършите търсене -tool.trackassembly.pn_srchcol_lb=<Търси по> tool.trackassembly.pn_srchcol_lb1=Модел tool.trackassembly.pn_srchcol_lb2=Тип tool.trackassembly.pn_srchcol_lb3=Име tool.trackassembly.pn_srchcol_lb4=Ръб -tool.trackassembly.pn_routine_lb=Рутинни обекти -tool.trackassembly.pn_routine_lb1=Срок -tool.trackassembly.pn_routine_lb2=Ръб -tool.trackassembly.pn_routine_lb3=Тип -tool.trackassembly.pn_routine_lb4=Име -tool.trackassembly.pn_display_lb=Дисплей за парчето -tool.trackassembly.pn_pattern_lb=Напишете шаблон -tool.trackassembly.pn_contextm_2_cpy=Копирай -tool.trackassembly.pn_contextm_2_cpy_mod=Модел -tool.trackassembly.pn_contextm_2_cpy_typ=Тип -tool.trackassembly.pn_contextm_2_cpy_nam=Име -tool.trackassembly.pn_contextm_2_cpy_pth=Път -tool.trackassembly.pn_contextm_2_ws=Работилница -tool.trackassembly.pn_contextm_2_ws_cid=Копирай WID -tool.trackassembly.pn_contextm_2_ws_opp=Отвори страница -tool.trackassembly.pn_contextm_2_expand=Разгърни възел -tool.trackassembly.sizeucs=Мащаб за показваните координатни системи -tool.trackassembly.sizeucs_con=Мащаб UCS\: -tool.trackassembly.maxstatts=Дефинира след колко опита за натрупване на парче ще се изведе грешка -tool.trackassembly.maxstatts_con=Опити за натрупване\: -tool.trackassembly.incsnpang=Дефинира стъпката на ъглово отместване за слайд бутоните -tool.trackassembly.incsnpang_con=Ъглова стъпка\: -tool.trackassembly.incsnplin=Дефинира стъпката на линейно отместване за слайд бутоните -tool.trackassembly.incsnplin_con=Линейна стъпка\: -tool.trackassembly.enradmenu=Когато се пусне позволява управление на режимите на работа чрез кръгово меню -tool.trackassembly.enradmenu_con=Разреши кръгово меню -tool.trackassembly.sgradmenu=Променете за да направите на кръговото меню по-гладко. По-голяма стойност за по-гладко -tool.trackassembly.sgradmenu_con=Радиални сегменти\: +tool.trackassembly.pn_srchcol_lb=<Търси по> +tool.trackassembly.pntasist=Управлява изобразяването на асистента за лепене +tool.trackassembly.pntasist_con=Изобразявай асистента +tool.trackassembly.relica_var=Контроли за репликирани променливи. Сървъра изпраща базова стойност до всички клиенти +tool.trackassembly.reload.1=Премахване на парче трасе. Задръжте SHIFT за да изберете опора +tool.trackassembly.reload.2=Премахване на парче трасе. Задръжте SHIFT изберете релационен лъч +tool.trackassembly.reload.3=Премахване на възел от интерполираната крива. Задръжте SHIFT за да изчистите стека +tool.trackassembly.reload.4=Изчистване списъка от предмети за обръщане. Ако е празен маха парче +tool.trackassembly.reload.5=Премахване на възел от интерполираната крива. Задръжте SHIFT за да изчистите стека +tool.trackassembly.reload_use.1=Позволете експорт на данните за да отворите DSV мениджър +tool.trackassembly.reload_use.2=Позволете експорт на данните за да отворите DSV мениджър +tool.trackassembly.reload_use.3=Позволете експорт на данните за да отворите DSV мениджър +tool.trackassembly.reload_use.4=Позволете експорт на данните за да отворите DSV мениджър +tool.trackassembly.reload_use.5=Позволете експорт на данните за да отворите DSV мениджър +tool.trackassembly.resetvars=Цъкнете за да нулирате допълнителните стойности +tool.trackassembly.resetvars_con=V Нулиране на променливите V +tool.trackassembly.right.1=Копиране на модела на парчето или отваряне на чести записи +tool.trackassembly.right.2=Копиране на модела на парчето или отваряне на чести записи +tool.trackassembly.right.3=Създаване на възел за сегментна крива. Задръжте SHIFT да обновите +tool.trackassembly.right.4=Регистриране на предмет в списъка за обръщане. Задръжте SHIFT за смяна на модела +tool.trackassembly.right.5=Създаване на възел за сегментна крива. Задръжте SHIFT да обновите +tool.trackassembly.right_use.1=Забранен SCROLL. Копиране на модела на парчето или отваряне на чести записи +tool.trackassembly.right_use.2=Забранен SCROLL. Копиране на модела на парчето или отваряне на чести записи +tool.trackassembly.right_use.3=Генериране на възел от най-близката активна точка на парчето +tool.trackassembly.right_use.4=Забранен SCROLL. Копиране на модела на парчето или отваряне на чести записи +tool.trackassembly.right_use.5=Генериране на възел от най-близката активна точка на парчето tool.trackassembly.rtradmenu=Променете за да настроите базовия ъгъл на кръговото меню и да преместите опциите tool.trackassembly.rtradmenu_con=Радиална ротация\: -tool.trackassembly.enpntmscr=Когато се разреши позволява превключване на активните точки чрез скрола на мишката -tool.trackassembly.enpntmscr_con=Разреши скрола за точките -tool.trackassembly.exportdb=Когато се пусне разрешава експортирането на базата данни в един голям файл -tool.trackassembly.exportdb_con=Разреши експорт на базата данни -tool.trackassembly.devmode=Когато се разреши пуска режим на разработчик за анализ и дебъг на грешки -tool.trackassembly.devmode_con=Включи режим на разработчик -tool.trackassembly.maxtrmarg=Променете тук за да използвате различен интервал между проследяванията -tool.trackassembly.maxtrmarg_con=Марж на проследяване\: -tool.trackassembly.maxspmarg=Променете тук за да настроите маржа на разстоянието от предишното създаване -tool.trackassembly.maxspmarg_con=Марж на създаване\: -tool.trackassembly.maxmenupr=Променете тук за да използвате различен брой знаци след десетичната точка -tool.trackassembly.maxmenupr_con=Десетични знаци\: -tool.trackassembly.maxmass=Променете тук за да настроите максималната маза на парчетата при създаване -tool.trackassembly.maxmass_con=Граница на маса\: -tool.trackassembly.maxlinear=Променете тук за да настроите максималното отместване на парчето -tool.trackassembly.maxlinear_con=Граница на отместване\: -tool.trackassembly.maxforce=Променете тук за да настроите максималната сила при на заварките -tool.trackassembly.maxforce_con=Граница на сила\: -tool.trackassembly.maxactrad=Променете тук за да настроите максималния радиус за взимане на индекс за снаждане -tool.trackassembly.maxactrad_con=Граница на радиус\: -tool.trackassembly.maxstcnt=Променете тук за да настроите максималния брой парчета в режим на натрупване -tool.trackassembly.maxstcnt_con=Граница на натрупване\: -tool.trackassembly.maxghcnt=Променете тук за да настроите максималния брой парчета сенки при натрупване -tool.trackassembly.maxghcnt_con=Граница на парчета сенки\: -tool.trackassembly.enwiremod=Когато е разрешено включва разширението за wiremod expression чипа -tool.trackassembly.enwiremod_con=Включи wiremod expression -tool.trackassembly.enmultask=Когато е разрешено включва многозадачната система по време на натрупване -tool.trackassembly.enmultask_con=Включи многозадачна система -tool.trackassembly.enctxmenu=Когато е разрешено включва специалното контекстно меню за парчета трасе -tool.trackassembly.enctxmenu_con=Включи контекстно меню -tool.trackassembly.enctxmall=Когато е разрешено включва специалното контекстно меню за всички предмети -tool.trackassembly.enctxmall_con=Разреши контекстно меню за всички -tool.trackassembly.endsvlock=Когато е разрешено заключва файловете на външната DSV база данни -tool.trackassembly.endsvlock_con=Разреши DSV заключването -tool.trackassembly.curvefact=Променете тук за да настроите тангенциалния коефициент на кривата -tool.trackassembly.curvefact_con=Фактор на кривата\: -tool.trackassembly.curvsmple=Променете тук за да настроите интерполационните проби на кривата -tool.trackassembly.curvsmple_con=Проби на кривата\: -tool.trackassembly.crvturnlm=Променете тук за да настроите остротата на завоя при сегментиране на кривата -tool.trackassembly.crvturnlm_con=Завой на кривината\: -tool.trackassembly.crvleanlm=Променете тук за да настроите остротата на наклона при сегментиране на кривата -tool.trackassembly.crvleanlm_con=Наклон на кривината\: +tool.trackassembly.sgradmenu=Променете за да направите на кръговото меню по-гладко. По-голяма стойност за по-гладко +tool.trackassembly.sgradmenu_con=Радиални сегменти\: +tool.trackassembly.sizeucs=Мащаб за показваните координатни системи +tool.trackassembly.sizeucs_con=Мащаб UCS\: +tool.trackassembly.spawncn=Създава парчето в центъра иначе спрямо избраната активна точка +tool.trackassembly.spawncn_con=Начало спрямо центъра tool.trackassembly.spawnrate=Променете тук за да настроите броя сегменти създадени за един сървърен тик tool.trackassembly.spawnrate_con=Ставка на създаване\: -tool.trackassembly.bnderrmod=Променете тук за да дефинирате поведение когато клиентите създават парчета извън картата -tool.trackassembly.bnderrmod_off=Разрешено натрупване/създаване без граници -tool.trackassembly.bnderrmod_log=Забранено натрупване/създаване грешката е записана -tool.trackassembly.bnderrmod_hint=Забранено натрупване/създаване подсказка е изобразена -tool.trackassembly.bnderrmod_generic=Забранено натрупване/създаване съобщение е изписано -tool.trackassembly.bnderrmod_error=Забранено натрупване/създаване грешка е показана -tool.trackassembly.bnderrmod_con=Режим на ограничение\: -tool.trackassembly.modedb=Променете тук за да дефинирате поведението при съхранение на базата данни -tool.trackassembly.modedb_lua=Използвайте директно съхранение в кеша -tool.trackassembly.modedb_sql=Кеширане само на заявените записи -tool.trackassembly.modedb_con=Режим на базата\: -tool.trackassembly.maxfruse=Променете тук за да настроите дълбочината на често срещаните парчета в списъка -tool.trackassembly.maxfruse_con=Чести парчета\: +tool.trackassembly.spnflat=Следващото парче ще бъде създадено/залепено/натрупано хоризонтално +tool.trackassembly.spnflat_con=Създай хоризонтално +tool.trackassembly.stackcnt=Максимален брой парчета които може да се създадат при натрупване +tool.trackassembly.stackcnt_con=Брой парчета\: +tool.trackassembly.subfolder=Изберете категорията трасе която да използвате като разширите папката +tool.trackassembly.subfolder_con=Категория трасе\: +tool.trackassembly.surfsnap=Залепи парчето по повърхнината към която сочи потребителя +tool.trackassembly.surfsnap_con=Залепи по повърхнината tool.trackassembly.timermode_ap=Кликнете за да приложите избраните настройки върху мениджъра на паметта tool.trackassembly.timermode_ap_con=Приложи паметни настройки -tool.trackassembly.timermode_md=Променете тук за да изберете алгоритъм за таймера на мениджъра на паметта -tool.trackassembly.timermode_lf=Променете тук за да настроите времето което всеки запис прекарва в кеша -tool.trackassembly.timermode_lf_con=Живот на записа\: -tool.trackassembly.timermode_rd=Когато е включено намазва кеша като записва празна стойност -tool.trackassembly.timermode_rd_con=Включи триене на записи +tool.trackassembly.timermode_cqt=Кеш таймер по заявка на запис tool.trackassembly.timermode_ct=Когато е включено пуска почистването на боклука след всяко триене tool.trackassembly.timermode_ct_con=Включи почистване на боклука +tool.trackassembly.timermode_lf=Променете тук за да настроите времето което всеки запис прекарва в кеша +tool.trackassembly.timermode_lf_con=Живот на записа\: +tool.trackassembly.timermode_md=Променете тук за да изберете алгоритъм за таймера на мениджъра на паметта tool.trackassembly.timermode_mem=Мениджър на паметта за SQL таблица\: -tool.trackassembly.timermode_cqt=Кеш таймер по заявка на запис tool.trackassembly.timermode_obj=Таймерен обект закачен за запис -tool.trackassembly.factory_reset=Кликнете за да приложите фабрични настройки на конзолните променливи -tool.trackassembly.factory_reset_con=Приложи фабрични настройки -tool.trackassembly.logfile=Когато е включено започва да пише лог поток в специален файл -tool.trackassembly.logfile_con=Включи лог файла -tool.trackassembly.logsmax=Променете тук за да настроите максималните линии за дължина на лога -tool.trackassembly.logsmax_con=Дължина на лога\: -tool.trackassembly.client_var=Клиентски предпочитания на играча. Променливи създадени чрез инструмента конфигурация -tool.trackassembly.nonrep_var=Контроли за не-репликирани променливи. Приемат различни стойности на сървъра и клиента -tool.trackassembly.relica_var=Контроли за репликирани променливи. Сървъра изпраща базова стойност до всички клиенти -tool.trackassembly.utilities_user=Потребителски настройки +tool.trackassembly.timermode_rd=Когато е включено намазва кеша като записва празна стойност +tool.trackassembly.timermode_rd_con=Включи триене на записи +tool.trackassembly.type=Изберете типа трасе което да използвате като разширите папката +tool.trackassembly.type_con=Тип трасе\: +tool.trackassembly.upspanchor=Включете за обновяване на опората при всяко създаване без натрупвате +tool.trackassembly.upspanchor_con=Обнови опората при създаване tool.trackassembly.utilities_admin=Администраторски настройки -tool.trackassembly.buttonas<>=Намали/Увеличи -tool.trackassembly.buttonas+/-=Обърни знака -tool.trackassembly.buttonas@M=Запомни стойност -tool.trackassembly.buttonas@D=Дефолтна стойност -tool.trackassembly.buttonas@=Приложи стойност\: -sbox_maxasmtracks=Променете тук за да настроите нещата които са създадени от инструмента на сървъра -sbox_maxasmtracks_con=Общо сегменти\: -Cleanup_asmtracks=Сглобени парчета трасе -Cleaned_asmtracks=Всички парчета трасе са почистени -SBoxLimit_asmtracks=Достигнахте границата на създадените парчета трасе! +tool.trackassembly.utilities_user=Потребителски настройки +tool.trackassembly.weld=Създава заварки между парчетата или парчета/опора +tool.trackassembly.weld_con=Създай заварка +tool.trackassembly.workmode.1=Обикновено създаване/залепяне +tool.trackassembly.workmode.2=Пресичане на активни точки +tool.trackassembly.workmode.3=Линейна сегментна интерполация +tool.trackassembly.workmode.4=Преобръщане спрямо нормалата +tool.trackassembly.workmode.5=Преход на завой по допирателна +tool.trackassembly.workmode=Сменете тази опция за да изберете различен режим на работа +tool.trackassembly.workmode_con=Работен режим\: diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index f11532a6..0b082ceb 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -1,9 +1,86 @@  -tool.trackassembly.workmode.1=General spawn/snap pieces -tool.trackassembly.workmode.2=Active point intersection -tool.trackassembly.workmode.3=Curve line segment fitting -tool.trackassembly.workmode.4=Surface normal flip over -tool.trackassembly.workmode.5=Tangent transition turns +Cleaned_asmtracks=Cleaned up all track pieces +Cleanup_asmtracks=Assembled track pieces +SBoxLimit_asmtracks=You've hit the spawned tracks limit! +sbox_maxasmtracks=Change this to adjust the things spawned via track assembly tool on the server +sbox_maxasmtracks_con=Total segments\: +tool.trackassembly.activrad=Minimum distance needed to select an active point +tool.trackassembly.activrad_con=Active radius\: +tool.trackassembly.adviser=Controls rendering the tool position/angle adviser +tool.trackassembly.adviser_con=Draw adviser +tool.trackassembly.angsnap=Snap the first piece spawned at this much degrees +tool.trackassembly.angsnap_con=Angular alignment\: +tool.trackassembly.appangfst=Apply the angular offsets only on the first piece +tool.trackassembly.appangfst_con=Apply angular on first +tool.trackassembly.applinfst=Apply the linear offsets only on the first piece +tool.trackassembly.applinfst_con=Apply linear on first +tool.trackassembly.bgskids=Selection code of comma delimited Bodygroup/Skin ID +tool.trackassembly.bgskids_con=Bodygroup/Skin\: +tool.trackassembly.bgskids_def=Write selection code here. For example 1,0,0,2,1/3 +tool.trackassembly.bnderrmod=Change this to define the behavior when clients are spawning pieces outside of map bounds +tool.trackassembly.bnderrmod_con=Bounding mode\: +tool.trackassembly.bnderrmod_error=Deny stack/spawn error message is displayed +tool.trackassembly.bnderrmod_generic=Deny stack/spawn generic message is displayed +tool.trackassembly.bnderrmod_hint=Deny stack/spawn hint message is displayed +tool.trackassembly.bnderrmod_log=Deny stack/spawn the error is logged +tool.trackassembly.bnderrmod_off=Allow stack/spawn without restriction +tool.trackassembly.buttonas+/-=Negate value +tool.trackassembly.buttonas<>=Decrement/Increment +tool.trackassembly.buttonas@=Apply value\: +tool.trackassembly.buttonas@D=Default value +tool.trackassembly.buttonas@M=Memorize value +tool.trackassembly.client_var=Client side player preferences. Convars created in the tool client configuration +tool.trackassembly.crvleanlm=Change this to adjust the lean curving sharpness limit for the segment +tool.trackassembly.crvleanlm_con=Curvature lean\: +tool.trackassembly.crvturnlm=Change this to adjust the turn curving sharpness limit for the segment +tool.trackassembly.crvturnlm_con=Curvature turn\: +tool.trackassembly.curvefact=Change this to adjust the curving factor tangent coefficient +tool.trackassembly.curvefact_con=Curve factor\: +tool.trackassembly.curvsmple=Change this to adjust the curving interpolation samples +tool.trackassembly.curvsmple_con=Curve samples\: +tool.trackassembly.desc=Assembles a track for the vehicles to run on +tool.trackassembly.devmode=When enabled turns on the developer mode for tracking and debugging +tool.trackassembly.devmode_con=Enable developer mode +tool.trackassembly.dtmessage=Controls time intervals between context menu server messages +tool.trackassembly.dtmessage_con=Message delta\: +tool.trackassembly.enctxmall=When enabled turns on the tool dedicated context menu for all props +tool.trackassembly.enctxmall_con=Enable context menu for all props +tool.trackassembly.enctxmenu=When enabled turns on the tool dedicated context menu for pieces +tool.trackassembly.enctxmenu_con=Enable context menu +tool.trackassembly.endsvlock=When enabled turns on the external pluggable DSV databases file lock +tool.trackassembly.endsvlock_con=Enable DSV database lock +tool.trackassembly.engunsnap=Controls snapping when the piece is dropped by the player physics gun +tool.trackassembly.engunsnap_con=Enable physics gun snap +tool.trackassembly.enmultask=When enabled turns on the multitasking during stacking mode +tool.trackassembly.enmultask_con=Enable multitasking +tool.trackassembly.enpntmscr=When enabled turns on the switching active points via mouse scroll +tool.trackassembly.enpntmscr_con=Enable point scroll +tool.trackassembly.enradmenu=When enabled turns on the usage of the work mode radial menu +tool.trackassembly.enradmenu_con=Enable radial menu +tool.trackassembly.enwiremod=When enabled turns on the wiremod expression chip extension +tool.trackassembly.enwiremod_con=Enable wire expression +tool.trackassembly.exportdb=When enabled turns on the database export as one large file +tool.trackassembly.exportdb_con=Enable database export +tool.trackassembly.factory_reset=Click this to apply console variables factory settings +tool.trackassembly.factory_reset_con=Apply factory settings +tool.trackassembly.forcelim=Controls how much force is needed to break the weld +tool.trackassembly.forcelim_con=Force limit\: +tool.trackassembly.freeze=Makes the piece spawn in a frozen state +tool.trackassembly.freeze_con=Freeze piece +tool.trackassembly.ghostblnd=Controls ghosts transparency blend. The lower the value more transperent +tool.trackassembly.ghostblnd_con=Ghosts blend\: +tool.trackassembly.ghostcnt=Controls rendering the tool ghosted holder pieces count +tool.trackassembly.ghostcnt_con=Ghosts count\: +tool.trackassembly.gravity=Controls the gravity on the piece spawned +tool.trackassembly.gravity_con=Apply piece gravity +tool.trackassembly.ignphysgn=Ignores physics gun grab on the piece spawned/snapped/stacked +tool.trackassembly.ignphysgn_con=Ignore physics gun +tool.trackassembly.igntype=Makes the tool ignore the different piece types on snapping/stacking +tool.trackassembly.igntype_con=Ignore track type +tool.trackassembly.incsnpang=Defines the angular incremental step when button sliders are used +tool.trackassembly.incsnpang_con=Angular step\: +tool.trackassembly.incsnplin=Defines the linear incremental step when button sliders are used +tool.trackassembly.incsnplin_con=Linear step\: tool.trackassembly.info.1=Spawns pieces on the map or snaps them relative to each other tool.trackassembly.info.2=Connects track sections with dedicated segment designed for that tool.trackassembly.info.3=Creates continuous track layouts passing through given checkpoints @@ -14,269 +91,192 @@ tool.trackassembly.left.2=Spawn track piece at the intersection point tool.trackassembly.left.3=Spawn segmented track interpolation curve tool.trackassembly.left.4=Spawn flipped over list of tracks selected tool.trackassembly.left.5=Spawn segmented track interpolation curve -tool.trackassembly.right.1=Copy track piece model or open frequent pieces frame -tool.trackassembly.right.2=Copy track piece model or open frequent pieces frame -tool.trackassembly.right.3=Create node for the segmented curve. Hold SHIFT to update -tool.trackassembly.right.4=Register entity in the flip over list. Hold SHIFT to change model -tool.trackassembly.right.5=Create node for the segmented curve. Hold SHIFT to update -tool.trackassembly.right_use.1=Disabled SCROLL. Copy track piece model or open frequent pieces frame -tool.trackassembly.right_use.2=Disabled SCROLL. Copy track piece model or open frequent pieces frame -tool.trackassembly.right_use.3=Generate node from the nearest track piece active point -tool.trackassembly.right_use.4=Disabled SCROLL. Copy track piece model or open frequent pieces frame -tool.trackassembly.right_use.5=Generate node from the nearest track piece active point -tool.trackassembly.reload.1=Remove a track piece. Hold SHIFT to select an anchor -tool.trackassembly.reload.2=Remove a track piece. Hold SHIFT to select relation ray -tool.trackassembly.reload.3=Removes a curve interpolation node. Hold SHIFT to clear the stack -tool.trackassembly.reload.4=Clear the flip entities selection list. When empty removes piece -tool.trackassembly.reload.5=Removes a curve interpolation node. Hold SHIFT to clear the stack -tool.trackassembly.reload_use.1=Enable database export to open DSV manager -tool.trackassembly.reload_use.2=Enable database export to open DSV manager -tool.trackassembly.reload_use.3=Enable database export to open DSV manager -tool.trackassembly.reload_use.4=Enable database export to open DSV manager -tool.trackassembly.reload_use.5=Enable database export to open DSV manager -tool.trackassembly.desc=Assembles a track for the vehicles to run on -tool.trackassembly.name=Track assembly -tool.trackassembly.phytype=Select physical properties type of the ones listed here -tool.trackassembly.phytype_con=Material type\: -tool.trackassembly.phytype_def= -tool.trackassembly.bgskids=Selection code of comma delimited Bodygroup/Skin ID -tool.trackassembly.bgskids_con=Bodygroup/Skin\: -tool.trackassembly.bgskids_def=Write selection code here. For example 1,0,0,2,1/3 +tool.trackassembly.logfile=When enabled starts streaming the log into dedicated file +tool.trackassembly.logfile_con=Enable logging file +tool.trackassembly.logsmax=Change this to adjust the log streaming maximum output lines written +tool.trackassembly.logsmax_con=Logging lines\: tool.trackassembly.mass=How heavy the piece spawned will be tool.trackassembly.mass_con=Piece mass\: +tool.trackassembly.maxactrad=Change this to adjust the maximum active radius for obtaining point ID +tool.trackassembly.maxactrad_con=Radius limit\: +tool.trackassembly.maxforce=Change this to adjust the maximum force limit when creating welds +tool.trackassembly.maxforce_con=Force limit\: +tool.trackassembly.maxfruse=Change this to adjust the depth of how many frequently used pieces are there +tool.trackassembly.maxfruse_con=Frequent pieces\: +tool.trackassembly.maxghcnt=Change this to adjust the maximum pieces to be ghosted in stacking mode +tool.trackassembly.maxghcnt_con=Ghosts limit\: +tool.trackassembly.maxlinear=Change this to adjust the maximum linear offset on a piece +tool.trackassembly.maxlinear_con=Offset limit\: +tool.trackassembly.maxmass=Change this to adjust the maximum mass that can be applied on a piece +tool.trackassembly.maxmass_con=Mass limit\: +tool.trackassembly.maxmenupr=Change this to adjust the number of the decimal places in the menu +tool.trackassembly.maxmenupr_con=Decimal places\: +tool.trackassembly.maxspmarg=Change this to adjust the distance margin from the previous spawn +tool.trackassembly.maxspmarg_con=Spawn margin\: +tool.trackassembly.maxstatts=Defines how many stack attempts the script will try before failing +tool.trackassembly.maxstatts_con=Stack attempts\: +tool.trackassembly.maxstcnt=Change this to adjust the maximum pieces to be created in stacking mode +tool.trackassembly.maxstcnt_con=Stack limit\: +tool.trackassembly.maxtrmarg=Change this to adjust the time between tool traces +tool.trackassembly.maxtrmarg_con=Trace margin\: +tool.trackassembly.modedb=Change this to define the storage behavior of the track database +tool.trackassembly.modedb_con=Database mode\: +tool.trackassembly.modedb_lua=Utilize direct cache storage +tool.trackassembly.modedb_sql=Cache requested records only tool.trackassembly.model=Select a piece to start/continue your track with by expanding a type and clicking on a node tool.trackassembly.model_con=Piece model\: -tool.trackassembly.activrad=Minimum distance needed to select an active point -tool.trackassembly.activrad_con=Active radius\: -tool.trackassembly.stackcnt=Maximum number of pieces to create while stacking -tool.trackassembly.stackcnt_con=Pieces count\: -tool.trackassembly.angsnap=Snap the first piece spawned at this much degrees -tool.trackassembly.angsnap_con=Angular alignment\: -tool.trackassembly.resetvars=Click to reset the additional values -tool.trackassembly.resetvars_con=V Reset variables V +tool.trackassembly.name=Track assembly tool.trackassembly.nextpic=Additional origin angular pitch offset tool.trackassembly.nextpic_con=Origin pitch\: -tool.trackassembly.nextyaw=Additional origin angular yaw offset -tool.trackassembly.nextyaw_con=Origin yaw\: tool.trackassembly.nextrol=Additional origin angular roll offset tool.trackassembly.nextrol_con=Origin roll\: tool.trackassembly.nextx=Additional origin linear X offset tool.trackassembly.nextx_con=Offset X\: tool.trackassembly.nexty=Additional origin linear Y offset tool.trackassembly.nexty_con=Offset Y\: +tool.trackassembly.nextyaw=Additional origin angular yaw offset +tool.trackassembly.nextyaw_con=Origin yaw\: tool.trackassembly.nextz=Additional origin linear Z offset tool.trackassembly.nextz_con=Offset Z\: -tool.trackassembly.gravity=Controls the gravity on the piece spawned -tool.trackassembly.gravity_con=Apply piece gravity -tool.trackassembly.weld=Creates welds between pieces or pieces/anchor -tool.trackassembly.weld_con=Weld -tool.trackassembly.forcelim=Controls how much force is needed to break the weld -tool.trackassembly.forcelim_con=Force limit\: -tool.trackassembly.ignphysgn=Ignores physics gun grab on the piece spawned/snapped/stacked -tool.trackassembly.ignphysgn_con=Ignore physics gun tool.trackassembly.nocollide=Creates a no-collide between pieces or pieces/anchor tool.trackassembly.nocollide_con=NoCollide tool.trackassembly.nocollidew=Creates a no-collide between pieces and world tool.trackassembly.nocollidew_con=NoCollide world -tool.trackassembly.freeze=Makes the piece spawn in a frozen state -tool.trackassembly.freeze_con=Freeze piece -tool.trackassembly.igntype=Makes the tool ignore the different piece types on snapping/stacking -tool.trackassembly.igntype_con=Ignore track type -tool.trackassembly.spnflat=The next piece will be spawned/snapped/stacked horizontally -tool.trackassembly.spnflat_con=Spawn horizontally -tool.trackassembly.spawncn=Spawns the piece at the center, else spawns relative to the active point chosen -tool.trackassembly.spawncn_con=Origin from center -tool.trackassembly.surfsnap=Snaps the piece to the surface the player is pointing at -tool.trackassembly.surfsnap_con=Snap to trace surface -tool.trackassembly.appangfst=Apply the angular offsets only on the first piece -tool.trackassembly.appangfst_con=Apply angular on first -tool.trackassembly.applinfst=Apply the linear offsets only on the first piece -tool.trackassembly.applinfst_con=Apply linear on first -tool.trackassembly.adviser=Controls rendering the tool position/angle adviser -tool.trackassembly.adviser_con=Draw adviser -tool.trackassembly.pntasist=Controls rendering the tool snap point assistant -tool.trackassembly.pntasist_con=Draw assistant -tool.trackassembly.ghostcnt=Controls rendering the tool ghosted holder pieces count -tool.trackassembly.ghostcnt_con=Ghosts count\: -tool.trackassembly.ghostblnd=Controls ghosts transparency blend. The lower the value more transperent -tool.trackassembly.ghostblnd_con=Ghosts blend\: -tool.trackassembly.dtmessage=Controls time intervals between context menu server messages -tool.trackassembly.dtmessage_con=Message delta\: -tool.trackassembly.engunsnap=Controls snapping when the piece is dropped by the player physics gun -tool.trackassembly.engunsnap_con=Enable physics gun snap -tool.trackassembly.upspanchor=Enable to update the anchor on every spawn when not snapping -tool.trackassembly.upspanchor_con=Update anchor on spawn -tool.trackassembly.type=Select the track type to use by expanding the folder -tool.trackassembly.type_con=Track type\: -tool.trackassembly.subfolder=Select the track category to use by expanding the folder -tool.trackassembly.subfolder_con=Track category\: -tool.trackassembly.workmode=Change this option to select a different working mode -tool.trackassembly.workmode_con=Work mode\: +tool.trackassembly.nonrep_var=Non-replicated convar controls. They have different values on server and client +tool.trackassembly.phyname=Select physical properties name to use when creating the track as this will affect the surface friction +tool.trackassembly.phyname_con=Material name\: +tool.trackassembly.phyname_def= tool.trackassembly.pn_contextm_cp=Copy tool.trackassembly.pn_contextm_cpbx=Box -tool.trackassembly.pn_contextm_cprw=Row -tool.trackassembly.pn_contextm_cpty=Type +tool.trackassembly.pn_contextm_cpmd=Model tool.trackassembly.pn_contextm_cpnm=Name +tool.trackassembly.pn_contextm_cprw=Row tool.trackassembly.pn_contextm_cpth=Path -tool.trackassembly.pn_contextm_cpmd=Model +tool.trackassembly.pn_contextm_cpty=Type +tool.trackassembly.pn_contextm_ep=Expand node +tool.trackassembly.pn_contextm_ex=Export +tool.trackassembly.pn_contextm_exdv=Extern +tool.trackassembly.pn_contextm_exru=Autorun tool.trackassembly.pn_contextm_li=Line tool.trackassembly.pn_contextm_licg=Change tool.trackassembly.pn_contextm_licr=Create tool.trackassembly.pn_contextm_lirm=Remove -tool.trackassembly.pn_contextm_ws=Workshop -tool.trackassembly.pn_contextm_wsid=Copy WID -tool.trackassembly.pn_contextm_wsop=Open page -tool.trackassembly.pn_contextm_ex=Export -tool.trackassembly.pn_contextm_exdv=Extern -tool.trackassembly.pn_contextm_exru=Autorun tool.trackassembly.pn_contextm_mv=Move -tool.trackassembly.pn_contextm_mvup=Up +tool.trackassembly.pn_contextm_mvbt=Bottom tool.trackassembly.pn_contextm_mvdn=Down tool.trackassembly.pn_contextm_mvtp=Top -tool.trackassembly.pn_contextm_mvbt=Bottom +tool.trackassembly.pn_contextm_mvup=Up tool.trackassembly.pn_contextm_st=Tables +tool.trackassembly.pn_contextm_stdl=Delete files +tool.trackassembly.pn_contextm_sted=Edit (Luapad) tool.trackassembly.pn_contextm_stnk=Copy nick tool.trackassembly.pn_contextm_stpt=Copy path -tool.trackassembly.pn_contextm_sttm=Copy time tool.trackassembly.pn_contextm_stsz=Copy size -tool.trackassembly.pn_contextm_sted=Edit (Luapad) -tool.trackassembly.pn_contextm_stdl=Delete files +tool.trackassembly.pn_contextm_sttm=Copy time tool.trackassembly.pn_contextm_tg=Toggle -tool.trackassembly.pn_contextm_ep=Expand node +tool.trackassembly.pn_contextm_ws=Workshop +tool.trackassembly.pn_contextm_wsid=Copy WID +tool.trackassembly.pn_contextm_wsop=Open page +tool.trackassembly.pn_display=The model of your track piece is displayed here +tool.trackassembly.pn_display_lb=Piece display tool.trackassembly.pn_export=Click to export the client database as a file tool.trackassembly.pn_export_lb=Export DB +tool.trackassembly.pn_ext_dsv_1=Active +tool.trackassembly.pn_ext_dsv_2=Database unique prefix +tool.trackassembly.pn_ext_dsv_3=Additional information +tool.trackassembly.pn_ext_dsv_hd=External DSV databases list is displayed here +tool.trackassembly.pn_ext_dsv_lb=External DSV list +tool.trackassembly.pn_externdb_bte=Export +tool.trackassembly.pn_externdb_bte_tp=Exports information from the panel to the file list and apply +tool.trackassembly.pn_externdb_bti=Import +tool.trackassembly.pn_externdb_bti_tp=Imports information from the file list into the panel to edit +tool.trackassembly.pn_externdb_hd=External databases by\: +tool.trackassembly.pn_externdb_ttt=Current modified configuration value\: +tool.trackassembly.pn_pattern=Write a pattern here and hit ENTER to perform a search +tool.trackassembly.pn_pattern_lb=Write pattern tool.trackassembly.pn_routine=The list of your frequently used track pieces tool.trackassembly.pn_routine_hd=Frequent pieces by\: -tool.trackassembly.pn_routine_lb=Routine items tool.trackassembly.pn_routine_lb1=Used tool.trackassembly.pn_routine_lb2=End tool.trackassembly.pn_routine_lb3=Type tool.trackassembly.pn_routine_lb4=Name -tool.trackassembly.pn_externdb_hd=External databases by\: -tool.trackassembly.pn_externdb_ttt=Current modified configuration value\: -tool.trackassembly.pn_externdb_bti=Import -tool.trackassembly.pn_externdb_bti_tp=Imports information from the file list into the panel to edit -tool.trackassembly.pn_externdb_bte=Export -tool.trackassembly.pn_externdb_bte_tp=Exports information from the panel to the file list and apply -tool.trackassembly.pn_ext_dsv_lb=External DSV list -tool.trackassembly.pn_ext_dsv_hd=External DSV databases list is displayed here -tool.trackassembly.pn_ext_dsv_1=Active -tool.trackassembly.pn_ext_dsv_2=Database unique prefix -tool.trackassembly.pn_ext_dsv_3=Additional information -tool.trackassembly.pn_display=The model of your track piece is displayed here -tool.trackassembly.pn_pattern=Write a pattern here and hit ENTER to perform a search +tool.trackassembly.pn_routine_lb=Routine items tool.trackassembly.pn_srchcol=Choose which list column you want to perform a search on -tool.trackassembly.pn_srchcol_lb= tool.trackassembly.pn_srchcol_lb1=Model tool.trackassembly.pn_srchcol_lb2=Type tool.trackassembly.pn_srchcol_lb3=Name tool.trackassembly.pn_srchcol_lb4=End -tool.trackassembly.pn_display_lb=Piece display -tool.trackassembly.pn_pattern_lb=Write pattern -tool.trackassembly.sizeucs=Scale set for the coordinate systems displayed -tool.trackassembly.sizeucs_con=Scale UCS\: -tool.trackassembly.maxstatts=Defines how many stack attempts the script will try before failing -tool.trackassembly.maxstatts_con=Stack attempts\: -tool.trackassembly.incsnpang=Defines the angular incremental step when button sliders are used -tool.trackassembly.incsnpang_con=Angular step\: -tool.trackassembly.incsnplin=Defines the linear incremental step when button sliders are used -tool.trackassembly.incsnplin_con=Linear step\: -tool.trackassembly.enradmenu=When enabled turns on the usage of the work mode radial menu -tool.trackassembly.enradmenu_con=Enable radial menu -tool.trackassembly.sgradmenu=Change this to make the radial menu more round. The higher the smoother -tool.trackassembly.sgradmenu_con=Radial segments\: +tool.trackassembly.pn_srchcol_lb= +tool.trackassembly.pntasist=Controls rendering the tool snap point assistant +tool.trackassembly.pntasist_con=Draw assistant +tool.trackassembly.relica_var=Replicated convar controls. The server value is sent to all clients to use +tool.trackassembly.reload.1=Remove a track piece. Hold SHIFT to select an anchor +tool.trackassembly.reload.2=Remove a track piece. Hold SHIFT to select relation ray +tool.trackassembly.reload.3=Removes a curve interpolation node. Hold SHIFT to clear the stack +tool.trackassembly.reload.4=Clear the flip entities selection list. When empty removes piece +tool.trackassembly.reload.5=Removes a curve interpolation node. Hold SHIFT to clear the stack +tool.trackassembly.reload_use.1=Enable database export to open DSV manager +tool.trackassembly.reload_use.2=Enable database export to open DSV manager +tool.trackassembly.reload_use.3=Enable database export to open DSV manager +tool.trackassembly.reload_use.4=Enable database export to open DSV manager +tool.trackassembly.reload_use.5=Enable database export to open DSV manager +tool.trackassembly.resetvars=Click to reset the additional values +tool.trackassembly.resetvars_con=V Reset variables V +tool.trackassembly.right.1=Copy track piece model or open frequent pieces frame +tool.trackassembly.right.2=Copy track piece model or open frequent pieces frame +tool.trackassembly.right.3=Create node for the segmented curve. Hold SHIFT to update +tool.trackassembly.right.4=Register entity in the flip over list. Hold SHIFT to change model +tool.trackassembly.right.5=Create node for the segmented curve. Hold SHIFT to update +tool.trackassembly.right_use.1=Disabled SCROLL. Copy track piece model or open frequent pieces frame +tool.trackassembly.right_use.2=Disabled SCROLL. Copy track piece model or open frequent pieces frame +tool.trackassembly.right_use.3=Generate node from the nearest track piece active point +tool.trackassembly.right_use.4=Disabled SCROLL. Copy track piece model or open frequent pieces frame +tool.trackassembly.right_use.5=Generate node from the nearest track piece active point tool.trackassembly.rtradmenu=Change this to adjust the radial menu base angle and relocate its options tool.trackassembly.rtradmenu_con=Radial rotation\: -tool.trackassembly.enpntmscr=When enabled turns on the switching active points via mouse scroll -tool.trackassembly.enpntmscr_con=Enable point scroll -tool.trackassembly.exportdb=When enabled turns on the database export as one large file -tool.trackassembly.exportdb_con=Enable database export -tool.trackassembly.devmode=When enabled turns on the developer mode for tracking and debugging -tool.trackassembly.devmode_con=Enable developer mode -tool.trackassembly.maxtrmarg=Change this to adjust the time between tool traces -tool.trackassembly.maxtrmarg_con=Trace margin\: -tool.trackassembly.maxspmarg=Change this to adjust the distance margin from the previous spawn -tool.trackassembly.maxspmarg_con=Spawn margin\: -tool.trackassembly.maxmenupr=Change this to adjust the number of the decimal places in the menu -tool.trackassembly.maxmenupr_con=Decimal places\: -tool.trackassembly.maxmass=Change this to adjust the maximum mass that can be applied on a piece -tool.trackassembly.maxmass_con=Mass limit\: -tool.trackassembly.maxlinear=Change this to adjust the maximum linear offset on a piece -tool.trackassembly.maxlinear_con=Offset limit\: -tool.trackassembly.maxforce=Change this to adjust the maximum force limit when creating welds -tool.trackassembly.maxforce_con=Force limit\: -tool.trackassembly.maxactrad=Change this to adjust the maximum active radius for obtaining point ID -tool.trackassembly.maxactrad_con=Radius limit\: -tool.trackassembly.maxstcnt=Change this to adjust the maximum pieces to be created in stacking mode -tool.trackassembly.maxstcnt_con=Stack limit\: -tool.trackassembly.maxghcnt=Change this to adjust the maximum pieces to be ghosted in stacking mode -tool.trackassembly.maxghcnt_con=Ghosts limit\: -tool.trackassembly.enwiremod=When enabled turns on the wiremod expression chip extension -tool.trackassembly.enwiremod_con=Enable wire expression -tool.trackassembly.enmultask=When enabled turns on the multitasking during stacking mode -tool.trackassembly.enmultask_con=Enable multitasking -tool.trackassembly.enctxmenu=When enabled turns on the tool dedicated context menu for pieces -tool.trackassembly.enctxmenu_con=Enable context menu -tool.trackassembly.enctxmall=When enabled turns on the tool dedicated context menu for all props -tool.trackassembly.enctxmall_con=Enable context menu for all props -tool.trackassembly.endsvlock=When enabled turns on the external pluggable DSV databases file lock -tool.trackassembly.endsvlock_con=Enable DSV database lock -tool.trackassembly.curvefact=Change this to adjust the curving factor tangent coefficient -tool.trackassembly.curvefact_con=Curve factor\: -tool.trackassembly.curvsmple=Change this to adjust the curving interpolation samples -tool.trackassembly.curvsmple_con=Curve samples\: -tool.trackassembly.crvturnlm=Change this to adjust the turn curving sharpness limit for the segment -tool.trackassembly.crvturnlm_con=Curvature turn\: -tool.trackassembly.crvleanlm=Change this to adjust the lean curving sharpness limit for the segment -tool.trackassembly.crvleanlm_con=Curvature lean\: +tool.trackassembly.sgradmenu=Change this to make the radial menu more round. The higher the smoother +tool.trackassembly.sgradmenu_con=Radial segments\: +tool.trackassembly.sizeucs=Scale set for the coordinate systems displayed +tool.trackassembly.sizeucs_con=Scale UCS\: +tool.trackassembly.spawncn=Spawns the piece at the center, else spawns relative to the active point chosen +tool.trackassembly.spawncn_con=Origin from center tool.trackassembly.spawnrate=Change this to adjust the amount of track segments spawned per server tick tool.trackassembly.spawnrate_con=Spawning rate\: -tool.trackassembly.bnderrmod=Change this to define the behavior when clients are spawning pieces outside of map bounds -tool.trackassembly.bnderrmod_off=Allow stack/spawn without restriction -tool.trackassembly.bnderrmod_log=Deny stack/spawn the error is logged -tool.trackassembly.bnderrmod_hint=Deny stack/spawn hint message is displayed -tool.trackassembly.bnderrmod_generic=Deny stack/spawn generic message is displayed -tool.trackassembly.bnderrmod_error=Deny stack/spawn error message is displayed -tool.trackassembly.bnderrmod_con=Bounding mode\: -tool.trackassembly.modedb=Change this to define the storage behavior of the track database -tool.trackassembly.modedb_lua=Utilize direct cache storage -tool.trackassembly.modedb_sql=Cache requested records only -tool.trackassembly.modedb_con=Database mode\: -tool.trackassembly.maxfruse=Change this to adjust the depth of how many frequently used pieces are there -tool.trackassembly.maxfruse_con=Frequent pieces\: +tool.trackassembly.spnflat=The next piece will be spawned/snapped/stacked horizontally +tool.trackassembly.spnflat_con=Spawn horizontally +tool.trackassembly.stackcnt=Maximum number of pieces to create while stacking +tool.trackassembly.stackcnt_con=Pieces count\: +tool.trackassembly.subfolder=Select the track category to use by expanding the folder +tool.trackassembly.subfolder_con=Track category\: +tool.trackassembly.surfsnap=Snaps the piece to the surface the player is pointing at +tool.trackassembly.surfsnap_con=Snap to trace surface tool.trackassembly.timermode_ap=Click this to apply your changes to the SQL memory manager configuration tool.trackassembly.timermode_ap_con=Apply memory settings -tool.trackassembly.timermode_md=Change this to adjust the timer algorithm of the SQL memory manager -tool.trackassembly.timermode_lf=Change this to adjust the amount of time the record spends in the cache -tool.trackassembly.timermode_lf_con=Record life\: -tool.trackassembly.timermode_rd=When enabled wipes the record from the cache by forcing a nil value -tool.trackassembly.timermode_rd_con=Enable record deletion +tool.trackassembly.timermode_cqt=Cache query timer via record request tool.trackassembly.timermode_ct=When enabled forces the garbage collection to run on record deletion tool.trackassembly.timermode_ct_con=Enable garbage collection +tool.trackassembly.timermode_lf=Change this to adjust the amount of time the record spends in the cache +tool.trackassembly.timermode_lf_con=Record life\: +tool.trackassembly.timermode_md=Change this to adjust the timer algorithm of the SQL memory manager tool.trackassembly.timermode_mem=Memory manager for SQL table\: -tool.trackassembly.timermode_cqt=Cache query timer via record request tool.trackassembly.timermode_obj=Object timer attached to cache record -tool.trackassembly.factory_reset=Click this to apply console variables factory settings -tool.trackassembly.factory_reset_con=Apply factory settings -tool.trackassembly.logfile=When enabled starts streaming the log into dedicated file -tool.trackassembly.logfile_con=Enable logging file -tool.trackassembly.logsmax=Change this to adjust the log streaming maximum output lines written -tool.trackassembly.logsmax_con=Logging lines\: -tool.trackassembly.client_var=Client side player preferences. Convars created in the tool client configuration -tool.trackassembly.nonrep_var=Non-replicated convar controls. They have different values on server and client -tool.trackassembly.relica_var=Replicated convar controls. The server value is sent to all clients to use -tool.trackassembly.utilities_user=User settings setup +tool.trackassembly.timermode_rd=When enabled wipes the record from the cache by forcing a nil value +tool.trackassembly.timermode_rd_con=Enable record deletion +tool.trackassembly.type=Select the track type to use by expanding the folder +tool.trackassembly.type_con=Track type\: +tool.trackassembly.upspanchor=Enable to update the anchor on every spawn when not snapping +tool.trackassembly.upspanchor_con=Update anchor on spawn tool.trackassembly.utilities_admin=Admin settings setup -tool.trackassembly.buttonas<>=Decrement/Increment -tool.trackassembly.buttonas+/-=Negate value -tool.trackassembly.buttonas@M=Memorize value -tool.trackassembly.buttonas@D=Default value -tool.trackassembly.buttonas@=Apply value\: -sbox_maxasmtracks=Change this to adjust the things spawned via track assembly tool on the server -sbox_maxasmtracks_con=Total segments\: -Cleanup_asmtracks=Assembled track pieces -Cleaned_asmtracks=Cleaned up all track pieces -SBoxLimit_asmtracks=You've hit the spawned tracks limit! +tool.trackassembly.utilities_user=User settings setup +tool.trackassembly.weld=Creates welds between pieces or pieces/anchor +tool.trackassembly.weld_con=Weld +tool.trackassembly.workmode.1=General spawn/snap pieces +tool.trackassembly.workmode.2=Active point intersection +tool.trackassembly.workmode.3=Curve line segment fitting +tool.trackassembly.workmode.4=Surface normal flip over +tool.trackassembly.workmode.5=Tangent transition turns +tool.trackassembly.workmode=Change this option to select a different working mode +tool.trackassembly.workmode_con=Work mode\: diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index 4bee55b7..2cbf8496 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -80,20 +80,178 @@ tool.trackassembly.subfolder=Выберите категорию дороги д tool.trackassembly.subfolder_con=Категория дороги\: tool.trackassembly.workmode=Измените эту опцию чтобы использовать другой рабочий режим tool.trackassembly.workmode_con=Рабочий режим\: +tool.trackassembly.pn_contextm_cp=Копировать +tool.trackassembly.pn_contextm_cpmd=Модель +tool.trackassembly.pn_contextm_cpnm=Имя +tool.trackassembly.pn_contextm_cpth=Путь +tool.trackassembly.pn_contextm_cpty=Тип +tool.trackassembly.pn_contextm_cpbx=Коробка +tool.trackassembly.pn_contextm_cprw=Ряд +sbox_maxasmtracks=Измените это, чтобы настроить объекты, создаваемые с помощью инструмента сборки треков на сервере +sbox_maxasmtracks_con=Всего сегментов\: +tool.trackassembly.bnderrmod=Измените это, чтобы определить поведение при попытке клиентов создавать объекты за пределами карты +tool.trackassembly.bnderrmod_con=Режим границ\: +tool.trackassembly.bnderrmod_error=Запрет на стек/создание, отображается сообщение об ошибке +tool.trackassembly.bnderrmod_generic=Запрет на стек/создание, отображается общее сообщение +tool.trackassembly.bnderrmod_hint=Запрет на стек/создание, отображается подсказка +tool.trackassembly.bnderrmod_log=Запрет на стек/создание, ошибка логируется +tool.trackassembly.bnderrmod_off=Разрешить стек/создание без ограничений +tool.trackassembly.client_var=Настройки клиента. Консольные переменные создаются в конфигурации инструмента клиента +tool.trackassembly.crvleanlm=Измените это, чтобы настроить ограничение резкости при изгибе сегмента +tool.trackassembly.crvleanlm_con=Наклон кривизны\: +tool.trackassembly.crvturnlm=Измените это, чтобы настроить ограничение резкости при повороте сегмента +tool.trackassembly.crvturnlm_con=Поворот кривизны\: +tool.trackassembly.curvefact=Измените это, чтобы настроить коэффициент касательной кривизны +tool.trackassembly.curvefact_con=Коэффициент кривизны\: +tool.trackassembly.curvsmple=Измените это, чтобы настроить количество интерполяционных образцов кривизны +tool.trackassembly.curvsmple_con=Образцы кривизны\: +tool.trackassembly.devmode=Включает режим разработчика для отслеживания и отладки +tool.trackassembly.devmode_con=Включить режим разработчика +tool.trackassembly.dtmessage=Управляет интервалами времени между серверными сообщениями в контекстном меню +tool.trackassembly.dtmessage_con=Интервал сообщений\: +tool.trackassembly.enctxmall=Включает контекстное меню инструмента для всех объектов +tool.trackassembly.enctxmall_con=Включить контекстное меню для всех объектов +tool.trackassembly.enctxmenu=Включает контекстное меню инструмента для элементов +tool.trackassembly.enctxmenu_con=Включить контекстное меню +tool.trackassembly.endsvlock=Включает блокировку внешней базы данных DSV +tool.trackassembly.endsvlock_con=Включить блокировку базы данных DSV +tool.trackassembly.enmultask=Включает многозадачность в режиме стекового создания +tool.trackassembly.enmultask_con=Включить многозадачность +tool.trackassembly.enpntmscr=Включает переключение активных точек с помощью прокрутки мыши +tool.trackassembly.enpntmscr_con=Включить прокрутку точек +tool.trackassembly.enradmenu=Включает радиальное меню для режима работы +tool.trackassembly.enradmenu_con=Включить радиальное меню +tool.trackassembly.enwiremod=Включает расширение Wiremod для чипа выражений +tool.trackassembly.enwiremod_con=Включить Wiremod +tool.trackassembly.exportdb=Включает экспорт базы данных в один большой файл +tool.trackassembly.exportdb_con=Включить экспорт базы данных +tool.trackassembly.factory_reset=Нажмите, чтобы применить настройки консольных переменных по умолчанию +tool.trackassembly.factory_reset_con=Сброс настроек +tool.trackassembly.ghostblnd=Управляет прозрачностью призрачных объектов. Чем ниже значение, тем более прозрачные +tool.trackassembly.ghostblnd_con=Прозрачность призраков\: +tool.trackassembly.incsnpang=Определяет угловой инкрементный шаг при использовании ползунков +tool.trackassembly.incsnpang_con=Угловой шаг\: +tool.trackassembly.incsnplin=Определяет линейный инкрементный шаг при использовании ползунков +tool.trackassembly.incsnplin_con=Линейный шаг\: +tool.trackassembly.info.1=Создает части трека на карте или прикрепляет их друг к другу +tool.trackassembly.info.2=Соединяет секции трека с помощью специальных сегментов +tool.trackassembly.info.3=Создает непрерывные трассы, проходящие через заданные контрольные точки +tool.trackassembly.info.4=Переворачивает выбранные объекты относительно указанного происхождения и нормали +tool.trackassembly.info.5=Создает плавные повороты, где радиус изменяется при изгибе +tool.trackassembly.left.1=Создать/прикрепить часть трека. Удерживайте SHIFT для стекового создания +tool.trackassembly.left.2=Создать часть трека в точке пересечения +tool.trackassembly.left.3=Создать сегментированную интерполяционную кривую трека +tool.trackassembly.left.4=Создать перевернутый список выбранных треков +tool.trackassembly.left.5=Создать сегментированную интерполяционную кривую трека +tool.trackassembly.logfile=Включает запись журнала в отдельный файл +tool.trackassembly.logfile_con=Включить логирование в файл +tool.trackassembly.logsmax=Измените это, чтобы настроить максимальное количество записей в журнале +tool.trackassembly.logsmax_con=Логирование строк\: +tool.trackassembly.maxactrad=Измените это, чтобы настроить максимальный радиус для получения ID точки +tool.trackassembly.maxactrad_con=Ограничение радиуса\: +tool.trackassembly.maxforce=Измените это, чтобы настроить максимальную силу при создании соединений +tool.trackassembly.maxforce_con=Ограничение силы\: +tool.trackassembly.maxfruse=Измените это, чтобы настроить глубину для часто используемых объектов +tool.trackassembly.maxfruse_con=Часто используемые объекты\: +tool.trackassembly.maxghcnt=Измените это, чтобы настроить максимальное количество объектов для создания призраков в режиме стека +tool.trackassembly.maxghcnt_con=Ограничение призраков\: +tool.trackassembly.maxlinear=Измените это, чтобы настроить максимальное линейное смещение на объекте +tool.trackassembly.maxlinear_con=Ограничение смещения\: +tool.trackassembly.maxmass=Измените это, чтобы настроить максимальную массу, которую можно применить к объекту +tool.trackassembly.maxmass_con=Ограничение массы\: +tool.trackassembly.maxmenupr=Измените это, чтобы настроить количество десятичных знаков в меню +tool.trackassembly.maxmenupr_con=Десятичные знаки\: +tool.trackassembly.maxspmarg=Измените это, чтобы настроить расстояние от предыдущего создания +tool.trackassembly.maxspmarg_con=Маржа создания\: +tool.trackassembly.maxstatts=Определяет, сколько попыток стека скрипт попробует, прежде чем прекратит +tool.trackassembly.maxstatts_con=Попытки стека\: +tool.trackassembly.maxstcnt=Измените это, чтобы настроить максимальное количество объектов в режиме стека +tool.trackassembly.maxstcnt_con=Ограничение стека\: +tool.trackassembly.maxtrmarg=Измените это, чтобы настроить время между трассировками инструмента +tool.trackassembly.maxtrmarg_con=Маржа трассировки\: +tool.trackassembly.modedb=Измените это, чтобы настроить поведение хранения базы данных треков +tool.trackassembly.modedb_con=Режим базы данных\: +tool.trackassembly.modedb_lua=Использовать прямое кеширование +tool.trackassembly.modedb_sql=Кешировать только запрашиваемые записи +tool.trackassembly.nonrep_var=Не реплицируемые консольные переменные. Они имеют разные значения на сервере и клиенте +tool.trackassembly.pn_contextm_ep=Развернуть узел +tool.trackassembly.pn_contextm_ex=Экспортировать +tool.trackassembly.pn_contextm_exdv=Внешний +tool.trackassembly.pn_contextm_exru=Автозапуск +tool.trackassembly.pn_contextm_li=Линия +tool.trackassembly.pn_contextm_licg=Изменить +tool.trackassembly.pn_contextm_licr=Создать +tool.trackassembly.pn_contextm_lirm=Удалить +tool.trackassembly.pn_contextm_mv=Переместить +tool.trackassembly.pn_contextm_mvbt=Вниз +tool.trackassembly.pn_contextm_mvdn=Ниже +tool.trackassembly.pn_contextm_mvtp=Вверх +tool.trackassembly.pn_contextm_mvup=Выше +tool.trackassembly.pn_contextm_st=Таблицы +tool.trackassembly.pn_contextm_stdl=Удалить файлы +tool.trackassembly.pn_contextm_sted=Редактировать (Luapad) +tool.trackassembly.pn_contextm_stnk=Скопировать ник +tool.trackassembly.pn_contextm_stpt=Скопировать путь +tool.trackassembly.pn_contextm_stsz=Скопировать размер +tool.trackassembly.pn_contextm_sttm=Скопировать время +tool.trackassembly.pn_contextm_tg=Переключить +tool.trackassembly.pn_contextm_ws=Мастерская +tool.trackassembly.pn_contextm_wsid=Скопировать WID +tool.trackassembly.pn_contextm_wsop=Открыть страницу +tool.trackassembly.pn_externdb_bte=Экспортировать +tool.trackassembly.pn_externdb_bte_tp=Экспортирует информацию из панели в список файлов и применяет +tool.trackassembly.pn_externdb_bti=Импортировать +tool.trackassembly.pn_externdb_bti_tp=Импортирует информацию из списка файлов в панель для редактирования +tool.trackassembly.pn_externdb_ttt=Текущее измененное значение конфигурации\: +tool.trackassembly.relica_var=Управление константами с репликацией. Значение на сервере передается всем клиентам для использования +tool.trackassembly.reload.1=Удалить элемент трассы. Удерживайте SHIFT для выбора якоря +tool.trackassembly.reload.2=Удалить элемент трассы. Удерживайте SHIFT для выбора луча связи +tool.trackassembly.reload.3=Удалить узел интерполяции кривой. Удерживайте SHIFT для очистки стека +tool.trackassembly.reload.4=Очистить список выбора перевернутых объектов. При пустом удаляет элемент +tool.trackassembly.reload.5=Удалить узел интерполяции кривой. Удерживайте SHIFT для очистки стека +tool.trackassembly.reload_use.1=Включить экспорт базы данных для открытия менеджера DSV +tool.trackassembly.reload_use.2=Включить экспорт базы данных для открытия менеджера DSV +tool.trackassembly.reload_use.3=Включить экспорт базы данных для открытия менеджера DSV +tool.trackassembly.reload_use.4=Включить экспорт базы данных для открытия менеджера DSV +tool.trackassembly.reload_use.5=Включить экспорт базы данных для открытия менеджера DSV +tool.trackassembly.right.1=Копировать модель элемента трассы или открыть окно частых элементов +tool.trackassembly.right.2=Копировать модель элемента трассы или открыть окно частых элементов +tool.trackassembly.right.3=Создать узел для сегментированной кривой. Удерживайте SHIFT для обновления +tool.trackassembly.right.4=Зарегистрировать объект в списке переворота. Удерживайте SHIFT для изменения модели +tool.trackassembly.right.5=Создать узел для сегментированной кривой. Удерживайте SHIFT для обновления +tool.trackassembly.right_use.1=Отключен ПРОКРУТКА. Копировать модель элемента трассы или открыть окно частых элементов +tool.trackassembly.right_use.2=Отключен ПРОКРУТКА. Копировать модель элемента трассы или открыть окно частых элементов +tool.trackassembly.right_use.3=Создать узел из ближайшей активной точки элемента трассы +tool.trackassembly.right_use.4=Отключен ПРОКРУТКА. Копировать модель элемента трассы или открыть окно частых элементов +tool.trackassembly.right_use.5=Создать узел из ближайшей активной точки элемента трассы +tool.trackassembly.rtradmenu=Измените это для настройки основного угла радиального меню и перемещения его опций +tool.trackassembly.rtradmenu_con=Ротация радиального меню\: +tool.trackassembly.sgradmenu=Измените это для округления радиального меню. Чем выше значение, тем плавнее +tool.trackassembly.sgradmenu_con=Сегменты радиального меню\: +tool.trackassembly.sizeucs=Масштаб для отображаемых систем координат +tool.trackassembly.sizeucs_con=Масштаб UCS\: +tool.trackassembly.spawnrate=Измените это для настройки количества сегментов трассы, создаваемых за тик сервера +tool.trackassembly.spawnrate_con=Скорость создания\: +tool.trackassembly.timermode_ap=Нажмите здесь, чтобы применить изменения в конфигурации менеджера памяти SQL +tool.trackassembly.timermode_ap_con=Применить настройки памяти +tool.trackassembly.timermode_cqt=Таймер запроса кэша через запрос записи +tool.trackassembly.timermode_ct=При включении заставляет сборщик мусора запускаться при удалении записи +tool.trackassembly.timermode_ct_con=Включить сборку мусора +tool.trackassembly.timermode_lf=Измените это для настройки времени нахождения записи в кэше +tool.trackassembly.timermode_lf_con=Срок жизни записи\: +tool.trackassembly.timermode_md=Измените это для настройки алгоритма таймера менеджера памяти SQL +tool.trackassembly.timermode_mem=Менеджер памяти для таблицы SQL\: +tool.trackassembly.timermode_obj=Таймер объекта, прикрепленного к записи кэша +tool.trackassembly.timermode_rd=При включении удаляет запись из кэша, присваивая значение nil +tool.trackassembly.timermode_rd_con=Включить удаление записи +tool.trackassembly.utilities_admin=Настройка параметров администратора +tool.trackassembly.utilities_user=Настройка параметров пользователя +tool.trackassembly.workmode.5=Переходы с касательной tool.trackassembly.pn_export=Нажмите чтобы сохранить файл базы данных tool.trackassembly.pn_export_lb=Экспорт БД tool.trackassembly.pn_routine=Список регулярно используемых кусков дороги tool.trackassembly.pn_routine_hd=Часто используемых кусков пользователя\: -tool.trackassembly.pn_externdb=Внешние базы данных доступные для\: tool.trackassembly.pn_externdb_hd=Внешние базы данных для\: -tool.trackassembly.pn_externdb_bt1=Скопировать префикс -tool.trackassembly.pn_externdb_bt2=Скопировать път папку DSV -tool.trackassembly.pn_externdb_bt3=Скопировать ник таблицу -tool.trackassembly.pn_externdb_bt4=Скопировать път таблицу -tool.trackassembly.pn_externdb_bt5=Скопировать время таблицу -tool.trackassembly.pn_externdb_bt6=Скопировать размер таблицу -tool.trackassembly.pn_externdb_bt7=Изменить элементы (Luapad) -tool.trackassembly.pn_externdb_bt8=Удалить файл базы данных tool.trackassembly.pn_ext_dsv_lb=Внешний список DSV tool.trackassembly.pn_ext_dsv_hd=Список внешних баз данных DSV отображается здесь tool.trackassembly.pn_ext_dsv_1=Активный @@ -114,15 +272,6 @@ tool.trackassembly.pn_routine_lb3=Тип tool.trackassembly.pn_routine_lb4=Имя tool.trackassembly.pn_display_lb=Показать кусок tool.trackassembly.pn_pattern_lb=Напишите шаблон -tool.trackassembly.pn_contextm_2_cpy=Копировать -tool.trackassembly.pn_contextm_2_cpy_mod=Модель -tool.trackassembly.pn_contextm_2_cpy_typ=Тип -tool.trackassembly.pn_contextm_2_cpy_nam=Имя -tool.trackassembly.pn_contextm_2_cpy_pth=Путь -tool.trackassembly.pn_contextm_2_ws=Мастерская -tool.trackassembly.pn_contextm_2_ws_cid=Копировать WID -tool.trackassembly.pn_contextm_2_ws_opp=Открыть страницу -tool.trackassembly.pn_contextm_2_expand=Развернуть узел tool.trackassembly.buttonas<>=Уменьшить/Увеличить tool.trackassembly.buttonas+/-=Начение по умолчаниюз tool.trackassembly.buttonas@M=Запомнить стоимость From 6b31ff3a641ff77dc212097af590e604e68960dd Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 12 Nov 2024 19:23:24 +0200 Subject: [PATCH 079/114] Updated: Routine pieces search and list vie use the same column names Updated: Switched to number to hash notation in the frequent pieces panel --- lua/autorun/trackassembly_init.lua | 24 +++++++++---------- .../localization/bg/trackassembly.properties | 13 ++++------ .../localization/en/trackassembly.properties | 13 ++++------ .../localization/fr/trackassembly.properties | 13 ++++------ .../localization/ja/trackassembly.properties | 13 ++++------ .../localization/ru/trackassembly.properties | 13 ++++------ .../zh-cn/trackassembly.properties | 15 ++++-------- 7 files changed, 42 insertions(+), 62 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 306e9920..df1fe815 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -494,10 +494,10 @@ if(CLIENT) then asmlib.ToIcon("pn_contextm_stdl" , "table_delete" ) asmlib.ToIcon("pn_contextm_tg" , "database_connect" ) asmlib.ToIcon("pn_contextm_ep" , "zoom" ) - asmlib.ToIcon("pn_srchcol_lb1" , "brick" ) - asmlib.ToIcon("pn_srchcol_lb2" , "package" ) - asmlib.ToIcon("pn_srchcol_lb3" , "tag_green" ) - asmlib.ToIcon("pn_srchcol_lb4" , "arrow_refresh" ) + asmlib.ToIcon("pn_routine_end" , "arrow_refresh" ) + asmlib.ToIcon("pn_routine_typ" , "package" ) + asmlib.ToIcon("pn_routine_nam" , "tag_green" ) + asmlib.ToIcon("pn_routine_mod" , "brick" ) asmlib.ToIcon("model" , "brick" ) asmlib.ToIcon("mass" , "basket_put" ) asmlib.ToIcon("bgskids" , "layers" ) @@ -1091,10 +1091,10 @@ if(CLIENT) then pnComboBox:SetName(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb")) pnComboBox:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol")) pnComboBox:SetValue(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb1"), 1, false, asmlib.ToIcon("pn_srchcol_lb1")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb2"), 2, false, asmlib.ToIcon("pn_srchcol_lb2")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb3"), 3, false, asmlib.ToIcon("pn_srchcol_lb3")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb4"), 4, false, asmlib.ToIcon("pn_srchcol_lb4")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_mod"), 1, false, asmlib.ToIcon("pn_routine_mod")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_typ"), 2, false, asmlib.ToIcon("pn_srchcol_lb2")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_nam"), 3, false, asmlib.ToIcon("pn_routine_nam")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_end"), 4, false, asmlib.ToIcon("pn_routine_end")) pnComboBox.OnSelect = function(pnSelf, nInd, sVal, anyData) asmlib.LogInstance("Selected "..asmlib.GetReport(nInd,sVal,anyData),sLog..".ComboBox") pnSelf:SetValue(sVal) @@ -1180,10 +1180,10 @@ if(CLIENT) then pnListView:SetSize(xySiz.x,xySiz.y) pnListView:SetName(languageGetPhrase("tool."..gsToolNameL..".pn_routine_lb")) pnListView:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_routine")) - pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_routine_lb1")):SetFixedWidth(wUse) -- (1) - pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_routine_lb2")):SetFixedWidth(wAct) -- (2) - pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_routine_lb3")):SetFixedWidth(wTyp) -- (3) - pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_routine_lb4")):SetFixedWidth(wNam) -- (4) + pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_routine_use")):SetFixedWidth(wUse) -- (1) + pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_routine_end")):SetFixedWidth(wAct) -- (2) + pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_routine_typ")):SetFixedWidth(wTyp) -- (3) + pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_routine_nam")):SetFixedWidth(wNam) -- (4) pnListView:AddColumn(""):SetFixedWidth(0) -- (5) This is actually the hidden model of the piece used. pnListView.OnRowSelected = function(pnSelf, nIndex, pnLine) local uiMod = tostring(pnLine:GetColumnText(5) or asmlib.GetOpVar("MISS_NOMD")) -- Actually the model in the table diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index fc92b21d..befdb3df 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -199,16 +199,13 @@ tool.trackassembly.pn_pattern=Напишете шаблон тук и натис tool.trackassembly.pn_pattern_lb=Напишете шаблон tool.trackassembly.pn_routine=Списъкът с редовно използваните ви парчета трасе tool.trackassembly.pn_routine_hd=Редовни парчета на\: -tool.trackassembly.pn_routine_lb1=Срок -tool.trackassembly.pn_routine_lb2=Ръб -tool.trackassembly.pn_routine_lb3=Тип -tool.trackassembly.pn_routine_lb4=Име +tool.trackassembly.pn_routine_use=Срок +tool.trackassembly.pn_routine_end=Ръб +tool.trackassembly.pn_routine_typ=Тип +tool.trackassembly.pn_routine_nam=Име +tool.trackassembly.pn_routine_mod=Модел tool.trackassembly.pn_routine_lb=Рутинни обекти tool.trackassembly.pn_srchcol=Изберете по коя колона да извършите търсене -tool.trackassembly.pn_srchcol_lb1=Модел -tool.trackassembly.pn_srchcol_lb2=Тип -tool.trackassembly.pn_srchcol_lb3=Име -tool.trackassembly.pn_srchcol_lb4=Ръб tool.trackassembly.pn_srchcol_lb=<Търси по> tool.trackassembly.pntasist=Управлява изобразяването на асистента за лепене tool.trackassembly.pntasist_con=Изобразявай асистента diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 0b082ceb..0ef3775b 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -199,16 +199,13 @@ tool.trackassembly.pn_pattern=Write a pattern here and hit ENTER to perform a se tool.trackassembly.pn_pattern_lb=Write pattern tool.trackassembly.pn_routine=The list of your frequently used track pieces tool.trackassembly.pn_routine_hd=Frequent pieces by\: -tool.trackassembly.pn_routine_lb1=Used -tool.trackassembly.pn_routine_lb2=End -tool.trackassembly.pn_routine_lb3=Type -tool.trackassembly.pn_routine_lb4=Name +tool.trackassembly.pn_routine_use=Used +tool.trackassembly.pn_routine_end=End +tool.trackassembly.pn_routine_typ=Type +tool.trackassembly.pn_routine_nam=Name +tool.trackassembly.pn_routine_mod=Model tool.trackassembly.pn_routine_lb=Routine items tool.trackassembly.pn_srchcol=Choose which list column you want to perform a search on -tool.trackassembly.pn_srchcol_lb1=Model -tool.trackassembly.pn_srchcol_lb2=Type -tool.trackassembly.pn_srchcol_lb3=Name -tool.trackassembly.pn_srchcol_lb4=End tool.trackassembly.pn_srchcol_lb= tool.trackassembly.pntasist=Controls rendering the tool snap point assistant tool.trackassembly.pntasist_con=Draw assistant diff --git a/resource/localization/fr/trackassembly.properties b/resource/localization/fr/trackassembly.properties index dc1862de..25dbc2a4 100644 --- a/resource/localization/fr/trackassembly.properties +++ b/resource/localization/fr/trackassembly.properties @@ -129,15 +129,12 @@ tool.trackassembly.pn_display=Le modèle de votre pièce de piste est affiché i tool.trackassembly.pn_pattern=Écrire un modèle ici et appuyer sur ENTRÉE pour effectuer une recherche tool.trackassembly.pn_srchcol=Choisir la liste de colonne auquel vous voulez effectuer une recherche sur tool.trackassembly.pn_srchcol_lb= -tool.trackassembly.pn_srchcol_lb1=Modèle -tool.trackassembly.pn_srchcol_lb2=Type -tool.trackassembly.pn_srchcol_lb3=Nom -tool.trackassembly.pn_srchcol_lb4=Fin +tool.trackassembly.pn_routine_use=Utilisé +tool.trackassembly.pn_routine_end=Fin +tool.trackassembly.pn_routine_typ=Type +tool.trackassembly.pn_routine_nam=Nom +tool.trackassembly.pn_routine_mod=Modèle tool.trackassembly.pn_routine_lb=Articles de routine -tool.trackassembly.pn_routine_lb1=Utilisé -tool.trackassembly.pn_routine_lb2=Fin -tool.trackassembly.pn_routine_lb3=Type -tool.trackassembly.pn_routine_lb4=Nom tool.trackassembly.pn_display_lb=Affichage pièce tool.trackassembly.pn_pattern_lb=Écrire modèle tool.trackassembly.sizeucs=Calibration de l'échelle pour le système de coordonnées affiché diff --git a/resource/localization/ja/trackassembly.properties b/resource/localization/ja/trackassembly.properties index 87f3ec60..10825483 100644 --- a/resource/localization/ja/trackassembly.properties +++ b/resource/localization/ja/trackassembly.properties @@ -98,15 +98,12 @@ tool.trackassembly.pn_display=プレーやの線路部分ここに映る tool.trackassembly.pn_pattern=ここにパターンを書くとサーチするためにENTERを押して tool.trackassembly.pn_srchcol=サーチするコラムを選択し tool.trackassembly.pn_srchcol_lb=<でサーチ> -tool.trackassembly.pn_srchcol_lb1=モデル -tool.trackassembly.pn_srchcol_lb2=タイプ -tool.trackassembly.pn_srchcol_lb3=ネーム -tool.trackassembly.pn_srchcol_lb4=角 +tool.trackassembly.pn_routine_use=期限 +tool.trackassembly.pn_routine_end=角 +tool.trackassembly.pn_routine_typ=タイプ +tool.trackassembly.pn_routine_nam=ネーム +tool.trackassembly.pn_routine_mod=モデル tool.trackassembly.pn_routine_lb=定番アイテム -tool.trackassembly.pn_routine_lb1=期限 -tool.trackassembly.pn_routine_lb2=角 -tool.trackassembly.pn_routine_lb3=タイプ -tool.trackassembly.pn_routine_lb4=ネーム tool.trackassembly.pn_display_lb=部分を映る tool.trackassembly.pn_pattern_lb=パターンを書く Cleanup_asmtracks=組み立てた線路部分 diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index 2cbf8496..948679a6 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -261,15 +261,12 @@ tool.trackassembly.pn_display=Модель вашего куска дороги tool.trackassembly.pn_pattern=Напишите шаблон здесь и нажмите ВВОД для выполнения поиска tool.trackassembly.pn_srchcol=Выберите столбец для поиска tool.trackassembly.pn_srchcol_lb=<Искать по> -tool.trackassembly.pn_srchcol_lb1=Модель -tool.trackassembly.pn_srchcol_lb2=Тип -tool.trackassembly.pn_srchcol_lb3=Имя -tool.trackassembly.pn_srchcol_lb4=Конец +tool.trackassembly.pn_routine_use=Срок +tool.trackassembly.pn_routine_end=Конец +tool.trackassembly.pn_routine_typ=Тип +tool.trackassembly.pn_routine_nam=Имя +tool.trackassembly.pn_routine_mod=Модель tool.trackassembly.pn_routine_lb=Часто используемых кусков -tool.trackassembly.pn_routine_lb1=Срок -tool.trackassembly.pn_routine_lb2=Конец -tool.trackassembly.pn_routine_lb3=Тип -tool.trackassembly.pn_routine_lb4=Имя tool.trackassembly.pn_display_lb=Показать кусок tool.trackassembly.pn_pattern_lb=Напишите шаблон tool.trackassembly.buttonas<>=Уменьшить/Увеличить diff --git a/resource/localization/zh-cn/trackassembly.properties b/resource/localization/zh-cn/trackassembly.properties index 68620372..1be95ec8 100644 --- a/resource/localization/zh-cn/trackassembly.properties +++ b/resource/localization/zh-cn/trackassembly.properties @@ -149,15 +149,12 @@ tool.trackassembly.pn_display=您的轨道组件的模型显示在此处 tool.trackassembly.pn_pattern=在此写入模式并按 ENTER 执行搜索 tool.trackassembly.pn_srchcol=选择您要执行搜索的列表列 tool.trackassembly.pn_srchcol_lb=<搜索> -tool.trackassembly.pn_srchcol_lb1=模型 -tool.trackassembly.pn_srchcol_lb2=类型 -tool.trackassembly.pn_srchcol_lb3=名称 -tool.trackassembly.pn_srchcol_lb4=结束 +tool.trackassembly.pn_routine_use=使用 +tool.trackassembly.pn_routine_end=结束 +tool.trackassembly.pn_routine_typ=类型 +tool.trackassembly.pn_routine_nam=名称 +tool.trackassembly.pn_routine_mod=模型 tool.trackassembly.pn_routine_lb=常规项目 -tool.trackassembly.pn_routine_lb1=使用 -tool.trackassembly.pn_routine_lb2=结束 -tool.trackassembly.pn_routine_lb3=类型 -tool.trackassembly.pn_routine_lb4=名称 tool.trackassembly.pn_display_lb=组件展示 tool.trackassembly.pn_pattern_lb=写入模式 tool.trackassembly.sizeucs=为显示的坐标系设置的比例 @@ -178,8 +175,6 @@ tool.trackassembly.enpntmscr=启用后,通过鼠标滚动打开切换活动点 tool.trackassembly.enpntmscr_con=启用点滚动 tool.trackassembly.exportdb=启用后,会将数据库导出为一个大文件 tool.trackassembly.exportdb_con=启用数据库导出 -tool.trackassembly.modedb=将其更改为定义轨道数据库的存储行为 -tool.trackassembly.modedb_con=数据库模式\: tool.trackassembly.devmode=启用后,将打开开发人员模式以进行跟踪和调试 tool.trackassembly.devmode_con=启用开发者模式 tool.trackassembly.maxtrmarg=更改此设置以调整工具轨迹之间的时间 From 3221991ff2705f5d41624c914a9442439a0241ac Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 12 Nov 2024 19:30:26 +0200 Subject: [PATCH 080/114] Updated: DSV manager now uses hash notation as well --- lua/autorun/trackassembly_init.lua | 8 ++++---- resource/localization/bg/trackassembly.properties | 6 +++--- resource/localization/en/trackassembly.properties | 6 +++--- resource/localization/fr/trackassembly.properties | 4 ++-- resource/localization/ja/trackassembly.properties | 4 ++-- resource/localization/ru/trackassembly.properties | 6 +++--- resource/localization/zh-cn/trackassembly.properties | 6 +++--- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index df1fe815..7ed88a71 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.804") +asmlib.SetOpVar("TOOL_VERSION","8.805") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -768,9 +768,9 @@ if(CLIENT) then pnListView:SetSize(xySiz.x, xySiz.y) pnListView:SetName(languageGetPhrase("tool."..gsToolNameL..".pn_ext_dsv_lb")) pnListView:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_ext_dsv_hd")) - pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_ext_dsv_1")):SetFixedWidth(wAct) - pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_ext_dsv_2")):SetFixedWidth(wUse - wSrc) - pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_ext_dsv_3")):SetFixedWidth(wSrc) + pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_extdsv_act")):SetFixedWidth(wAct) + pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_extdsv_prf")):SetFixedWidth(wUse - wSrc) + pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_extdsv_inf")):SetFixedWidth(wSrc) -- Next entry to import/export to list view xyPos.y = xyPos.y + xySiz.y + xyDsz.y xySiz.y = nB -- General Y-size of elements diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index befdb3df..5cf39597 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -184,9 +184,9 @@ tool.trackassembly.pn_display=Моделът на вашето парче тра tool.trackassembly.pn_display_lb=Дисплей за парчето tool.trackassembly.pn_export=Цъкнете за да съхраните базата данни на файл tool.trackassembly.pn_export_lb=Съхрани DB -tool.trackassembly.pn_ext_dsv_1=Активен -tool.trackassembly.pn_ext_dsv_2=Уникален префикс на базата -tool.trackassembly.pn_ext_dsv_3=Допълнителна информация +tool.trackassembly.pn_extdsv_act=Активен +tool.trackassembly.pn_extdsv_prf=Уникален префикс на базата +tool.trackassembly.pn_extdsv_inf=Допълнителна информация tool.trackassembly.pn_ext_dsv_hd=Списъка на DSV базите данни е показан тук tool.trackassembly.pn_ext_dsv_lb=Външен DSV списък tool.trackassembly.pn_externdb_bte=Експорт diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index 0ef3775b..aff49a59 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -184,9 +184,9 @@ tool.trackassembly.pn_display=The model of your track piece is displayed here tool.trackassembly.pn_display_lb=Piece display tool.trackassembly.pn_export=Click to export the client database as a file tool.trackassembly.pn_export_lb=Export DB -tool.trackassembly.pn_ext_dsv_1=Active -tool.trackassembly.pn_ext_dsv_2=Database unique prefix -tool.trackassembly.pn_ext_dsv_3=Additional information +tool.trackassembly.pn_extdsv_act=Active +tool.trackassembly.pn_extdsv_prf=Database unique prefix +tool.trackassembly.pn_extdsv_inf=Additional information tool.trackassembly.pn_ext_dsv_hd=External DSV databases list is displayed here tool.trackassembly.pn_ext_dsv_lb=External DSV list tool.trackassembly.pn_externdb_bte=Export diff --git a/resource/localization/fr/trackassembly.properties b/resource/localization/fr/trackassembly.properties index 25dbc2a4..abfbdcd3 100644 --- a/resource/localization/fr/trackassembly.properties +++ b/resource/localization/fr/trackassembly.properties @@ -123,8 +123,8 @@ tool.trackassembly.pn_externdb_bt7=Modifier le contenu de la table (Luapad) tool.trackassembly.pn_externdb_bt8=Supprimer l'entrée de la base de donnée tool.trackassembly.pn_ext_dsv_lb=Liste DSV externe tool.trackassembly.pn_ext_dsv_hd=La liste des base de données DSV sont affichées ici -tool.trackassembly.pn_ext_dsv_1=Active -tool.trackassembly.pn_ext_dsv_2=Préfixe unique de la base de donnée +tool.trackassembly.pn_extdsv_act=Active +tool.trackassembly.pn_extdsv_prf=Préfixe unique de la base de donnée tool.trackassembly.pn_display=Le modèle de votre pièce de piste est affiché ici tool.trackassembly.pn_pattern=Écrire un modèle ici et appuyer sur ENTRÉE pour effectuer une recherche tool.trackassembly.pn_srchcol=Choisir la liste de colonne auquel vous voulez effectuer une recherche sur diff --git a/resource/localization/ja/trackassembly.properties b/resource/localization/ja/trackassembly.properties index 10825483..690bf667 100644 --- a/resource/localization/ja/trackassembly.properties +++ b/resource/localization/ja/trackassembly.properties @@ -92,8 +92,8 @@ tool.trackassembly.pn_externdb_bt7=アイテムを編集して(Luapad) tool.trackassembly.pn_externdb_bt8=データベースエントリを消して tool.trackassembly.pn_ext_dsv_lb=外部DSVリスト tool.trackassembly.pn_ext_dsv_hd=外部DSVデータベースリストはここに見せる -tool.trackassembly.pn_ext_dsv_1=アクティブ -tool.trackassembly.pn_ext_dsv_2=データベース特異プレッフィクス +tool.trackassembly.pn_extdsv_act=アクティブ +tool.trackassembly.pn_extdsv_prf=データベース特異プレッフィクス tool.trackassembly.pn_display=プレーやの線路部分ここに映る tool.trackassembly.pn_pattern=ここにパターンを書くとサーチするためにENTERを押して tool.trackassembly.pn_srchcol=サーチするコラムを選択し diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index 948679a6..3030b0ed 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -254,9 +254,9 @@ tool.trackassembly.pn_routine_hd=Часто используемых куско tool.trackassembly.pn_externdb_hd=Внешние базы данных для\: tool.trackassembly.pn_ext_dsv_lb=Внешний список DSV tool.trackassembly.pn_ext_dsv_hd=Список внешних баз данных DSV отображается здесь -tool.trackassembly.pn_ext_dsv_1=Активный -tool.trackassembly.pn_ext_dsv_2=Уникальный префикс базы данных -tool.trackassembly.pn_ext_dsv_3=Дополнительная информация +tool.trackassembly.pn_extdsv_act=Активный +tool.trackassembly.pn_extdsv_prf=Уникальный префикс базы данных +tool.trackassembly.pn_extdsv_inf=Дополнительная информация tool.trackassembly.pn_display=Модель вашего куска дороги здесь отображается tool.trackassembly.pn_pattern=Напишите шаблон здесь и нажмите ВВОД для выполнения поиска tool.trackassembly.pn_srchcol=Выберите столбец для поиска diff --git a/resource/localization/zh-cn/trackassembly.properties b/resource/localization/zh-cn/trackassembly.properties index 1be95ec8..66ef46c1 100644 --- a/resource/localization/zh-cn/trackassembly.properties +++ b/resource/localization/zh-cn/trackassembly.properties @@ -142,9 +142,9 @@ tool.trackassembly.pn_contextm_1_5=创造线路 tool.trackassembly.pn_contextm_1_6=移除线路 tool.trackassembly.pn_ext_dsv_lb=外部 DSV 列表 tool.trackassembly.pn_ext_dsv_hd=此处显示外部 DSV 数据库列表 -tool.trackassembly.pn_ext_dsv_1=活动的 -tool.trackassembly.pn_ext_dsv_2=数据库唯一前缀 -tool.trackassembly.pn_ext_dsv_3=附加信息 +tool.trackassembly.pn_extdsv_act=活动的 +tool.trackassembly.pn_extdsv_prf=数据库唯一前缀 +tool.trackassembly.pn_extdsv_inf=附加信息 tool.trackassembly.pn_display=您的轨道组件的模型显示在此处 tool.trackassembly.pn_pattern=在此写入模式并按 ENTER 执行搜索 tool.trackassembly.pn_srchcol=选择您要执行搜索的列表列 From fa96c2b30157e6a568d20fdddca51abde99a88b3 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 13 Nov 2024 15:09:52 +0200 Subject: [PATCH 081/114] Rename: `ext_dsv` localization to `extdsv` --- lua/autorun/trackassembly_init.lua | 6 +++--- resource/localization/bg/trackassembly.properties | 4 ++-- resource/localization/en/trackassembly.properties | 4 ++-- resource/localization/fr/trackassembly.properties | 4 ++-- resource/localization/ja/trackassembly.properties | 4 ++-- resource/localization/ru/trackassembly.properties | 4 ++-- resource/localization/zh-cn/trackassembly.properties | 4 ++-- 7 files changed, 15 insertions(+), 15 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 7ed88a71..4923bd74 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -86,7 +86,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.805") +asmlib.SetOpVar("TOOL_VERSION","8.806") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -766,8 +766,8 @@ if(CLIENT) then pnListView:SetMultiSelect(false) pnListView:SetPos(xyPos.x, xyPos.y) pnListView:SetSize(xySiz.x, xySiz.y) - pnListView:SetName(languageGetPhrase("tool."..gsToolNameL..".pn_ext_dsv_lb")) - pnListView:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_ext_dsv_hd")) + pnListView:SetName(languageGetPhrase("tool."..gsToolNameL..".pn_extdsv_lb")) + pnListView:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_extdsv_hd")) pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_extdsv_act")):SetFixedWidth(wAct) pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_extdsv_prf")):SetFixedWidth(wUse - wSrc) pnListView:AddColumn(languageGetPhrase("tool."..gsToolNameL..".pn_extdsv_inf")):SetFixedWidth(wSrc) diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index 5cf39597..f0bbb191 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -187,8 +187,8 @@ tool.trackassembly.pn_export_lb=Съхрани DB tool.trackassembly.pn_extdsv_act=Активен tool.trackassembly.pn_extdsv_prf=Уникален префикс на базата tool.trackassembly.pn_extdsv_inf=Допълнителна информация -tool.trackassembly.pn_ext_dsv_hd=Списъка на DSV базите данни е показан тук -tool.trackassembly.pn_ext_dsv_lb=Външен DSV списък +tool.trackassembly.pn_extdsv_hd=Списъка на DSV базите данни е показан тук +tool.trackassembly.pn_extdsv_lb=Външен DSV списък tool.trackassembly.pn_externdb_bte=Експорт tool.trackassembly.pn_externdb_bte_tp=Експортира информацията от панела към файла за използване tool.trackassembly.pn_externdb_bti=Импорт diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index aff49a59..cbf10209 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -187,8 +187,8 @@ tool.trackassembly.pn_export_lb=Export DB tool.trackassembly.pn_extdsv_act=Active tool.trackassembly.pn_extdsv_prf=Database unique prefix tool.trackassembly.pn_extdsv_inf=Additional information -tool.trackassembly.pn_ext_dsv_hd=External DSV databases list is displayed here -tool.trackassembly.pn_ext_dsv_lb=External DSV list +tool.trackassembly.pn_extdsv_hd=External DSV databases list is displayed here +tool.trackassembly.pn_extdsv_lb=External DSV list tool.trackassembly.pn_externdb_bte=Export tool.trackassembly.pn_externdb_bte_tp=Exports information from the panel to the file list and apply tool.trackassembly.pn_externdb_bti=Import diff --git a/resource/localization/fr/trackassembly.properties b/resource/localization/fr/trackassembly.properties index abfbdcd3..d5d2732a 100644 --- a/resource/localization/fr/trackassembly.properties +++ b/resource/localization/fr/trackassembly.properties @@ -121,8 +121,8 @@ tool.trackassembly.pn_externdb_bt5=Copier l'heure de la table tool.trackassembly.pn_externdb_bt6=Copier la taille de la table tool.trackassembly.pn_externdb_bt7=Modifier le contenu de la table (Luapad) tool.trackassembly.pn_externdb_bt8=Supprimer l'entrée de la base de donnée -tool.trackassembly.pn_ext_dsv_lb=Liste DSV externe -tool.trackassembly.pn_ext_dsv_hd=La liste des base de données DSV sont affichées ici +tool.trackassembly.pn_extdsv_lb=Liste DSV externe +tool.trackassembly.pn_extdsv_hd=La liste des base de données DSV sont affichées ici tool.trackassembly.pn_extdsv_act=Active tool.trackassembly.pn_extdsv_prf=Préfixe unique de la base de donnée tool.trackassembly.pn_display=Le modèle de votre pièce de piste est affiché ici diff --git a/resource/localization/ja/trackassembly.properties b/resource/localization/ja/trackassembly.properties index 690bf667..1403a157 100644 --- a/resource/localization/ja/trackassembly.properties +++ b/resource/localization/ja/trackassembly.properties @@ -90,8 +90,8 @@ tool.trackassembly.pn_externdb_bt5=テーブルタイムをコピーして tool.trackassembly.pn_externdb_bt6=テーブルサイズをコピーして tool.trackassembly.pn_externdb_bt7=アイテムを編集して(Luapad) tool.trackassembly.pn_externdb_bt8=データベースエントリを消して -tool.trackassembly.pn_ext_dsv_lb=外部DSVリスト -tool.trackassembly.pn_ext_dsv_hd=外部DSVデータベースリストはここに見せる +tool.trackassembly.pn_extdsv_lb=外部DSVリスト +tool.trackassembly.pn_extdsv_hd=外部DSVデータベースリストはここに見せる tool.trackassembly.pn_extdsv_act=アクティブ tool.trackassembly.pn_extdsv_prf=データベース特異プレッフィクス tool.trackassembly.pn_display=プレーやの線路部分ここに映る diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index 3030b0ed..4b236b1e 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -252,8 +252,8 @@ tool.trackassembly.pn_export_lb=Экспорт БД tool.trackassembly.pn_routine=Список регулярно используемых кусков дороги tool.trackassembly.pn_routine_hd=Часто используемых кусков пользователя\: tool.trackassembly.pn_externdb_hd=Внешние базы данных для\: -tool.trackassembly.pn_ext_dsv_lb=Внешний список DSV -tool.trackassembly.pn_ext_dsv_hd=Список внешних баз данных DSV отображается здесь +tool.trackassembly.pn_extdsv_lb=Внешний список DSV +tool.trackassembly.pn_extdsv_hd=Список внешних баз данных DSV отображается здесь tool.trackassembly.pn_extdsv_act=Активный tool.trackassembly.pn_extdsv_prf=Уникальный префикс базы данных tool.trackassembly.pn_extdsv_inf=Дополнительная информация diff --git a/resource/localization/zh-cn/trackassembly.properties b/resource/localization/zh-cn/trackassembly.properties index 66ef46c1..cb7f3126 100644 --- a/resource/localization/zh-cn/trackassembly.properties +++ b/resource/localization/zh-cn/trackassembly.properties @@ -140,8 +140,8 @@ tool.trackassembly.pn_contextm_1_3=启用/禁用 tool.trackassembly.pn_contextm_1_4=更改线路 tool.trackassembly.pn_contextm_1_5=创造线路 tool.trackassembly.pn_contextm_1_6=移除线路 -tool.trackassembly.pn_ext_dsv_lb=外部 DSV 列表 -tool.trackassembly.pn_ext_dsv_hd=此处显示外部 DSV 数据库列表 +tool.trackassembly.pn_extdsv_lb=外部 DSV 列表 +tool.trackassembly.pn_extdsv_hd=此处显示外部 DSV 数据库列表 tool.trackassembly.pn_extdsv_act=活动的 tool.trackassembly.pn_extdsv_prf=数据库唯一前缀 tool.trackassembly.pn_extdsv_inf=附加信息 From cad6d017665043a4fd62cd15f995a5fcc89878af Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 13 Nov 2024 15:38:09 +0200 Subject: [PATCH 082/114] Updated: Add translation to be removed after a sync --- .../localization/fr/trackassembly.properties | 346 +++++++------- .../localization/ja/trackassembly.properties | 160 ++++--- .../zh-cn/trackassembly.properties | 425 +++++++++--------- 3 files changed, 461 insertions(+), 470 deletions(-) diff --git a/resource/localization/fr/trackassembly.properties b/resource/localization/fr/trackassembly.properties index d5d2732a..cf1deae8 100644 --- a/resource/localization/fr/trackassembly.properties +++ b/resource/localization/fr/trackassembly.properties @@ -1,8 +1,74 @@  -tool.trackassembly.workmode.1=Général créer/aligner des pièces -tool.trackassembly.workmode.2=Point d'intersection actif -tool.trackassembly.workmode.3=Ajuster des segments de ligne courbés -tool.trackassembly.workmode.4=Retourner la normale d'une surface +Cleaned_asmtracks=Pistes nettoyées +Cleanup_asmtracks=Pièces de piste assemblées +SBoxLimit_asmtracks=Vous avez atteint la limite des pistes créées! +sbox_maxasmtracks=Changer ceci pour ajuster les choses créées par l'outil assembleur à piste sur le serveur +sbox_maxasmtracks_con=Quantité de rails\: +tool.trackassembly.activrad=Distance minimum nécessaire pour sélectionner un point actif +tool.trackassembly.activrad_con=Rayon actif\: +tool.trackassembly.adviser=Montrer le conseiller de position/angle de l'outil +tool.trackassembly.adviser_con=Montrer le conseiller +tool.trackassembly.angsnap=Aligner la première pièce créée sur ce degré +tool.trackassembly.angsnap_con=Alignement angulaire\: +tool.trackassembly.appangfst=Appliquer les décalages angulaires seulement sur la première pièce +tool.trackassembly.appangfst_con=Appliquer angulaire en premier +tool.trackassembly.applinfst=Appliquer les décalages linéaires seulement sur la première pièce +tool.trackassembly.applinfst_con=Appliquer linéaire en premier +tool.trackassembly.bgskids=Cette ensemble de code est delimité par une virgule pour chaque Groupes de corps/ID Apparence +tool.trackassembly.bgskids_con=Groupes de corps/Apparence\: +tool.trackassembly.bgskids_def=Écrivez le code de sélection ici. Par exemple 1,0,0,2,1/3 +tool.trackassembly.bnderrmod=Changer ceci pour définir le comportement quand les clients créent des pièces en dehors des limites de la carte +tool.trackassembly.bnderrmod_con=Sécurité frontière\: +tool.trackassembly.bnderrmod_error=[5] Refuser l'empilement/création message d'erreur est affiché +tool.trackassembly.bnderrmod_generic=[4] Refuser l'empilement/création message générique est affiché +tool.trackassembly.bnderrmod_hint=[3] Refuser l'empilement/création message d'astuce est affiché +tool.trackassembly.bnderrmod_log=[2] Refuser l'empilement/création l'erreur est enregistré +tool.trackassembly.bnderrmod_off=[1] Autoriser l'empilement/création sans restriction +tool.trackassembly.crvleanlm=Changer ceci pour ajuster la finesse de la courbure en inclinaison pour le segment +tool.trackassembly.crvleanlm_con=Courbure en inclinaison\: +tool.trackassembly.crvturnlm=Changer ceci pour ajuster la finesse de la courbure en virage pour le segment +tool.trackassembly.crvturnlm_con=Courbure en virage\: +tool.trackassembly.curvefact=Changer ceci pour ajuster le facteur courbe du coefficient tangent +tool.trackassembly.curvefact_con=Facteur courbe\: +tool.trackassembly.curvsmple=Changer ceci pour ajuster les échantillons pour la courbe d'interpolation +tool.trackassembly.curvsmple_con=Échantillons courbe\: +tool.trackassembly.desc=Assemble une piste auquel les véhicules peuvent rouler dessus +tool.trackassembly.devmode=Active le traçage et débogage +tool.trackassembly.devmode_con=Activer le mode développeur +tool.trackassembly.enctxmall=Active le menu contextuel de l'outil dédiée pour tous les objets +tool.trackassembly.enctxmall_con=Activer le menu contextuel pour tous les objets +tool.trackassembly.enctxmenu=Active le menu contextuel de l'outil dédiée pour les pièces +tool.trackassembly.enctxmenu_con=Activer le menu contextuel +tool.trackassembly.endsvlock=Active le verrouillage du fichier de la base de données DSV externe +tool.trackassembly.endsvlock_con=Activer le verrou de la base de données DSV +tool.trackassembly.engunsnap=Contrôle l'alignement quand la pièce est tombée par le pistolet physique d'un joueur +tool.trackassembly.engunsnap_con=Activer l'alignement par pistolet physique +tool.trackassembly.enmultask=Active le multitâche pendant le mode d'empilement +tool.trackassembly.enmultask_con=Activer le système multitâche +tool.trackassembly.enpntmscr=Permet de basculer entre les points actifs par défilement de la molette +tool.trackassembly.enpntmscr_con=Activer le défilement de points +tool.trackassembly.enradmenu=Permet l'utilisation du menu radial du mode de travail +tool.trackassembly.enradmenu_con=Activer le menu radial +tool.trackassembly.enwiremod=Active l'extension pour la puce d'expression Wiremod +tool.trackassembly.enwiremod_con=Activer wire expression +tool.trackassembly.exportdb=Active l'exportation de la base de données en un grand fichier +tool.trackassembly.exportdb_con=Activer l'exportation de la base de données +tool.trackassembly.forcelim=Force nécessaire pour casser la soudure +tool.trackassembly.forcelim_con=Limite de force\: +tool.trackassembly.freeze=La pièce qui sera créée sera dans un état gelé +tool.trackassembly.freeze_con=Geler la pièce +tool.trackassembly.ghostcnt=Montrer un aperçu de la pièces compter active +tool.trackassembly.ghostcnt_con=Activer compter l'aperçu de l'outil +tool.trackassembly.gravity=Contrôle la gravité sur la pièce créée +tool.trackassembly.gravity_con=Appliquer la gravité sur la pièce +tool.trackassembly.ignphysgn=Ignore la saisie du pistolet physiques sur la pièce créée/alignée/empilé +tool.trackassembly.ignphysgn_con=Ignorer le pistolet physiques +tool.trackassembly.igntype=Faire ignorer à l'outil les différents types de pièce dès l'alignement/empilement +tool.trackassembly.igntype_con=Ignorer le type de piste +tool.trackassembly.incsnpang=Défini le pas d'incrémentation angulaire +tool.trackassembly.incsnpang_con=Pas angulaire\: +tool.trackassembly.incsnplin=Défini le pas d'incrémentation linéaire +tool.trackassembly.incsnplin_con=Pas linéaire\: tool.trackassembly.info.1=Créer des pièces sur la carte ou les aligner relativement entre elles tool.trackassembly.info.2=Connecte les sections de piste avec un segment spécialement dédié pour cela tool.trackassembly.info.3=Forme une piste continue passant par les points de passage définis @@ -12,208 +78,140 @@ tool.trackassembly.left.2=Créer une pièce de piste au point d'intersection tool.trackassembly.left.3=Créer la piste segmentée par interpolation de courbe tool.trackassembly.left.4=Créer les pistes retournées de la liste sélectionnée tool.trackassembly.left.5=Créer la piste segmentée par interpolation de courbe -tool.trackassembly.right.1=Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes -tool.trackassembly.right.2=Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes -tool.trackassembly.right.3=Créer un nœud pour la courbe segmentée. Maintenir MAJUSCULE pour réactualiser -tool.trackassembly.right.4=Enregistrer l'entité dans la liste à retourner. Maintenir MAJUSCULE pour changer le modèle -tool.trackassembly.right.5=Créer un nœud pour la courbe segmentée. Maintenir MAJUSCULE pour réactualiser -tool.trackassembly.right_use.1=MOLETTE désactivée. Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes -tool.trackassembly.right_use.2=MOLETTE désactivée. Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes -tool.trackassembly.right_use.3=Générer un nœud depuis le point actif de la pièce de piste la plus proche -tool.trackassembly.right_use.4=MOLETTE désactivée. Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes -tool.trackassembly.right_use.5=Générer un nœud depuis le point actif de la pièce de piste la plus proche -tool.trackassembly.reload.1=Retirer une pièce de piste. Maintenir MAJUSCULE pour sélectionner une ancre -tool.trackassembly.reload.2=Retirer une pièce de piste. Maintenir MAJUSCULE pour sélectionner le rayon de sélection -tool.trackassembly.reload.3=Retire un nœud de l'interpolation de courbe. Maintenir MAJUSCULE pour vider le tas -tool.trackassembly.reload.4=Vider la liste des entités à retourner. Retire une pièce si la liste est vide -tool.trackassembly.reload.5=Retire un nœud de l'interpolation de courbe. Maintenir MAJUSCULE pour vider le tas -tool.trackassembly.reload_use.1=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV -tool.trackassembly.reload_use.2=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV -tool.trackassembly.reload_use.3=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV -tool.trackassembly.reload_use.4=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV -tool.trackassembly.reload_use.5=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV -tool.trackassembly.desc=Assemble une piste auquel les véhicules peuvent rouler dessus -tool.trackassembly.name=Assembleur à piste -tool.trackassembly.phytype=Sélectionnez une des propriétés physiques dans la liste -tool.trackassembly.phytype_con=Type de matériau\: -tool.trackassembly.phytype_def= -tool.trackassembly.phyname=Sélectionnez une des noms de propriétés physiques à utiliser lorsque qu'une piste sera créée. Ceci va affecter la friction de la surface -tool.trackassembly.phyname_con=Nom de matériau de surface\: -tool.trackassembly.phyname_def= -tool.trackassembly.bgskids=Cette ensemble de code est delimité par une virgule pour chaque Groupes de corps/ID Apparence -tool.trackassembly.bgskids_con=Groupes de corps/Apparence\: -tool.trackassembly.bgskids_def=Écrivez le code de sélection ici. Par exemple 1,0,0,2,1/3 +tool.trackassembly.logfile=Commence la diffusion du journal dans un fichier dédié +tool.trackassembly.logfile_con=Activer le journal +tool.trackassembly.logsmax=Changer ceci pour ajuster le flux maximum des lignes écrites par le journal +tool.trackassembly.logsmax_con=Lignes maximum\: tool.trackassembly.mass=À quel point la pièce créée sera lourd tool.trackassembly.mass_con=Masse de la pièce\: +tool.trackassembly.maxactrad=Changer ceci pour ajuster le rayon actif maximal pour obtenir l'ID d'un point +tool.trackassembly.maxactrad_con=Limite du rayon\: +tool.trackassembly.maxforce=Changer ceci pour ajuster la limite maximale de la force lors des soudures +tool.trackassembly.maxforce_con=Limite de force\: +tool.trackassembly.maxfruse=Changer ceci pour ajuster combien de pièces peuvent apparaître dans la fenêtre des pièces fréquentes +tool.trackassembly.maxfruse_con=Pièces fréquentes\: +tool.trackassembly.maxlinear=Changer ceci pour ajuster le décalage linéaire maximal sur une pièce +tool.trackassembly.maxlinear_con=Limite du décalage\: +tool.trackassembly.maxmass=Changer ceci pour ajuster la masse maximale pouvant être appliquée sur une pièce +tool.trackassembly.maxmass_con=Limite de la masse\: +tool.trackassembly.maxmenupr=Changer ceci pour ajuster le nombre de chiffres après la virgule dans le menu +tool.trackassembly.maxmenupr_con=Séparateur décimal\: +tool.trackassembly.maxstatts=Défini combien de tentatives d'empilement le script va essayer avant d'échouer +tool.trackassembly.maxstatts_con=Tentatives d'empilement\: +tool.trackassembly.maxstcnt=Changer ceci pour ajuster le maximum de pièces pouvant être créées en mode empilement +tool.trackassembly.maxstcnt_con=Limite d'empilement\: +tool.trackassembly.maxtrmarg=Changer ceci pour ajuster le temps entre les tracées de l'outil +tool.trackassembly.maxtrmarg_con=Marge de la tracée\: tool.trackassembly.model=Sélectionnez une pièce pour commencer/continuer votre piste avec en étendant un type et en cliquant sur un nœud tool.trackassembly.model_con=Modèle de la pièce\: -tool.trackassembly.activrad=Distance minimum nécessaire pour sélectionner un point actif -tool.trackassembly.activrad_con=Rayon actif\: -tool.trackassembly.stackcnt=Nombre maximum de pièces à créer pendant l'empilement -tool.trackassembly.stackcnt_con=Nombre de pièces\: -tool.trackassembly.angsnap=Aligner la première pièce créée sur ce degré -tool.trackassembly.angsnap_con=Alignement angulaire\: -tool.trackassembly.resetvars=Cliquez pour réinitialiser les valeurs supplémentaires -tool.trackassembly.resetvars_con=V Réinitialiser les variables V +tool.trackassembly.name=Assembleur à piste tool.trackassembly.nextpic=Décalage angulaire supplémentaire sur la position initial du tangage tool.trackassembly.nextpic_con=Angle du tangage\: -tool.trackassembly.nextyaw=Décalage angulaire supplémentaire sur la position initial du lacet -tool.trackassembly.nextyaw_con=Angle du lacet\: tool.trackassembly.nextrol=Décalage angulaire supplementaire sur la position initial du roulis tool.trackassembly.nextrol_con=Angle du roulis\: tool.trackassembly.nextx=Décalage linéaire supplémentaire sur la position initial de X tool.trackassembly.nextx_con=Décalage en X\: tool.trackassembly.nexty=Décalage linéaire supplémentaire sur la position initial de Y tool.trackassembly.nexty_con=Décalage en Y\: +tool.trackassembly.nextyaw=Décalage angulaire supplémentaire sur la position initial du lacet +tool.trackassembly.nextyaw_con=Angle du lacet\: tool.trackassembly.nextz=Décalage linéaire supplémentaire sur la position initial de Z tool.trackassembly.nextz_con=Décalage en Z\: -tool.trackassembly.gravity=Contrôle la gravité sur la pièce créée -tool.trackassembly.gravity_con=Appliquer la gravité sur la pièce -tool.trackassembly.weld=Créer une soudure entre les pièces/ancres -tool.trackassembly.weld_con=Souder -tool.trackassembly.forcelim=Force nécessaire pour casser la soudure -tool.trackassembly.forcelim_con=Limite de force\: -tool.trackassembly.ignphysgn=Ignore la saisie du pistolet physiques sur la pièce créée/alignée/empilé -tool.trackassembly.ignphysgn_con=Ignorer le pistolet physiques tool.trackassembly.nocollide=Faire en sorte que les pièces/ancres ne puissent jamais entrer en collision tool.trackassembly.nocollide_con=Pas de collisions tool.trackassembly.nocollidew=Faire en sorte que les pièces/monde ne puisse jamais entrer en collision tool.trackassembly.nocollidew_con=Pas de collisions avec le monde -tool.trackassembly.freeze=La pièce qui sera créée sera dans un état gelé -tool.trackassembly.freeze_con=Geler la pièce -tool.trackassembly.igntype=Faire ignorer à l'outil les différents types de pièce dès l'alignement/empilement -tool.trackassembly.igntype_con=Ignorer le type de piste -tool.trackassembly.spnflat=La prochaine pièce sera créée/alignée/empilé horizontalement -tool.trackassembly.spnflat_con=Créer horizontalement -tool.trackassembly.spawncn=Créer la pièce vers le centre, sinon, la créer relativement vers le point active choisi -tool.trackassembly.spawncn_con=Partir du centre -tool.trackassembly.surfsnap=Aligne la pièce vers la surface auquel le joueur vise actuellement -tool.trackassembly.surfsnap_con=Aligner vers la surface tracé -tool.trackassembly.appangfst=Appliquer les décalages angulaires seulement sur la première pièce -tool.trackassembly.appangfst_con=Appliquer angulaire en premier -tool.trackassembly.applinfst=Appliquer les décalages linéaires seulement sur la première pièce -tool.trackassembly.applinfst_con=Appliquer linéaire en premier -tool.trackassembly.adviser=Montrer le conseiller de position/angle de l'outil -tool.trackassembly.adviser_con=Montrer le conseiller -tool.trackassembly.pntasist=Montrer l'assistant d'alignement de l'outil -tool.trackassembly.pntasist_con=Montrer l'assistant -tool.trackassembly.ghostcnt=Montrer un aperçu de la pièces compter active -tool.trackassembly.ghostcnt_con=Activer compter l'aperçu de l'outil -tool.trackassembly.engunsnap=Contrôle l'alignement quand la pièce est tombée par le pistolet physique d'un joueur -tool.trackassembly.engunsnap_con=Activer l'alignement par pistolet physique -tool.trackassembly.type=Sélectionnez le type de piste à utiliser en développant le dossier -tool.trackassembly.type_con=Type de piste\: -tool.trackassembly.subfolder=Sélectionnez la catégorie de piste à utiliser en développant le dossier -tool.trackassembly.subfolder_con=Catégorie de piste\: -tool.trackassembly.workmode=Modifiez cette option pour utiliser différents modes de travail -tool.trackassembly.workmode_con=Mode de travail\: +tool.trackassembly.phyname=Sélectionnez une des noms de propriétés physiques à utiliser lorsque qu'une piste sera créée. Ceci va affecter la friction de la surface +tool.trackassembly.phyname_con=Nom de matériau de surface\: +tool.trackassembly.phyname_def= +tool.trackassembly.phytype=Sélectionnez une des propriétés physiques dans la liste +tool.trackassembly.phytype_con=Type de matériau\: +tool.trackassembly.phytype_def= +tool.trackassembly.pn_contextm_st=Tableaux +tool.trackassembly.pn_contextm_stdl=Supprimer des fichiers +tool.trackassembly.pn_contextm_sted=Modifier des fichiers (Luapad) +tool.trackassembly.pn_contextm_stnk=Copier le nom +tool.trackassembly.pn_contextm_stpt=Copier le chemin +tool.trackassembly.pn_contextm_stsz=Copier la taille +tool.trackassembly.pn_contextm_sttm=Copier l'heuree +tool.trackassembly.pn_display=Le modèle de votre pièce de piste est affiché ici +tool.trackassembly.pn_display_lb=Affichage pièce tool.trackassembly.pn_export=Cliquer pour exporter la base de données client dans un fichier tool.trackassembly.pn_export_lb=Exporter BD -tool.trackassembly.pn_routine=La liste de vos pièces de pistes utilisées fréquemment -tool.trackassembly.pn_routine_hd=Pièces fréquents par\: -tool.trackassembly.pn_externdb=Les base de données disponibles pour\: -tool.trackassembly.pn_externdb_hd=Base de données de\: -tool.trackassembly.pn_externdb_bt1=Copier préfixe unique -tool.trackassembly.pn_externdb_bt2=Copier chemin dossier DSV -tool.trackassembly.pn_externdb_bt3=Copier le nom de la table -tool.trackassembly.pn_externdb_bt4=Copier le chemin de la table -tool.trackassembly.pn_externdb_bt5=Copier l'heure de la table -tool.trackassembly.pn_externdb_bt6=Copier la taille de la table -tool.trackassembly.pn_externdb_bt7=Modifier le contenu de la table (Luapad) -tool.trackassembly.pn_externdb_bt8=Supprimer l'entrée de la base de donnée -tool.trackassembly.pn_extdsv_lb=Liste DSV externe -tool.trackassembly.pn_extdsv_hd=La liste des base de données DSV sont affichées ici tool.trackassembly.pn_extdsv_act=Active +tool.trackassembly.pn_extdsv_hd=La liste des base de données DSV sont affichées ici +tool.trackassembly.pn_extdsv_lb=Liste DSV externe tool.trackassembly.pn_extdsv_prf=Préfixe unique de la base de donnée -tool.trackassembly.pn_display=Le modèle de votre pièce de piste est affiché ici +tool.trackassembly.pn_externdb_hd=Base de données de\: tool.trackassembly.pn_pattern=Écrire un modèle ici et appuyer sur ENTRÉE pour effectuer une recherche -tool.trackassembly.pn_srchcol=Choisir la liste de colonne auquel vous voulez effectuer une recherche sur -tool.trackassembly.pn_srchcol_lb= -tool.trackassembly.pn_routine_use=Utilisé +tool.trackassembly.pn_pattern_lb=Écrire modèle +tool.trackassembly.pn_routine=La liste de vos pièces de pistes utilisées fréquemment tool.trackassembly.pn_routine_end=Fin -tool.trackassembly.pn_routine_typ=Type -tool.trackassembly.pn_routine_nam=Nom -tool.trackassembly.pn_routine_mod=Modèle +tool.trackassembly.pn_routine_hd=Pièces fréquents par\: tool.trackassembly.pn_routine_lb=Articles de routine -tool.trackassembly.pn_display_lb=Affichage pièce -tool.trackassembly.pn_pattern_lb=Écrire modèle +tool.trackassembly.pn_routine_mod=Modèle +tool.trackassembly.pn_routine_nam=Nom +tool.trackassembly.pn_routine_typ=Type +tool.trackassembly.pn_routine_use=Utilisé +tool.trackassembly.pn_srchcol=Choisir la liste de colonne auquel vous voulez effectuer une recherche sur +tool.trackassembly.pn_srchcol_lb= +tool.trackassembly.pntasist=Montrer l'assistant d'alignement de l'outil +tool.trackassembly.pntasist_con=Montrer l'assistant +tool.trackassembly.reload.1=Retirer une pièce de piste. Maintenir MAJUSCULE pour sélectionner une ancre +tool.trackassembly.reload.2=Retirer une pièce de piste. Maintenir MAJUSCULE pour sélectionner le rayon de sélection +tool.trackassembly.reload.3=Retire un nœud de l'interpolation de courbe. Maintenir MAJUSCULE pour vider le tas +tool.trackassembly.reload.4=Vider la liste des entités à retourner. Retire une pièce si la liste est vide +tool.trackassembly.reload.5=Retire un nœud de l'interpolation de courbe. Maintenir MAJUSCULE pour vider le tas +tool.trackassembly.reload_use.1=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV +tool.trackassembly.reload_use.2=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV +tool.trackassembly.reload_use.3=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV +tool.trackassembly.reload_use.4=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV +tool.trackassembly.reload_use.5=Activer l'exportation de la base de données pour ouvrir le gestionnaire DSV +tool.trackassembly.resetvars=Cliquez pour réinitialiser les valeurs supplémentaires +tool.trackassembly.resetvars_con=V Réinitialiser les variables V +tool.trackassembly.right.1=Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes +tool.trackassembly.right.2=Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes +tool.trackassembly.right.3=Créer un nœud pour la courbe segmentée. Maintenir MAJUSCULE pour réactualiser +tool.trackassembly.right.4=Enregistrer l'entité dans la liste à retourner. Maintenir MAJUSCULE pour changer le modèle +tool.trackassembly.right.5=Créer un nœud pour la courbe segmentée. Maintenir MAJUSCULE pour réactualiser +tool.trackassembly.right_use.1=MOLETTE désactivée. Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes +tool.trackassembly.right_use.2=MOLETTE désactivée. Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes +tool.trackassembly.right_use.3=Générer un nœud depuis le point actif de la pièce de piste la plus proche +tool.trackassembly.right_use.4=MOLETTE désactivée. Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes +tool.trackassembly.right_use.5=Générer un nœud depuis le point actif de la pièce de piste la plus proche tool.trackassembly.sizeucs=Calibration de l'échelle pour le système de coordonnées affiché tool.trackassembly.sizeucs_con=Échelle UCS\: -tool.trackassembly.maxstatts=Défini combien de tentatives d'empilement le script va essayer avant d'échouer -tool.trackassembly.maxstatts_con=Tentatives d'empilement\: -tool.trackassembly.incsnpang=Défini le pas d'incrémentation angulaire -tool.trackassembly.incsnpang_con=Pas angulaire\: -tool.trackassembly.incsnplin=Défini le pas d'incrémentation linéaire -tool.trackassembly.incsnplin_con=Pas linéaire\: -tool.trackassembly.enradmenu=Permet l'utilisation du menu radial du mode de travail -tool.trackassembly.enradmenu_con=Activer le menu radial -tool.trackassembly.enpntmscr=Permet de basculer entre les points actifs par défilement de la molette -tool.trackassembly.enpntmscr_con=Activer le défilement de points -tool.trackassembly.exportdb=Active l'exportation de la base de données en un grand fichier -tool.trackassembly.exportdb_con=Activer l'exportation de la base de données -tool.trackassembly.devmode=Active le traçage et débogage -tool.trackassembly.devmode_con=Activer le mode développeur -tool.trackassembly.maxtrmarg=Changer ceci pour ajuster le temps entre les tracées de l'outil -tool.trackassembly.maxtrmarg_con=Marge de la tracée\: -tool.trackassembly.maxmenupr=Changer ceci pour ajuster le nombre de chiffres après la virgule dans le menu -tool.trackassembly.maxmenupr_con=Séparateur décimal\: -tool.trackassembly.maxmass=Changer ceci pour ajuster la masse maximale pouvant être appliquée sur une pièce -tool.trackassembly.maxmass_con=Limite de la masse\: -tool.trackassembly.maxlinear=Changer ceci pour ajuster le décalage linéaire maximal sur une pièce -tool.trackassembly.maxlinear_con=Limite du décalage\: -tool.trackassembly.maxforce=Changer ceci pour ajuster la limite maximale de la force lors des soudures -tool.trackassembly.maxforce_con=Limite de force\: -tool.trackassembly.maxactrad=Changer ceci pour ajuster le rayon actif maximal pour obtenir l'ID d'un point -tool.trackassembly.maxactrad_con=Limite du rayon\: -tool.trackassembly.maxstcnt=Changer ceci pour ajuster le maximum de pièces pouvant être créées en mode empilement -tool.trackassembly.maxstcnt_con=Limite d'empilement\: -tool.trackassembly.enwiremod=Active l'extension pour la puce d'expression Wiremod -tool.trackassembly.enwiremod_con=Activer wire expression -tool.trackassembly.enmultask=Active le multitâche pendant le mode d'empilement -tool.trackassembly.enmultask_con=Activer le système multitâche -tool.trackassembly.enctxmenu=Active le menu contextuel de l'outil dédiée pour les pièces -tool.trackassembly.enctxmenu_con=Activer le menu contextuel -tool.trackassembly.enctxmall=Active le menu contextuel de l'outil dédiée pour tous les objets -tool.trackassembly.enctxmall_con=Activer le menu contextuel pour tous les objets -tool.trackassembly.endsvlock=Active le verrouillage du fichier de la base de données DSV externe -tool.trackassembly.endsvlock_con=Activer le verrou de la base de données DSV -tool.trackassembly.curvefact=Changer ceci pour ajuster le facteur courbe du coefficient tangent -tool.trackassembly.curvefact_con=Facteur courbe\: -tool.trackassembly.curvsmple=Changer ceci pour ajuster les échantillons pour la courbe d'interpolation -tool.trackassembly.curvsmple_con=Échantillons courbe\: -tool.trackassembly.crvturnlm=Changer ceci pour ajuster la finesse de la courbure en virage pour le segment -tool.trackassembly.crvturnlm_con=Courbure en virage\: -tool.trackassembly.crvleanlm=Changer ceci pour ajuster la finesse de la courbure en inclinaison pour le segment -tool.trackassembly.crvleanlm_con=Courbure en inclinaison\: +tool.trackassembly.spawncn=Créer la pièce vers le centre, sinon, la créer relativement vers le point active choisi +tool.trackassembly.spawncn_con=Partir du centre tool.trackassembly.spawnrate=Changer ceci pour ajuster la quantité de segments de pistes créés par cycle de serveur tool.trackassembly.spawnrate_con=Quantité création\: -tool.trackassembly.bnderrmod=Changer ceci pour définir le comportement quand les clients créent des pièces en dehors des limites de la carte -tool.trackassembly.bnderrmod_off=[1] Autoriser l'empilement/création sans restriction -tool.trackassembly.bnderrmod_log=[2] Refuser l'empilement/création l'erreur est enregistré -tool.trackassembly.bnderrmod_hint=[3] Refuser l'empilement/création message d'astuce est affiché -tool.trackassembly.bnderrmod_generic=[4] Refuser l'empilement/création message générique est affiché -tool.trackassembly.bnderrmod_error=[5] Refuser l'empilement/création message d'erreur est affiché -tool.trackassembly.bnderrmod_con=Sécurité frontière\: -tool.trackassembly.maxfruse=Changer ceci pour ajuster combien de pièces peuvent apparaître dans la fenêtre des pièces fréquentes -tool.trackassembly.maxfruse_con=Pièces fréquentes\: +tool.trackassembly.spnflat=La prochaine pièce sera créée/alignée/empilé horizontalement +tool.trackassembly.spnflat_con=Créer horizontalement +tool.trackassembly.stackcnt=Nombre maximum de pièces à créer pendant l'empilement +tool.trackassembly.stackcnt_con=Nombre de pièces\: +tool.trackassembly.subfolder=Sélectionnez la catégorie de piste à utiliser en développant le dossier +tool.trackassembly.subfolder_con=Catégorie de piste\: +tool.trackassembly.surfsnap=Aligne la pièce vers la surface auquel le joueur vise actuellement +tool.trackassembly.surfsnap_con=Aligner vers la surface tracé tool.trackassembly.timermode_ap=Cliquer ici pour appliquer vos changements au gestionnaire de mémoire SQL tool.trackassembly.timermode_ap_con=Appliquer les paramètres de la mémoire -tool.trackassembly.timermode_md=Changer ceci pour ajuster l'algorithme de la minuterie du gestionnaire de mémoire SQL -tool.trackassembly.timermode_lf=Changer ceci pour ajuster pendant combien de temps une entrée reste dans le cache -tool.trackassembly.timermode_lf_con=Durée de vie\: -tool.trackassembly.timermode_rd=Efface les entrées du cache en forçant une valeur nulle -tool.trackassembly.timermode_rd_con=Activer la suppression des entrées +tool.trackassembly.timermode_cqt=Mettre en cache la minuterie de la requête via l'enregistrement de la requête tool.trackassembly.timermode_ct=Force l'exécution du recyclage de la mémoire lorsqu'une entrée est supprimée tool.trackassembly.timermode_ct_con=Activer le ramasse-miettes +tool.trackassembly.timermode_lf=Changer ceci pour ajuster pendant combien de temps une entrée reste dans le cache +tool.trackassembly.timermode_lf_con=Durée de vie\: +tool.trackassembly.timermode_md=Changer ceci pour ajuster l'algorithme de la minuterie du gestionnaire de mémoire SQL tool.trackassembly.timermode_mem=Gestionnaire de mémoire de la table SQL\: -tool.trackassembly.timermode_cqt=Mettre en cache la minuterie de la requête via l'enregistrement de la requête tool.trackassembly.timermode_obj=Minuterie objet attachée à l'enregistrement du cache -tool.trackassembly.logfile=Commence la diffusion du journal dans un fichier dédié -tool.trackassembly.logfile_con=Activer le journal -tool.trackassembly.logsmax=Changer ceci pour ajuster le flux maximum des lignes écrites par le journal -tool.trackassembly.logsmax_con=Lignes maximum\: -sbox_maxasmtracks=Changer ceci pour ajuster les choses créées par l'outil assembleur à piste sur le serveur -sbox_maxasmtracks_con=Quantité de rails\: -Cleanup_asmtracks=Pièces de piste assemblées -Cleaned_asmtracks=Pistes nettoyées -SBoxLimit_asmtracks=Vous avez atteint la limite des pistes créées! +tool.trackassembly.timermode_rd=Efface les entrées du cache en forçant une valeur nulle +tool.trackassembly.timermode_rd_con=Activer la suppression des entrées +tool.trackassembly.type=Sélectionnez le type de piste à utiliser en développant le dossier +tool.trackassembly.type_con=Type de piste\: +tool.trackassembly.weld=Créer une soudure entre les pièces/ancres +tool.trackassembly.weld_con=Souder +tool.trackassembly.workmode.1=Général créer/aligner des pièces +tool.trackassembly.workmode.2=Point d'intersection actif +tool.trackassembly.workmode.3=Ajuster des segments de ligne courbés +tool.trackassembly.workmode.4=Retourner la normale d'une surface +tool.trackassembly.workmode=Modifiez cette option pour utiliser différents modes de travail +tool.trackassembly.workmode_con=Mode de travail\: diff --git a/resource/localization/ja/trackassembly.properties b/resource/localization/ja/trackassembly.properties index 1403a157..737c48d6 100644 --- a/resource/localization/ja/trackassembly.properties +++ b/resource/localization/ja/trackassembly.properties @@ -1,111 +1,109 @@  -tool.trackassembly.workmode.1=通常部分のスポーン/スナップ -tool.trackassembly.workmode.2=アクティブポイントの交差点 -tool.trackassembly.workmode.3=曲線線分フィッティング -tool.trackassembly.desc=乗り物が走る線路を組み立てる -tool.trackassembly.name=線路の組み立て -tool.trackassembly.phytype=一覧済みしたものの物性タイプを選択して -tool.trackassembly.phytype_def=<表面物質タイプを選択して> -tool.trackassembly.phyname=線路を作る時物性ネームを選択すると表面フリクションに効果が出る -tool.trackassembly.phyname_con=表面材料名\: -tool.trackassembly.phyname_def=<表面物質ネームを選択して> +Cleaned_asmtracks=線路部分全部綺麗にした +Cleanup_asmtracks=組み立てた線路部分 +SBoxLimit_asmtracks=スポーンした線路の限定 +tool.trackassembly.activrad=アクティブポイントを選ぶの最小限距離 +tool.trackassembly.activrad_con=アクティブ半径\: +tool.trackassembly.adviser=ツールのレンダリング拠点/角度アドバイザーを管理する +tool.trackassembly.adviser_con=ドローアドバイザー +tool.trackassembly.angsnap=この程度で最初の部分をスナップして +tool.trackassembly.angsnap_con=鋭角的な路線\: +tool.trackassembly.appangfst=最初部分のみに鋭角的なオフセットを付けて +tool.trackassembly.appangfst_con=最初のに鋭角的のを付けて +tool.trackassembly.applinfst=最初部分のみに点直線的なオフセットを付けて +tool.trackassembly.applinfst_con=最初のに点直線のを付けて tool.trackassembly.bgskids=コンマ区切りボディーグループ/スキンIDのセレクションコード。 tool.trackassembly.bgskids_con=ボディーグループ/スキン\: tool.trackassembly.bgskids_def=ここにセレクションコードを登録して。模範1,0,0,2,1/3 +tool.trackassembly.desc=乗り物が走る線路を組み立てる +tool.trackassembly.engunsnap=プレイヤー物理銃が落とした部分のスナップを管理する +tool.trackassembly.engunsnap_con=物理銃スナップを可能にする +tool.trackassembly.forcelim=溶接打点を壊す必要な力を管理する +tool.trackassembly.forcelim_con=力の限定\: +tool.trackassembly.freeze=動かぬ状態で部分をスポーンする +tool.trackassembly.freeze_con=それは移動しません +tool.trackassembly.ghostcnt=ツールのレンダリングゴーステッドホルダー部分数を管理する +tool.trackassembly.ghostcnt_con=ドローホルダーゴースト +tool.trackassembly.gravity=スポーンした部分の重力を管理する +tool.trackassembly.gravity_con=部分重力を付ける +tool.trackassembly.ignphysgn=スポーンした/スナップした/スタックした部分の物理銃掴むを無視する +tool.trackassembly.ignphysgn_con=物理銃を無視する +tool.trackassembly.igntype=ツールをスナップする/スタックする時部分の種類を無視させる +tool.trackassembly.igntype_con=線路部分タイプを無視して tool.trackassembly.mass=スポーンする部分の重さ tool.trackassembly.mass_con=部分の質量\: tool.trackassembly.model=タイプを拡張してとノードをクリックしてで線路を始まる/続けるために部分を選んで tool.trackassembly.model_con=部分のモデル\: -tool.trackassembly.activrad=アクティブポイントを選ぶの最小限距離 -tool.trackassembly.activrad_con=アクティブ半径\: -tool.trackassembly.stackcnt=スタックする場合線路部分の最大量 -tool.trackassembly.stackcnt_con=部分の数\: -tool.trackassembly.angsnap=この程度で最初の部分をスナップして -tool.trackassembly.angsnap_con=鋭角的な路線\: -tool.trackassembly.resetvars=追加的な数値をリセットためにクリックして -tool.trackassembly.resetvars_con=V 変数リセット V +tool.trackassembly.name=線路の組み立て tool.trackassembly.nextpic=追加的原点鋭角的なピッチオフセット tool.trackassembly.nextpic_con=原点ピッチ\: -tool.trackassembly.nextyaw=追加的原点鋭角的なヨーオフセット -tool.trackassembly.nextyaw_con=原点ヨー\: tool.trackassembly.nextrol=追加的原点鋭角的なロールオフセット tool.trackassembly.nextrol_con=原点ロール\: tool.trackassembly.nextx=追加的原点直線的なXオフセット tool.trackassembly.nextx_con=Xオフセット\: tool.trackassembly.nexty=追加的原点直線的なYオフセット tool.trackassembly.nexty_con=Yオフセット\: +tool.trackassembly.nextyaw=追加的原点鋭角的なヨーオフセット +tool.trackassembly.nextyaw_con=原点ヨー\: tool.trackassembly.nextz=追加的原点直線的なZオフセット tool.trackassembly.nextz_con=Zオフセット\: -tool.trackassembly.gravity=スポーンした部分の重力を管理する -tool.trackassembly.gravity_con=部分重力を付ける -tool.trackassembly.weld=二つの部分と部分とアンカーの間に溶接打点を作る -tool.trackassembly.weld_con=溶接 -tool.trackassembly.forcelim=溶接打点を壊す必要な力を管理する -tool.trackassembly.forcelim_con=力の限定\: -tool.trackassembly.ignphysgn=スポーンした/スナップした/スタックした部分の物理銃掴むを無視する -tool.trackassembly.ignphysgn_con=物理銃を無視する tool.trackassembly.nocollide=部分と部分とアンカーの間に「突き当たる禁止」を入れる tool.trackassembly.nocollide_con=突き当たる禁止 tool.trackassembly.nocollidew=部分と世界ーの間に「突き当たる禁止」を入れる tool.trackassembly.nocollidew_con=な衝突世界突き当たる禁止 -tool.trackassembly.freeze=動かぬ状態で部分をスポーンする -tool.trackassembly.freeze_con=それは移動しません -tool.trackassembly.igntype=ツールをスナップする/スタックする時部分の種類を無視させる -tool.trackassembly.igntype_con=線路部分タイプを無視して -tool.trackassembly.spnflat=次の部分が横にスポーン/スナップ/スタック -tool.trackassembly.spnflat_con=横にスポーンして +tool.trackassembly.phyname=線路を作る時物性ネームを選択すると表面フリクションに効果が出る +tool.trackassembly.phyname_con=表面材料名\: +tool.trackassembly.phyname_def=<表面物質ネームを選択して> +tool.trackassembly.phytype=一覧済みしたものの物性タイプを選択して +tool.trackassembly.phytype_def=<表面物質タイプを選択して> +tool.trackassembly.pn_contextm_st=Tables +tool.trackassembly.pn_contextm_stdl=データベースエントリを消して +tool.trackassembly.pn_contextm_sted=アイテムを編集して(Luapad) +tool.trackassembly.pn_contextm_stnk=テーブルニックネームをコピーして +tool.trackassembly.pn_contextm_stpt=テーブルパスをコピーして +tool.trackassembly.pn_contextm_stsz=テーブルサイズをコピーして +tool.trackassembly.pn_contextm_sttm=テーブルタイムをコピーして +tool.trackassembly.pn_display=プレーやの線路部分ここに映る +tool.trackassembly.pn_display_lb=部分を映る +tool.trackassembly.pn_export=クリックでクライアントデータベースをファイルにエクスポート +tool.trackassembly.pn_export_lb=DB エクスポート +tool.trackassembly.pn_extdsv_act=アクティブ +tool.trackassembly.pn_extdsv_hd=外部DSVデータベースリストはここに見せる +tool.trackassembly.pn_extdsv_lb=外部DSVリスト +tool.trackassembly.pn_extdsv_prf=データベース特異プレッフィクス +tool.trackassembly.pn_externdb_hd=外部データベース\: +tool.trackassembly.pn_pattern=ここにパターンを書くとサーチするためにENTERを押して +tool.trackassembly.pn_pattern_lb=パターンを書く +tool.trackassembly.pn_routine=よく使った線路部分表 +tool.trackassembly.pn_routine_end=角 +tool.trackassembly.pn_routine_hd=よく使った部分\: +tool.trackassembly.pn_routine_lb=定番アイテム +tool.trackassembly.pn_routine_mod=モデル +tool.trackassembly.pn_routine_nam=ネーム +tool.trackassembly.pn_routine_typ=タイプ +tool.trackassembly.pn_routine_use=期限 +tool.trackassembly.pn_srchcol=サーチするコラムを選択し +tool.trackassembly.pn_srchcol_lb=<でサーチ> +tool.trackassembly.pntasist=ツールのレンダリングスナップポイントアシスタントを管理する +tool.trackassembly.pntasist_con=ドローアシスタント +tool.trackassembly.resetvars=追加的な数値をリセットためにクリックして +tool.trackassembly.resetvars_con=V 変数リセット V tool.trackassembly.spawncn=真ん中で部分をスポーンして、他のは選んだアクティブポイントに身寄でスポーンする tool.trackassembly.spawncn_con=真ん中から原点 +tool.trackassembly.spnflat=次の部分が横にスポーン/スナップ/スタック +tool.trackassembly.spnflat_con=横にスポーンして +tool.trackassembly.stackcnt=スタックする場合線路部分の最大量 +tool.trackassembly.stackcnt_con=部分の数\: +tool.trackassembly.subfolder=フォルダを展開して、使用するトラックカテゴリを選択します +tool.trackassembly.subfolder_con=トラックカテゴリ\: tool.trackassembly.surfsnap=プレイヤーに指した表面で部分をスナップして tool.trackassembly.surfsnap_con=トレース表面でスナップして -tool.trackassembly.appangfst=最初部分のみに鋭角的なオフセットを付けて -tool.trackassembly.appangfst_con=最初のに鋭角的のを付けて -tool.trackassembly.applinfst=最初部分のみに点直線的なオフセットを付けて -tool.trackassembly.applinfst_con=最初のに点直線のを付けて -tool.trackassembly.adviser=ツールのレンダリング拠点/角度アドバイザーを管理する -tool.trackassembly.adviser_con=ドローアドバイザー -tool.trackassembly.pntasist=ツールのレンダリングスナップポイントアシスタントを管理する -tool.trackassembly.pntasist_con=ドローアシスタント -tool.trackassembly.ghostcnt=ツールのレンダリングゴーステッドホルダー部分数を管理する -tool.trackassembly.ghostcnt_con=ドローホルダーゴースト -tool.trackassembly.engunsnap=プレイヤー物理銃が落とした部分のスナップを管理する -tool.trackassembly.engunsnap_con=物理銃スナップを可能にする tool.trackassembly.type=フォルダを展開して、使用するトラックタイプを選択します tool.trackassembly.type_con=トラックタイプ\: -tool.trackassembly.subfolder=フォルダを展開して、使用するトラックカテゴリを選択します -tool.trackassembly.subfolder_con=トラックカテゴリ\: +tool.trackassembly.weld=二つの部分と部分とアンカーの間に溶接打点を作る +tool.trackassembly.weld_con=溶接 +tool.trackassembly.workmode.1=通常部分のスポーン/スナップ +tool.trackassembly.workmode.2=アクティブポイントの交差点 +tool.trackassembly.workmode.3=曲線線分フィッティング tool.trackassembly.workmode=稼働モード変更の設定 tool.trackassembly.workmode_con=稼働モ\: -tool.trackassembly.pn_export=クリックでクライアントデータベースをファイルにエクスポート -tool.trackassembly.pn_export_lb=DB エクスポート -tool.trackassembly.pn_routine=よく使った線路部分表 -tool.trackassembly.pn_routine_hd=よく使った部分\: -tool.trackassembly.pn_externdb=使用可能外部データベース\: -tool.trackassembly.pn_externdb_hd=外部データベース\: -tool.trackassembly.pn_externdb_bt1=特異プレフィックスをコピーして -tool.trackassembly.pn_externdb_bt2=DSVフォルダーをコピーして -tool.trackassembly.pn_externdb_bt3=テーブルニックネームをコピーして -tool.trackassembly.pn_externdb_bt4=テーブルパスをコピーして -tool.trackassembly.pn_externdb_bt5=テーブルタイムをコピーして -tool.trackassembly.pn_externdb_bt6=テーブルサイズをコピーして -tool.trackassembly.pn_externdb_bt7=アイテムを編集して(Luapad) -tool.trackassembly.pn_externdb_bt8=データベースエントリを消して -tool.trackassembly.pn_extdsv_lb=外部DSVリスト -tool.trackassembly.pn_extdsv_hd=外部DSVデータベースリストはここに見せる -tool.trackassembly.pn_extdsv_act=アクティブ -tool.trackassembly.pn_extdsv_prf=データベース特異プレッフィクス -tool.trackassembly.pn_display=プレーやの線路部分ここに映る -tool.trackassembly.pn_pattern=ここにパターンを書くとサーチするためにENTERを押して -tool.trackassembly.pn_srchcol=サーチするコラムを選択し -tool.trackassembly.pn_srchcol_lb=<でサーチ> -tool.trackassembly.pn_routine_use=期限 -tool.trackassembly.pn_routine_end=角 -tool.trackassembly.pn_routine_typ=タイプ -tool.trackassembly.pn_routine_nam=ネーム -tool.trackassembly.pn_routine_mod=モデル -tool.trackassembly.pn_routine_lb=定番アイテム -tool.trackassembly.pn_display_lb=部分を映る -tool.trackassembly.pn_pattern_lb=パターンを書く -Cleanup_asmtracks=組み立てた線路部分 -Cleaned_asmtracks=線路部分全部綺麗にした -SBoxLimit_asmtracks=スポーンした線路の限定 diff --git a/resource/localization/zh-cn/trackassembly.properties b/resource/localization/zh-cn/trackassembly.properties index cb7f3126..35f22df8 100644 --- a/resource/localization/zh-cn/trackassembly.properties +++ b/resource/localization/zh-cn/trackassembly.properties @@ -1,9 +1,85 @@ -tool.trackassembly.workmode.1=一般生成/固定 -tool.trackassembly.workmode.2=活动点交点 -tool.trackassembly.workmode.3=曲线线段拟合 -tool.trackassembly.workmode.4=表面法线翻转 -tool.trackassembly.workmode.5=切线过渡弯 +Cleaned_asmtracks=清理了所有轨道组件 +Cleanup_asmtracks=组装好的轨道组件 +SBoxLimit_asmtracks=You've hit the spawned tracks limit! +sbox_maxasmtracks=更改此项以调整服务器上通过轨道工具生成的东西 +sbox_maxasmtracks_con=总段数\: +tool.trackassembly.activrad=选择活动点所需的最小距离 +tool.trackassembly.activrad_con=活动半径\: +tool.trackassembly.adviser=控制渲染工具位置/角度顾问 +tool.trackassembly.adviser_con=绘图顾问 +tool.trackassembly.angsnap=固定在这个度数下产生的第一组件 +tool.trackassembly.angsnap_con=角度校准\: +tool.trackassembly.appangfst=仅在第一个组件上应用角度偏移 +tool.trackassembly.appangfst_con=首先应用角度 +tool.trackassembly.applinfst=仅在第一个组件上应用线性偏移 +tool.trackassembly.applinfst_con=首先应用线性 +tool.trackassembly.bgskids=以逗号分隔的Bodygroup的选择代码/皮肤ID +tool.trackassembly.bgskids_con=Bodygroup/皮肤\: +tool.trackassembly.bgskids_def=在此编写选择代码。例如 1,0,0,2,1/3 +tool.trackassembly.bnderrmod=更改此设置以定义客户端在地图边界之外生成组件时的行为 +tool.trackassembly.bnderrmod_con=边界模式\: +tool.trackassembly.bnderrmod_error=显示拒绝堆栈/生成错误消息 +tool.trackassembly.bnderrmod_generic=显示拒绝堆栈/生成通用消息 +tool.trackassembly.bnderrmod_hint=显示拒绝堆栈/生成提示消息 +tool.trackassembly.bnderrmod_log=拒绝堆栈/生成错误被记录 +tool.trackassembly.bnderrmod_off=允许无限制地堆叠/生成 +tool.trackassembly.buttonas+/-=Negate value +tool.trackassembly.buttonas<>=Decrement/Increment +tool.trackassembly.buttonas@D=Default value +tool.trackassembly.buttonas@M=Memorize value +tool.trackassembly.client_var=客户端玩家偏好。在工具客户端配置中创建的Convar +tool.trackassembly.crvleanlm=更改此设置以调整该段的倾斜弯曲锐度限制 +tool.trackassembly.crvleanlm_con=曲率倾斜\: +tool.trackassembly.crvturnlm=更改此设置以调整该段的转弯弯曲锐度限制 +tool.trackassembly.crvturnlm_con=曲率转弯\: +tool.trackassembly.curvefact=更改此值以调整曲线因子正切系数 +tool.trackassembly.curvefact_con=曲线系数\: +tool.trackassembly.curvsmple=更改此设置以调整曲线插值样本 +tool.trackassembly.curvsmple_con=曲线样本\: +tool.trackassembly.desc=组装供载具行驶的轨道|汉化:轻骑兵涅普,本人水平有限,若有语法、翻译错误还请指出 +tool.trackassembly.devmode=启用后,将打开开发人员模式以进行跟踪和调试 +tool.trackassembly.devmode_con=启用开发者模式 +tool.trackassembly.dtmessage=控制上下文菜单服务器消息之间的时间间隔 +tool.trackassembly.dtmessage_con=信息延迟\: +tool.trackassembly.enctxmall=启用后,将打开所有道具的工具专用上下文菜单 +tool.trackassembly.enctxmall_con=为所有道具启用上下文菜单 +tool.trackassembly.enctxmenu=启用后,将打开工具专用的上下文菜单 +tool.trackassembly.enctxmenu_con=启用上下文菜单 +tool.trackassembly.endsvlock=启用后,将打开外部可插拔的DSV数据库文件锁 +tool.trackassembly.endsvlock_con=启用 DSV 数据库锁 +tool.trackassembly.engunsnap=通过玩家物理枪控制固定,当组件掉落 +tool.trackassembly.engunsnap_con=启用物理枪固定 +tool.trackassembly.enmultask=启用后,会在堆叠模式下开启多任务处理 +tool.trackassembly.enmultask_con=启用多任务处理 +tool.trackassembly.enpntmscr=启用后,通过鼠标滚动打开切换活动点 +tool.trackassembly.enpntmscr_con=启用点滚动 +tool.trackassembly.enradmenu=启用后,将打开工作模式径向菜单的使用功能 +tool.trackassembly.enradmenu_con=启用径向菜单 +tool.trackassembly.enwiremod=启用后将打开wiremod拓展 +tool.trackassembly.enwiremod_con=启用wire拓展 +tool.trackassembly.exportdb=启用后,会将数据库导出为一个大文件 +tool.trackassembly.exportdb_con=启用数据库导出 +tool.trackassembly.factory_reset=单击此按钮应用控制台变量出厂设置 +tool.trackassembly.factory_reset_con=应用出厂设置 +tool.trackassembly.forcelim=控制破坏焊缝所需的力 +tool.trackassembly.forcelim_con=力限制\: +tool.trackassembly.freeze=使该组件在冻结状态下生成 +tool.trackassembly.freeze_con=冻结组件 +tool.trackassembly.ghostblnd=控制重影透明度混合。值越低越透明 +tool.trackassembly.ghostblnd_con=重影透明度\: +tool.trackassembly.ghostcnt=控件显示工具重影支架件组件数量数 +tool.trackassembly.ghostcnt_con=重影数量\: +tool.trackassembly.gravity=控制生成的组件的重力 +tool.trackassembly.gravity_con=应用组件重力 +tool.trackassembly.ignphysgn=忽略物理枪对生成/固定/堆叠组件的抓取 +tool.trackassembly.ignphysgn_con=忽略物理枪 +tool.trackassembly.igntype=使工具忽略固定/堆叠时的不同组件类型 +tool.trackassembly.igntype_con=忽略轨道类型 +tool.trackassembly.incsnpang=定义使用按钮滑块时的角度增量步长 +tool.trackassembly.incsnpang_con=角度步进\: +tool.trackassembly.incsnplin=定义使用按钮滑块时的线性增量步骤 +tool.trackassembly.incsnplin_con=线性步长\: tool.trackassembly.info.1=在地图上生成部件或将部件对齐 tool.trackassembly.info.2=将轨道部分与为此设计的专用路段连接起来 tool.trackassembly.info.3=创建通过给定检查点的连续轨道布局 @@ -14,249 +90,168 @@ tool.trackassembly.left.2=在交叉点生成轨道部件 tool.trackassembly.left.3=生成分段轨迹插值曲线 tool.trackassembly.left.4=在所选轨道浏览列表上生成 tool.trackassembly.left.5=生成分段轨迹插值曲线 -tool.trackassembly.right.1=复制轨道件模型或打开常用部件对话框 -tool.trackassembly.right.2=复制轨道件模型或打开常用部件对话框 -tool.trackassembly.right.3=为分段曲线创建节点。按住SHIFT进行更新。 -tool.trackassembly.right.4=将实体注册到浏览列表中。按住SHIFT更改模型。 -tool.trackassembly.right.5=为分段曲线创建节点。按住SHIFT进行更新。 -tool.trackassembly.right_use.1=禁用滚动。复制轨道件模型或打开常用组件对话框。 -tool.trackassembly.right_use.2=禁用滚动。复制轨道件模型或打开常用组件对话框。 -tool.trackassembly.right_use.3=从最近的轨道组件活动点生成节点。 -tool.trackassembly.right_use.4=禁用滚动。复制轨道件模型或打开常用组件对话框。 -tool.trackassembly.right_use.5=从最近的轨道组件活动点生成节点。 -tool.trackassembly.reload.1=移除轨道部件。按住SHIFT键选择锚点。 -tool.trackassembly.reload.2=移除一个轨道。按住SHIFT键选择关系射线。 -tool.trackassembly.reload.3=删除曲线插值节点。按住SHIFT清除堆栈。 -tool.trackassembly.reload.4=清除浏览实体选择列表。当空缺时移除组件 -tool.trackassembly.reload.5=删除曲线插值节点。按住SHIFT清除堆栈。 -tool.trackassembly.reload_use.1=启用数据库导出以打开DSV管理器 -tool.trackassembly.reload_use.2=启用数据库导出以打开DSV管理器 -tool.trackassembly.reload_use.3=启用数据库导出以打开DSV管理器 -tool.trackassembly.reload_use.4=启用数据库导出以打开DSV管理器 -tool.trackassembly.reload_use.5=启用数据库导出以打开DSV管理器 -tool.trackassembly.desc=组装供载具行驶的轨道|汉化:轻骑兵涅普,本人水平有限,若有语法、翻译错误还请指出 -tool.trackassembly.name=轨道组件 -tool.trackassembly.phytype=选择此处列出的物理属性类型 -tool.trackassembly.phytype_con=材料类型\: -tool.trackassembly.phytype_def=<选择表面材料类型> -tool.trackassembly.phyname=选择创建轨道时要使用的物理属性名称,因为这会影响表面摩擦力 -tool.trackassembly.phyname_con=材料名称\: -tool.trackassembly.phyname_def=<选择表面材料名称> -tool.trackassembly.bgskids=以逗号分隔的Bodygroup的选择代码/皮肤ID -tool.trackassembly.bgskids_con=Bodygroup/皮肤\: -tool.trackassembly.bgskids_def=在此编写选择代码。例如 1,0,0,2,1/3 +tool.trackassembly.logfile=启用后开始将日志流式传输到专用文件中 +tool.trackassembly.logfile_con=启用日志文件 +tool.trackassembly.logsmax=更改此项以调整日志流写入的最大输出行数 +tool.trackassembly.logsmax_con=记录线路\: tool.trackassembly.mass=生成的组件有多重 tool.trackassembly.mass_con=组件质量\: +tool.trackassembly.maxactrad=更改此项可调整获取点ID的最大活动半径 +tool.trackassembly.maxactrad_con=半径限制\: +tool.trackassembly.maxforce=更改此设置以调整创建焊缝时的最大力限制 +tool.trackassembly.maxforce_con=力限制\: +tool.trackassembly.maxfruse=更改此设置以调整有多少常用组件的深度 +tool.trackassembly.maxfruse_con=常用组件\: +tool.trackassembly.maxlinear=更改此设置以调整组件上的最大线性偏移 +tool.trackassembly.maxlinear_con=偏移限制\: +tool.trackassembly.maxmass=更改此设置可调整可应用于组件的最大质量 +tool.trackassembly.maxmass_con=最大质量\: +tool.trackassembly.maxmenupr=更改此项以调整菜单中的小数位数 +tool.trackassembly.maxmenupr_con=小数位\: +tool.trackassembly.maxstatts=定义脚本在失败之前将尝试的堆栈尝试次数 +tool.trackassembly.maxstatts_con=堆栈尝试\: +tool.trackassembly.maxstcnt=更改此设置可调整堆叠模式下创建的最大件数 +tool.trackassembly.maxstcnt_con=堆栈限制\: +tool.trackassembly.maxtrmarg=更改此设置以调整工具轨迹之间的时间 +tool.trackassembly.maxtrmarg_con=迹线余量\: +tool.trackassembly.modedb=更改此项以定义轨道数据库的存储行为 +tool.trackassembly.modedb_con=数据库模式\: +tool.trackassembly.modedb_lua=利用直接缓存存储 +tool.trackassembly.modedb_sql=仅缓存请求的记录 tool.trackassembly.model=通过展开类型并单击节点来选择要开始/追踪轨道的组件 tool.trackassembly.model_con=组件模型\: -tool.trackassembly.activrad=选择活动点所需的最小距离 -tool.trackassembly.activrad_con=活动半径\: -tool.trackassembly.stackcnt=堆叠时创建的最大组件数量 -tool.trackassembly.stackcnt_con=组件数量\: -tool.trackassembly.angsnap=固定在这个度数下产生的第一组件 -tool.trackassembly.angsnap_con=角度校准\: -tool.trackassembly.resetvars=单击以重置附加值 -tool.trackassembly.resetvars_con=V 重置变量 V +tool.trackassembly.name=轨道组件 tool.trackassembly.nextpic=额外的原点角节距偏移 tool.trackassembly.nextpic_con=原点间距\: -tool.trackassembly.nextyaw=附加原点偏航角偏移 -tool.trackassembly.nextyaw_con=原点偏航\: tool.trackassembly.nextrol=附加原点角滚动偏移 tool.trackassembly.nextrol_con=原点滚动\: tool.trackassembly.nextx=附加原点线性 X 支距 tool.trackassembly.nextx_con=支距 X\: tool.trackassembly.nexty=附加原点线性 Y 支距 tool.trackassembly.nexty_con=支距 Y\: +tool.trackassembly.nextyaw=附加原点偏航角偏移 +tool.trackassembly.nextyaw_con=原点偏航\: tool.trackassembly.nextz=附加原点线性 Z 支距 tool.trackassembly.nextz_con=支距 Z\: -tool.trackassembly.gravity=控制生成的组件的重力 -tool.trackassembly.gravity_con=应用组件重力 -tool.trackassembly.weld=在组件或组件/锚点之间创建焊接 -tool.trackassembly.weld_con=焊接 -tool.trackassembly.forcelim=控制破坏焊缝所需的力 -tool.trackassembly.forcelim_con=力限制\: -tool.trackassembly.ignphysgn=忽略物理枪对生成/固定/堆叠组件的抓取 -tool.trackassembly.ignphysgn_con=忽略物理枪 tool.trackassembly.nocollide=在组件/锚点之间创建无碰撞 tool.trackassembly.nocollide_con=无碰撞 tool.trackassembly.nocollidew=在组件和世界之间创建无碰撞 tool.trackassembly.nocollidew_con=无碰撞世界 -tool.trackassembly.freeze=使该组件在冻结状态下生成 -tool.trackassembly.freeze_con=冻结组件 -tool.trackassembly.igntype=使工具忽略固定/堆叠时的不同组件类型 -tool.trackassembly.igntype_con=忽略轨道类型 -tool.trackassembly.spnflat=下一组件将水平生成/固定/堆叠 -tool.trackassembly.spnflat_con=水平生成 -tool.trackassembly.spawncn=在中心点生成组件,否则相对于所选的活动点生成组件 -tool.trackassembly.spawncn_con=中心原点 -tool.trackassembly.surfsnap=将组件固定在玩家指向的表面上 -tool.trackassembly.surfsnap_con=固定到轨迹表面 -tool.trackassembly.appangfst=仅在第一个组件上应用角度偏移 -tool.trackassembly.appangfst_con=首先应用角度 -tool.trackassembly.applinfst=仅在第一个组件上应用线性偏移 -tool.trackassembly.applinfst_con=首先应用线性 -tool.trackassembly.adviser=控制渲染工具位置/角度顾问 -tool.trackassembly.adviser_con=绘图顾问 -tool.trackassembly.pntasist=控制渲染工具固定点助手 -tool.trackassembly.pntasist_con=绘图助手 -tool.trackassembly.ghostcnt=控件显示工具重影支架件组件数量数 -tool.trackassembly.ghostcnt_con=重影数量\: -tool.trackassembly.ghostblnd=控制重影透明度混合。值越低越透明 -tool.trackassembly.ghostblnd_con=重影透明度\: -tool.trackassembly.dtmessage=控制上下文菜单服务器消息之间的时间间隔 -tool.trackassembly.dtmessage_con=信息延迟\: -tool.trackassembly.engunsnap=通过玩家物理枪控制固定,当组件掉落 -tool.trackassembly.engunsnap_con=启用物理枪固定 -tool.trackassembly.upspanchor=启用在每次生成时更新锚点(非固定状态) -tool.trackassembly.upspanchor_con=更新生成时的锚点 -tool.trackassembly.type=通过展开文件夹选择要使用的轨道类型 -tool.trackassembly.type_con=轨道类型\: -tool.trackassembly.subfolder=通过展开文件夹选择要使用的轨道类别 -tool.trackassembly.subfolder_con=轨道类别\: -tool.trackassembly.workmode=更改此选项以选择不同的工作模式 -tool.trackassembly.workmode_con=工作模式\: +tool.trackassembly.nonrep_var=非复制convar控件。它们在服务器和客户端上有不同的值 +tool.trackassembly.phyname=选择创建轨道时要使用的物理属性名称,因为这会影响表面摩擦力 +tool.trackassembly.phyname_con=材料名称\: +tool.trackassembly.phyname_def=<选择表面材料名称> +tool.trackassembly.phytype=选择此处列出的物理属性类型 +tool.trackassembly.phytype_con=材料类型\: +tool.trackassembly.phytype_def=<选择表面材料类型> +tool.trackassembly.pn_contextm_cp=复制 +tool.trackassembly.pn_contextm_cpbx=复制单元格值 +tool.trackassembly.pn_contextm_cpmd=模型 +tool.trackassembly.pn_contextm_cpnm=姓名 +tool.trackassembly.pn_contextm_cprw=排 +tool.trackassembly.pn_contextm_cpth=小路 +tool.trackassembly.pn_contextm_cpty=类型 +tool.trackassembly.pn_contextm_st=表格 +tool.trackassembly.pn_contextm_stdl=删除数据库条目 +tool.trackassembly.pn_contextm_sted=编辑表格内容(Luapad) +tool.trackassembly.pn_contextm_stnk=复制表缺口 +tool.trackassembly.pn_contextm_stpt=复制表路径 +tool.trackassembly.pn_contextm_stsz=复制表尺寸 +tool.trackassembly.pn_contextm_sttm=复制表时间 +tool.trackassembly.pn_display=您的轨道组件的模型显示在此处 +tool.trackassembly.pn_display_lb=组件展示 tool.trackassembly.pn_export=单击可将客户端数据库导出为文件 tool.trackassembly.pn_export_lb=导出数据库 -tool.trackassembly.pn_routine=您经常使用的轨道列表 -tool.trackassembly.pn_routine_hd=常用组件\: -tool.trackassembly.pn_externdb=外部数据库可用于\: -tool.trackassembly.pn_externdb_hd=外部数据库由\: -tool.trackassembly.pn_externdb_ttt=当前修改的配置值\: -tool.trackassembly.pn_externdb_bti=输入 -tool.trackassembly.pn_externdb_bti_tp=将文件列表中的信息导入面板中进行编辑 -tool.trackassembly.pn_externdb_bte=输出 -tool.trackassembly.pn_externdb_bte_tp=将信息从面板导出到文件列表并应用 -tool.trackassembly.pn_externdb_bt1=复制唯一前缀 -tool.trackassembly.pn_externdb_bt2=复制 DSV 文件夹路径 -tool.trackassembly.pn_externdb_bt3=复制表缺口 -tool.trackassembly.pn_externdb_bt4=复制表路径 -tool.trackassembly.pn_externdb_bt5=复制表时间 -tool.trackassembly.pn_externdb_bt6=复制表尺寸 -tool.trackassembly.pn_externdb_bt7=编辑表格内容(Luapad) -tool.trackassembly.pn_externdb_bt8=删除数据库条目 -tool.trackassembly.pn_contextm_1_1=复制单元格值 -tool.trackassembly.pn_contextm_1_2=复制整行 -tool.trackassembly.pn_contextm_1_3=启用/禁用 -tool.trackassembly.pn_contextm_1_4=更改线路 -tool.trackassembly.pn_contextm_1_5=创造线路 -tool.trackassembly.pn_contextm_1_6=移除线路 -tool.trackassembly.pn_extdsv_lb=外部 DSV 列表 -tool.trackassembly.pn_extdsv_hd=此处显示外部 DSV 数据库列表 tool.trackassembly.pn_extdsv_act=活动的 -tool.trackassembly.pn_extdsv_prf=数据库唯一前缀 +tool.trackassembly.pn_extdsv_hd=此处显示外部 DSV 数据库列表 tool.trackassembly.pn_extdsv_inf=附加信息 -tool.trackassembly.pn_display=您的轨道组件的模型显示在此处 +tool.trackassembly.pn_extdsv_lb=外部 DSV 列表 +tool.trackassembly.pn_extdsv_prf=数据库唯一前缀 +tool.trackassembly.pn_externdb_bte=输出 +tool.trackassembly.pn_externdb_bte_tp=将信息从面板导出到文件列表并应用 +tool.trackassembly.pn_externdb_bti=输入 +tool.trackassembly.pn_externdb_bti_tp=将文件列表中的信息导入面板中进行编辑 +tool.trackassembly.pn_externdb_hd=外部数据库由\: +tool.trackassembly.pn_externdb_ttt=当前修改的配置值\: tool.trackassembly.pn_pattern=在此写入模式并按 ENTER 执行搜索 -tool.trackassembly.pn_srchcol=选择您要执行搜索的列表列 -tool.trackassembly.pn_srchcol_lb=<搜索> -tool.trackassembly.pn_routine_use=使用 +tool.trackassembly.pn_pattern_lb=写入模式 +tool.trackassembly.pn_routine=您经常使用的轨道列表 tool.trackassembly.pn_routine_end=结束 -tool.trackassembly.pn_routine_typ=类型 -tool.trackassembly.pn_routine_nam=名称 -tool.trackassembly.pn_routine_mod=模型 +tool.trackassembly.pn_routine_hd=常用组件\: tool.trackassembly.pn_routine_lb=常规项目 -tool.trackassembly.pn_display_lb=组件展示 -tool.trackassembly.pn_pattern_lb=写入模式 -tool.trackassembly.sizeucs=为显示的坐标系设置的比例 -tool.trackassembly.sizeucs_con=缩放 UCS\: -tool.trackassembly.maxstatts=定义脚本在失败之前将尝试的堆栈尝试次数 -tool.trackassembly.maxstatts_con=堆栈尝试\: -tool.trackassembly.incsnpang=定义使用按钮滑块时的角度增量步长 -tool.trackassembly.incsnpang_con=角度步进\: -tool.trackassembly.incsnplin=定义使用按钮滑块时的线性增量步骤 -tool.trackassembly.incsnplin_con=线性步长\: -tool.trackassembly.enradmenu=启用后,将打开工作模式径向菜单的使用功能 -tool.trackassembly.enradmenu_con=启用径向菜单 -tool.trackassembly.sgradmenu=更改此设置以使径向菜单更加圆形。越高越平滑 -tool.trackassembly.sgradmenu_con=径向段\: +tool.trackassembly.pn_routine_mod=模型 +tool.trackassembly.pn_routine_nam=名称 +tool.trackassembly.pn_routine_typ=类型 +tool.trackassembly.pn_routine_use=使用 +tool.trackassembly.pn_srchcol=选择您要执行搜索的列表列 +tool.trackassembly.pn_srchcol_lb=<搜索> +tool.trackassembly.pntasist=控制渲染工具固定点助手 +tool.trackassembly.pntasist_con=绘图助手 +tool.trackassembly.relica_var=复制convar控件。服务器值发送给所有客户端使用 +tool.trackassembly.reload.1=移除轨道部件。按住SHIFT键选择锚点。 +tool.trackassembly.reload.2=移除一个轨道。按住SHIFT键选择关系射线。 +tool.trackassembly.reload.3=删除曲线插值节点。按住SHIFT清除堆栈。 +tool.trackassembly.reload.4=清除浏览实体选择列表。当空缺时移除组件 +tool.trackassembly.reload.5=删除曲线插值节点。按住SHIFT清除堆栈。 +tool.trackassembly.reload_use.1=启用数据库导出以打开DSV管理器 +tool.trackassembly.reload_use.2=启用数据库导出以打开DSV管理器 +tool.trackassembly.reload_use.3=启用数据库导出以打开DSV管理器 +tool.trackassembly.reload_use.4=启用数据库导出以打开DSV管理器 +tool.trackassembly.reload_use.5=启用数据库导出以打开DSV管理器 +tool.trackassembly.resetvars=单击以重置附加值 +tool.trackassembly.resetvars_con=V 重置变量 V +tool.trackassembly.right.1=复制轨道件模型或打开常用部件对话框 +tool.trackassembly.right.2=复制轨道件模型或打开常用部件对话框 +tool.trackassembly.right.3=为分段曲线创建节点。按住SHIFT进行更新。 +tool.trackassembly.right.4=将实体注册到浏览列表中。按住SHIFT更改模型。 +tool.trackassembly.right.5=为分段曲线创建节点。按住SHIFT进行更新。 +tool.trackassembly.right_use.1=禁用滚动。复制轨道件模型或打开常用组件对话框。 +tool.trackassembly.right_use.2=禁用滚动。复制轨道件模型或打开常用组件对话框。 +tool.trackassembly.right_use.3=从最近的轨道组件活动点生成节点。 +tool.trackassembly.right_use.4=禁用滚动。复制轨道件模型或打开常用组件对话框。 +tool.trackassembly.right_use.5=从最近的轨道组件活动点生成节点。 tool.trackassembly.rtradmenu=更改此设置可调整径向菜单基角并重新定位其选项 tool.trackassembly.rtradmenu_con=径向旋转\: -tool.trackassembly.enpntmscr=启用后,通过鼠标滚动打开切换活动点 -tool.trackassembly.enpntmscr_con=启用点滚动 -tool.trackassembly.exportdb=启用后,会将数据库导出为一个大文件 -tool.trackassembly.exportdb_con=启用数据库导出 -tool.trackassembly.devmode=启用后,将打开开发人员模式以进行跟踪和调试 -tool.trackassembly.devmode_con=启用开发者模式 -tool.trackassembly.maxtrmarg=更改此设置以调整工具轨迹之间的时间 -tool.trackassembly.maxtrmarg_con=迹线余量\: -tool.trackassembly.maxmenupr=更改此项以调整菜单中的小数位数 -tool.trackassembly.maxmenupr_con=小数位\: -tool.trackassembly.maxmass=更改此设置可调整可应用于组件的最大质量 -tool.trackassembly.maxmass_con=最大质量\: -tool.trackassembly.maxlinear=更改此设置以调整组件上的最大线性偏移 -tool.trackassembly.maxlinear_con=偏移限制\: -tool.trackassembly.maxforce=更改此设置以调整创建焊缝时的最大力限制 -tool.trackassembly.maxforce_con=力限制\: -tool.trackassembly.maxactrad=更改此项可调整获取点ID的最大活动半径 -tool.trackassembly.maxactrad_con=半径限制\: -tool.trackassembly.maxstcnt=更改此设置可调整堆叠模式下创建的最大件数 -tool.trackassembly.maxstcnt_con=堆栈限制\: -tool.trackassembly.enwiremod=启用后将打开wiremod拓展 -tool.trackassembly.enwiremod_con=启用wire拓展 -tool.trackassembly.enmultask=启用后,会在堆叠模式下开启多任务处理 -tool.trackassembly.enmultask_con=启用多任务处理 -tool.trackassembly.enctxmenu=启用后,将打开工具专用的上下文菜单 -tool.trackassembly.enctxmenu_con=启用上下文菜单 -tool.trackassembly.enctxmall=启用后,将打开所有道具的工具专用上下文菜单 -tool.trackassembly.enctxmall_con=为所有道具启用上下文菜单 -tool.trackassembly.endsvlock=启用后,将打开外部可插拔的DSV数据库文件锁 -tool.trackassembly.endsvlock_con=启用 DSV 数据库锁 -tool.trackassembly.curvefact=更改此值以调整曲线因子正切系数 -tool.trackassembly.curvefact_con=曲线系数\: -tool.trackassembly.curvsmple=更改此设置以调整曲线插值样本 -tool.trackassembly.curvsmple_con=曲线样本\: -tool.trackassembly.crvturnlm=更改此设置以调整该段的转弯弯曲锐度限制 -tool.trackassembly.crvturnlm_con=曲率转弯\: -tool.trackassembly.crvleanlm=更改此设置以调整该段的倾斜弯曲锐度限制 -tool.trackassembly.crvleanlm_con=曲率倾斜\: +tool.trackassembly.sgradmenu=更改此设置以使径向菜单更加圆形。越高越平滑 +tool.trackassembly.sgradmenu_con=径向段\: +tool.trackassembly.sizeucs=为显示的坐标系设置的比例 +tool.trackassembly.sizeucs_con=缩放 UCS\: +tool.trackassembly.spawncn=在中心点生成组件,否则相对于所选的活动点生成组件 +tool.trackassembly.spawncn_con=中心原点 tool.trackassembly.spawnrate=更改此设置以调整每个服务器刻度生成的轨道段的数量 tool.trackassembly.spawnrate_con=生成率\: -tool.trackassembly.bnderrmod=更改此设置以定义客户端在地图边界之外生成组件时的行为 -tool.trackassembly.bnderrmod_off=允许无限制地堆叠/生成 -tool.trackassembly.bnderrmod_log=拒绝堆栈/生成错误被记录 -tool.trackassembly.bnderrmod_hint=显示拒绝堆栈/生成提示消息 -tool.trackassembly.bnderrmod_generic=显示拒绝堆栈/生成通用消息 -tool.trackassembly.bnderrmod_error=显示拒绝堆栈/生成错误消息 -tool.trackassembly.bnderrmod_con=边界模式\: -tool.trackassembly.modedb=更改此项以定义轨道数据库的存储行为 -tool.trackassembly.modedb_lua=利用直接缓存存储 -tool.trackassembly.modedb_sql=仅缓存请求的记录 -tool.trackassembly.modedb_con=数据库模式\: -tool.trackassembly.maxfruse=更改此设置以调整有多少常用组件的深度 -tool.trackassembly.maxfruse_con=常用组件\: +tool.trackassembly.spnflat=下一组件将水平生成/固定/堆叠 +tool.trackassembly.spnflat_con=水平生成 +tool.trackassembly.stackcnt=堆叠时创建的最大组件数量 +tool.trackassembly.stackcnt_con=组件数量\: +tool.trackassembly.subfolder=通过展开文件夹选择要使用的轨道类别 +tool.trackassembly.subfolder_con=轨道类别\: +tool.trackassembly.surfsnap=将组件固定在玩家指向的表面上 +tool.trackassembly.surfsnap_con=固定到轨迹表面 tool.trackassembly.timermode_ap=单击此按钮可将更改应用到 SQL 内存管理器配置 tool.trackassembly.timermode_ap_con=应用内存设置 -tool.trackassembly.timermode_md=更改此项可调整 SQL 内存管理器的计时器算法 -tool.trackassembly.timermode_lf=更改此项可调整记录在缓存中的停留时间 -tool.trackassembly.timermode_lf_con=Record life\: -tool.trackassembly.timermode_rd=启用后,通过强制 nil 值从缓存中擦除记录 -tool.trackassembly.timermode_rd_con=启用记录删除 +tool.trackassembly.timermode_cqt=通过记录请求缓存查询计时器 tool.trackassembly.timermode_ct=启用后,删除记录时强制运行垃圾回收 tool.trackassembly.timermode_ct_con=启用垃圾收集 +tool.trackassembly.timermode_lf=更改此项可调整记录在缓存中的停留时间 +tool.trackassembly.timermode_lf_con=Record life\: +tool.trackassembly.timermode_md=更改此项可调整 SQL 内存管理器的计时器算法 tool.trackassembly.timermode_mem=SQL表的内存管理器\: -tool.trackassembly.timermode_cqt=通过记录请求缓存查询计时器 tool.trackassembly.timermode_obj=附加到缓存记录的对象计时器 -tool.trackassembly.factory_reset=单击此按钮应用控制台变量出厂设置 -tool.trackassembly.factory_reset_con=应用出厂设置 -tool.trackassembly.logfile=启用后开始将日志流式传输到专用文件中 -tool.trackassembly.logfile_con=启用日志文件 -tool.trackassembly.logsmax=更改此项以调整日志流写入的最大输出行数 -tool.trackassembly.logsmax_con=记录线路\: -tool.trackassembly.client_var=客户端玩家偏好。在工具客户端配置中创建的Convar -tool.trackassembly.nonrep_var=非复制convar控件。它们在服务器和客户端上有不同的值 -tool.trackassembly.relica_var=复制convar控件。服务器值发送给所有客户端使用 -tool.trackassembly.utilities_user=用户设置 +tool.trackassembly.timermode_rd=启用后,通过强制 nil 值从缓存中擦除记录 +tool.trackassembly.timermode_rd_con=启用记录删除 +tool.trackassembly.type=通过展开文件夹选择要使用的轨道类型 +tool.trackassembly.type_con=轨道类型\: +tool.trackassembly.upspanchor=启用在每次生成时更新锚点(非固定状态) +tool.trackassembly.upspanchor_con=更新生成时的锚点 tool.trackassembly.utilities_admin=管理员设置 -tool.trackassembly.buttonas<>=Decrement/Increment -tool.trackassembly.buttonas+/-=Negate value -tool.trackassembly.buttonas@M=Memorize value -tool.trackassembly.buttonas@D=Default value -tool.trackassembly.buttonas@45=Update 45 -tool.trackassembly.buttonas@90=Update 90 -tool.trackassembly.buttonas@135=Update 135 -tool.trackassembly.buttonas@180=Update 180 -sbox_maxasmtracks=更改此项以调整服务器上通过轨道工具生成的东西 -sbox_maxasmtracks_con=总段数\: -Cleanup_asmtracks=组装好的轨道组件 -Cleaned_asmtracks=清理了所有轨道组件 -SBoxLimit_asmtracks=You've hit the spawned tracks limit! +tool.trackassembly.utilities_user=用户设置 +tool.trackassembly.weld=在组件或组件/锚点之间创建焊接 +tool.trackassembly.weld_con=焊接 +tool.trackassembly.workmode.1=一般生成/固定 +tool.trackassembly.workmode.2=活动点交点 +tool.trackassembly.workmode.3=曲线线段拟合 +tool.trackassembly.workmode.4=表面法线翻转 +tool.trackassembly.workmode.5=切线过渡弯 +tool.trackassembly.workmode=更改此选项以选择不同的工作模式 +tool.trackassembly.workmode_con=工作模式\: From 244f80309f9f8ef575e282b08259e89a389a2867 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 13 Nov 2024 15:48:48 +0200 Subject: [PATCH 083/114] Apply: UTF-8 BOM to the Chinese translations --- resource/localization/zh-cn/trackassembly.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resource/localization/zh-cn/trackassembly.properties b/resource/localization/zh-cn/trackassembly.properties index 35f22df8..707ed37a 100644 --- a/resource/localization/zh-cn/trackassembly.properties +++ b/resource/localization/zh-cn/trackassembly.properties @@ -1,4 +1,4 @@ - + Cleaned_asmtracks=清理了所有轨道组件 Cleanup_asmtracks=组装好的轨道组件 SBoxLimit_asmtracks=You've hit the spawned tracks limit! From bea1f827de438ea745770dd764391f0986728171 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 13 Nov 2024 16:43:55 +0200 Subject: [PATCH 084/114] Finished: French translations --- .../localization/fr/trackassembly.properties | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/resource/localization/fr/trackassembly.properties b/resource/localization/fr/trackassembly.properties index cf1deae8..5390901a 100644 --- a/resource/localization/fr/trackassembly.properties +++ b/resource/localization/fr/trackassembly.properties @@ -24,6 +24,12 @@ tool.trackassembly.bnderrmod_generic=[4] Refuser l'empilement/création message tool.trackassembly.bnderrmod_hint=[3] Refuser l'empilement/création message d'astuce est affiché tool.trackassembly.bnderrmod_log=[2] Refuser l'empilement/création l'erreur est enregistré tool.trackassembly.bnderrmod_off=[1] Autoriser l'empilement/création sans restriction +tool.trackassembly.buttonas+/-=Nier la valeur +tool.trackassembly.buttonas<>=Diminuer/Augmenter +tool.trackassembly.buttonas@=Appliquer la valeur\: +tool.trackassembly.buttonas@D=Valeur par défaut +tool.trackassembly.buttonas@M=Mémoriser la valeur +tool.trackassembly.client_var=Préférences utilisateur côté client. Convars créées dans la configuration client de l'outil tool.trackassembly.crvleanlm=Changer ceci pour ajuster la finesse de la courbure en inclinaison pour le segment tool.trackassembly.crvleanlm_con=Courbure en inclinaison\: tool.trackassembly.crvturnlm=Changer ceci pour ajuster la finesse de la courbure en virage pour le segment @@ -35,6 +41,8 @@ tool.trackassembly.curvsmple_con=Échantillons courbe\: tool.trackassembly.desc=Assemble une piste auquel les véhicules peuvent rouler dessus tool.trackassembly.devmode=Active le traçage et débogage tool.trackassembly.devmode_con=Activer le mode développeur +tool.trackassembly.dtmessage=Contrôle les intervalles de temps entre les messages du serveur du menu contextuel +tool.trackassembly.dtmessage_con=Delta du message\: tool.trackassembly.enctxmall=Active le menu contextuel de l'outil dédiée pour tous les objets tool.trackassembly.enctxmall_con=Activer le menu contextuel pour tous les objets tool.trackassembly.enctxmenu=Active le menu contextuel de l'outil dédiée pour les pièces @@ -53,10 +61,14 @@ tool.trackassembly.enwiremod=Active l'extension pour la puce d'expression Wiremo tool.trackassembly.enwiremod_con=Activer wire expression tool.trackassembly.exportdb=Active l'exportation de la base de données en un grand fichier tool.trackassembly.exportdb_con=Activer l'exportation de la base de données +tool.trackassembly.factory_reset=Cliquez ici pour appliquer les paramètres d'usine des variables de la console +tool.trackassembly.factory_reset_con=Appliquer les paramètres d'usine tool.trackassembly.forcelim=Force nécessaire pour casser la soudure tool.trackassembly.forcelim_con=Limite de force\: tool.trackassembly.freeze=La pièce qui sera créée sera dans un état gelé tool.trackassembly.freeze_con=Geler la pièce +tool.trackassembly.ghostblnd=Contrôle la transparence des fantômes. Plus la valeur est basse, plus ils sont transparents +tool.trackassembly.ghostblnd_con=Transparence des fantômes\: tool.trackassembly.ghostcnt=Montrer un aperçu de la pièces compter active tool.trackassembly.ghostcnt_con=Activer compter l'aperçu de l'outil tool.trackassembly.gravity=Contrôle la gravité sur la pièce créée @@ -73,6 +85,7 @@ tool.trackassembly.info.1=Créer des pièces sur la carte ou les aligner relativ tool.trackassembly.info.2=Connecte les sections de piste avec un segment spécialement dédié pour cela tool.trackassembly.info.3=Forme une piste continue passant par les points de passage définis tool.trackassembly.info.4=Retourne les entités sélectionnées de la liste à travers les origines et normales définis +tool.trackassembly.info.5=Crée des transitions plus fluides dans les virages où le rayon change dans les courbes tool.trackassembly.left.1=Créer/Aligner une pièce de piste. Maintenir MAJUSCULE pour empiler tool.trackassembly.left.2=Créer une pièce de piste au point d'intersection tool.trackassembly.left.3=Créer la piste segmentée par interpolation de courbe @@ -90,18 +103,26 @@ tool.trackassembly.maxforce=Changer ceci pour ajuster la limite maximale de la f tool.trackassembly.maxforce_con=Limite de force\: tool.trackassembly.maxfruse=Changer ceci pour ajuster combien de pièces peuvent apparaître dans la fenêtre des pièces fréquentes tool.trackassembly.maxfruse_con=Pièces fréquentes\: +tool.trackassembly.maxghcnt=Modifiez ceci pour ajuster le nombre maximal de pièces en mode empilage +tool.trackassembly.maxghcnt_con=Limite des fantômes\: tool.trackassembly.maxlinear=Changer ceci pour ajuster le décalage linéaire maximal sur une pièce tool.trackassembly.maxlinear_con=Limite du décalage\: tool.trackassembly.maxmass=Changer ceci pour ajuster la masse maximale pouvant être appliquée sur une pièce tool.trackassembly.maxmass_con=Limite de la masse\: tool.trackassembly.maxmenupr=Changer ceci pour ajuster le nombre de chiffres après la virgule dans le menu tool.trackassembly.maxmenupr_con=Séparateur décimal\: +tool.trackassembly.maxspmarg=Modifiez ceci pour ajuster la marge de distance par rapport à la génération précédente +tool.trackassembly.maxspmarg_con=Marge de génération\: tool.trackassembly.maxstatts=Défini combien de tentatives d'empilement le script va essayer avant d'échouer tool.trackassembly.maxstatts_con=Tentatives d'empilement\: tool.trackassembly.maxstcnt=Changer ceci pour ajuster le maximum de pièces pouvant être créées en mode empilement tool.trackassembly.maxstcnt_con=Limite d'empilement\: tool.trackassembly.maxtrmarg=Changer ceci pour ajuster le temps entre les tracées de l'outil tool.trackassembly.maxtrmarg_con=Marge de la tracée\: +tool.trackassembly.modedb=Modifiez ceci pour définir le comportement de stockage de la base de données de pistes +tool.trackassembly.modedb_con=Mode base de données\: +tool.trackassembly.modedb_lua=Utiliser le stockage cache direct +tool.trackassembly.modedb_sql=Cache uniquement les enregistrements demandés tool.trackassembly.model=Sélectionnez une pièce pour commencer/continuer votre piste avec en étendant un type et en cliquant sur un nœud tool.trackassembly.model_con=Modèle de la pièce\: tool.trackassembly.name=Assembleur à piste @@ -121,12 +142,33 @@ tool.trackassembly.nocollide=Faire en sorte que les pièces/ancres ne puissent j tool.trackassembly.nocollide_con=Pas de collisions tool.trackassembly.nocollidew=Faire en sorte que les pièces/monde ne puisse jamais entrer en collision tool.trackassembly.nocollidew_con=Pas de collisions avec le monde +tool.trackassembly.nonrep_var=Contrôles de convar non répliqués. Ils ont des valeurs différentes sur le serveur et le client tool.trackassembly.phyname=Sélectionnez une des noms de propriétés physiques à utiliser lorsque qu'une piste sera créée. Ceci va affecter la friction de la surface tool.trackassembly.phyname_con=Nom de matériau de surface\: tool.trackassembly.phyname_def= tool.trackassembly.phytype=Sélectionnez une des propriétés physiques dans la liste tool.trackassembly.phytype_con=Type de matériau\: tool.trackassembly.phytype_def= +tool.trackassembly.pn_contextm_cp=Copier +tool.trackassembly.pn_contextm_cpbx=Boîte +tool.trackassembly.pn_contextm_cpmd=Modèle +tool.trackassembly.pn_contextm_cpnm=Nom +tool.trackassembly.pn_contextm_cprw=Ligne +tool.trackassembly.pn_contextm_cpth=Chemin +tool.trackassembly.pn_contextm_cpty=Type +tool.trackassembly.pn_contextm_ep=Développer le nœud +tool.trackassembly.pn_contextm_ex=Exporter +tool.trackassembly.pn_contextm_exdv=Externe +tool.trackassembly.pn_contextm_exru=Exécution automatique +tool.trackassembly.pn_contextm_li=Ligne +tool.trackassembly.pn_contextm_licg=Changer +tool.trackassembly.pn_contextm_licr=Créer +tool.trackassembly.pn_contextm_lirm=Supprimer +tool.trackassembly.pn_contextm_mv=Déplacer +tool.trackassembly.pn_contextm_mvbt=Bas +tool.trackassembly.pn_contextm_mvdn=Descendre +tool.trackassembly.pn_contextm_mvtp=Haut +tool.trackassembly.pn_contextm_mvup=Monter tool.trackassembly.pn_contextm_st=Tableaux tool.trackassembly.pn_contextm_stdl=Supprimer des fichiers tool.trackassembly.pn_contextm_sted=Modifier des fichiers (Luapad) @@ -134,15 +176,25 @@ tool.trackassembly.pn_contextm_stnk=Copier le nom tool.trackassembly.pn_contextm_stpt=Copier le chemin tool.trackassembly.pn_contextm_stsz=Copier la taille tool.trackassembly.pn_contextm_sttm=Copier l'heuree +tool.trackassembly.pn_contextm_tg=Basculer +tool.trackassembly.pn_contextm_ws=Workshop +tool.trackassembly.pn_contextm_wsid=Copier WID +tool.trackassembly.pn_contextm_wsop=Ouvrir la page tool.trackassembly.pn_display=Le modèle de votre pièce de piste est affiché ici tool.trackassembly.pn_display_lb=Affichage pièce tool.trackassembly.pn_export=Cliquer pour exporter la base de données client dans un fichier tool.trackassembly.pn_export_lb=Exporter BD tool.trackassembly.pn_extdsv_act=Active tool.trackassembly.pn_extdsv_hd=La liste des base de données DSV sont affichées ici +tool.trackassembly.pn_extdsv_inf=Informations supplémentaires tool.trackassembly.pn_extdsv_lb=Liste DSV externe tool.trackassembly.pn_extdsv_prf=Préfixe unique de la base de donnée +tool.trackassembly.pn_externdb_bte=Exporter +tool.trackassembly.pn_externdb_bte_tp=Exporte les informations du panneau vers la liste de fichiers et applique +tool.trackassembly.pn_externdb_bti=Importer +tool.trackassembly.pn_externdb_bti_tp=Importe les informations de la liste de fichiers dans le panneau pour édition tool.trackassembly.pn_externdb_hd=Base de données de\: +tool.trackassembly.pn_externdb_ttt=Valeur de configuration actuelle modifiée\: tool.trackassembly.pn_pattern=Écrire un modèle ici et appuyer sur ENTRÉE pour effectuer une recherche tool.trackassembly.pn_pattern_lb=Écrire modèle tool.trackassembly.pn_routine=La liste de vos pièces de pistes utilisées fréquemment @@ -157,6 +209,7 @@ tool.trackassembly.pn_srchcol=Choisir la liste de colonne auquel vous voulez eff tool.trackassembly.pn_srchcol_lb= tool.trackassembly.pntasist=Montrer l'assistant d'alignement de l'outil tool.trackassembly.pntasist_con=Montrer l'assistant +tool.trackassembly.relica_var=Contrôles de convar répliqués. La valeur du serveur est envoyée à tous les clients tool.trackassembly.reload.1=Retirer une pièce de piste. Maintenir MAJUSCULE pour sélectionner une ancre tool.trackassembly.reload.2=Retirer une pièce de piste. Maintenir MAJUSCULE pour sélectionner le rayon de sélection tool.trackassembly.reload.3=Retire un nœud de l'interpolation de courbe. Maintenir MAJUSCULE pour vider le tas @@ -179,6 +232,10 @@ tool.trackassembly.right_use.2=MOLETTE désactivée. Copier le modèle de la pi tool.trackassembly.right_use.3=Générer un nœud depuis le point actif de la pièce de piste la plus proche tool.trackassembly.right_use.4=MOLETTE désactivée. Copier le modèle de la pièce de piste ou ouvrir la fenêtre des pièces fréquentes tool.trackassembly.right_use.5=Générer un nœud depuis le point actif de la pièce de piste la plus proche +tool.trackassembly.rtradmenu=Modifiez ceci pour ajuster l'angle de base du menu radial et repositionner ses options +tool.trackassembly.rtradmenu_con=Rotation radiale\: +tool.trackassembly.sgradmenu=Modifiez ceci pour rendre le menu radial plus arrondi. Plus la valeur est élevée, plus c'est lisse +tool.trackassembly.sgradmenu_con=Segments radiaux\: tool.trackassembly.sizeucs=Calibration de l'échelle pour le système de coordonnées affiché tool.trackassembly.sizeucs_con=Échelle UCS\: tool.trackassembly.spawncn=Créer la pièce vers le centre, sinon, la créer relativement vers le point active choisi @@ -207,11 +264,16 @@ tool.trackassembly.timermode_rd=Efface les entrées du cache en forçant une val tool.trackassembly.timermode_rd_con=Activer la suppression des entrées tool.trackassembly.type=Sélectionnez le type de piste à utiliser en développant le dossier tool.trackassembly.type_con=Type de piste\: +tool.trackassembly.upspanchor=Activer pour mettre à jour l'ancrage à chaque apparition sans ajustement +tool.trackassembly.upspanchor_con=Mettre à jour l'ancrage à l'apparition +tool.trackassembly.utilities_admin=Configuration des paramètres administrateur +tool.trackassembly.utilities_user=Configuration des paramètres utilisateur tool.trackassembly.weld=Créer une soudure entre les pièces/ancres tool.trackassembly.weld_con=Souder tool.trackassembly.workmode.1=Général créer/aligner des pièces tool.trackassembly.workmode.2=Point d'intersection actif tool.trackassembly.workmode.3=Ajuster des segments de ligne courbés tool.trackassembly.workmode.4=Retourner la normale d'une surface +tool.trackassembly.workmode.5=Transitions tangentielles dans les virages tool.trackassembly.workmode=Modifiez cette option pour utiliser différents modes de travail tool.trackassembly.workmode_con=Mode de travail\: From dbceb1347c2a95fcba221d92b4b4f575396efd95 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Wed, 13 Nov 2024 22:21:58 +0200 Subject: [PATCH 085/114] Fixed: Panel content not sorted correctly due to missing local reference Fixed: Luapad call crashing when editing DSV contents Fixed: Luapad prefix is not displayed on the opened tab Fixed: Routine pieces search by type icon missing Removed: `TYPEMT_VECTOR` and `TYPEMT_ANGLE` that are not used --- lua/autorun/trackassembly_init.lua | 9 ++++----- lua/trackassembly/trackasmlib.lua | 9 +++------ 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 4923bd74..d88ec7eb 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -996,12 +996,11 @@ if(CLIENT) then function() -- Edit the database contents using the Luapad addon if(not luapad) then return end -- Luapad is not installed do nothing asmlib.LogInstance("Modify "..asmlib.GetReport(sFile), sLog..".ListView") - if(luapad.Frame) then luapad.Frame:SetVisible(true) - else asmlib.SetAsmConvar(oPly, "*luapad", gsToolNameL) end - luapad.AddTab("["..defTab.Nick.."]"..defTab.Nick, fileRead(sFile, "DATA"), sDsv); + if(luapad.Frame) then luapad.Frame:SetVisible(true); luapad.Frame:Center() else luapad.Toggle() end + luapad.AddTab("["..sP.."]["..defTab.Nick.."]", fileRead(sFile, "DATA"), sDsv); if(defTab.Nick == "PIECES") then -- Load the category provider for this DSV local sCats = fDSV:format(sP, "CATEGORY"); if(fileExists(sCats,"DATA")) then - luapad.AddTab("[CATEGORY]"..defTab.Nick, fileRead(sCats, "DATA"), sDsv); + luapad.AddTab("["..sP.."][CATEGORY]", fileRead(sCats, "DATA"), sDsv); end -- This is done so we can distinguish between luapad and other panels end -- Luapad is designed not to be closed so we need to make it invisible luapad.Frame:SetVisible(true); luapad.Frame:Center() @@ -1092,7 +1091,7 @@ if(CLIENT) then pnComboBox:SetTooltip(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol")) pnComboBox:SetValue(languageGetPhrase("tool."..gsToolNameL..".pn_srchcol_lb")) pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_mod"), 1, false, asmlib.ToIcon("pn_routine_mod")) - pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_typ"), 2, false, asmlib.ToIcon("pn_srchcol_lb2")) + pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_typ"), 2, false, asmlib.ToIcon("pn_routine_typ")) pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_nam"), 3, false, asmlib.ToIcon("pn_routine_nam")) pnComboBox:AddChoice(languageGetPhrase("tool."..gsToolNameL..".pn_routine_end"), 4, false, asmlib.ToIcon("pn_routine_end")) pnComboBox.OnSelect = function(pnSelf, nInd, sVal, anyData) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index a5e5b29f..1bddddac 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -733,10 +733,9 @@ function InitBase(sName, sPurp) SetOpVar("DBEXP_PREFGEN", "[generic]_") SetOpVar("VCOMPARE_SPAN", function(u, v) if(u.T ~= v.T) then return u.T < v.T end - local uC = (u.C or {}) - local vC = (v.C or {}) - local uM, vM = #uC, #vC - for i = 1, mathMax(uM, vM) do + local uC, vC = (u.C or {}), (v.C or {}) + for i = 1, mathMax(#uC, #vC) do + local uS, vS = uC[i], vC[i] if(uS ~= vS) then -- No category must fall behind if(vS == nil or vS == "") then return true end if(uS == nil or uS == "") then return false end @@ -773,8 +772,6 @@ function InitBase(sName, sPurp) SetOpVar("TYPEMT_QUEUE",{}) SetOpVar("TYPEMT_SCREEN",{}) SetOpVar("TYPEMT_CONTAINER",{}) - SetOpVar("TYPEMT_VECTOR",getmetatable(GetOpVar("VEC_ZERO"))) - SetOpVar("TYPEMT_ANGLE" ,getmetatable(GetOpVar("ANG_ZERO"))) SetOpVar("ARRAY_BNDERRMOD",{"OFF", "LOG", "HINT", "GENERIC", "ERROR"}) SetOpVar("ARRAY_MODEDB",{"LUA", "SQL"}) SetOpVar("ARRAY_MODETM",{"CQT", "OBJ"}) From b69a709d81c419575da20117ce2dcc0a576aa6ba Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Thu, 14 Nov 2024 21:32:51 +0200 Subject: [PATCH 086/114] Fixed: Reduce the network overhead for `CREATE_CURVE_NODE` Fixed: Automatically populate POA row value on registration Added: Automatic super-elevation for curved tracks Added: 100% grade as OP variable `FULL_SLOPEDG` tan(45) --- lua/autorun/trackassembly_init.lua | 6 ++-- lua/trackassembly/trackasmlib.lua | 31 ++++++++++--------- .../gmod_tool/stools/trackassembly.lua | 25 ++++++++++----- 3 files changed, 38 insertions(+), 24 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index d88ec7eb..6482f470 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -14,6 +14,7 @@ local netSendToServer = net and net.SendToServer local netReceive = net and net.Receive local netReadEntity = net and net.ReadEntity local netReadVector = net and net.ReadVector +local netReadNormal = net and net.ReadNormal local netReadAngle = net and net.ReadAngle local netReadBool = net and net.ReadBool local netReadUInt = net and net.ReadUInt @@ -562,9 +563,10 @@ if(CLIENT) then asmlib.SetAction("CREATE_CURVE_NODE", function(nLen) local oPly, sLog = netReadEntity(), "*CREATE_CURVE_NODE" - local vNode, vNorm, vBase = netReadVector(), netReadVector(), netReadVector() + local vNode, vNorm, vBase = netReadVector(), netReadNormal(), netReadVector() local vOrgw, aAngw, bRayw = netReadVector(), netReadAngle() , netReadBool() - local tC = asmlib.GetCacheCurve(oPly) -- Read the curve data location + local iNorm, tC = netReadUInt(16), asmlib.GetCacheCurve(oPly) -- Read the curve + if(iNorm > 0 and tC.Size and tC.Size >= 2) then tC.Norm[iNorm]:Set(netReadNormal()) end tableInsert(tC.Node, vNode); tableInsert(tC.Norm, vNorm) tableInsert(tC.Base, vBase); tableInsert(tC.Rays, {vOrgw, aAngw, bRayw}) tC.Size = (tC.Size + 1) -- Register the index after writing the data for drawing diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 1bddddac..4e43aa55 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -699,6 +699,7 @@ function InitBase(sName, sPurp) SetOpVar("CURVE_MARGIN", 15) SetOpVar("COLOR_CLAMP", {0, 255}) SetOpVar("GOLDEN_RATIO",1.61803398875) + SetOpVar("FULL_SLOPEDG", 45) SetOpVar("DATE_FORMAT","%y-%m-%d") SetOpVar("TIME_FORMAT","%H:%M:%S") SetOpVar("NAME_INIT",sName:lower()) @@ -2290,6 +2291,7 @@ end ]] function LocatePOA(oRec, ivPoID) if(not oRec) then LogInstance("Missing record"); return nil end + local sMo = oRec.Slot local tOffs = oRec.Offs; if(not tOffs) then LogInstance("Missing offsets for "..GetReport(oRec.Slot)); return nil end local iPoID = tonumber(ivPoID); if(iPoID) then iPoID = mathFloor(iPoID) @@ -2298,8 +2300,9 @@ function LocatePOA(oRec, ivPoID) LogInstance("Missing ID "..GetReport(iPoID, oRec.Slot)); return nil end if(oRec.Post) then oRec.Post = nil -- Transforming has started for ID = 1, oRec.Size do - local tPOA, sM = tOffs[ID], oRec.Slot - local sP, sO, sA = tPOA.P:Raw(), tPOA.O:Raw(), tPOA.A:Raw() + local tPOA = tOffs[ID] + local oP, oO, oA = tPOA.P, tPOA.O, tPOA.A + local sP, sO, sA = oP:Raw(), oO:Raw(), oA:Raw() if(sO) then tPOA.O:Decode(sO, sM, "Pos") end if(sA) then tPOA.A:Decode(sA, sM, "Ang") end if(sP) then tPOA.P:Decode(sP, sM, "Pos", tPOA.O:Get()) end @@ -2309,33 +2312,31 @@ function LocatePOA(oRec, ivPoID) end function RegisterPOA(stData, ivID, sP, sO, sA) - local sNull = GetOpVar("MISS_NOSQL"); if(not stData) then + local sNu = GetOpVar("MISS_NOSQL"); if(not stData) then LogInstance("Cache record invalid"); return nil end local iID = tonumber(ivID); if(not IsHere(iID)) then LogInstance("Offset ID mismatch "..GetReport(ivID)); return nil end - local sP = (sP or sNull); if(not isstring(sP)) then + local sP = (sP or sNu); if(not isstring(sP)) then LogInstance("Point mismatch "..GetReport(sP)); return nil end - local sO = (sO or sNull); if(not isstring(sO)) then + local sO = (sO or sNu); if(not isstring(sO)) then LogInstance("Origin mismatch "..GetReport(sO)); return nil end - local sA = (sA or sNull); if(not isstring(sA)) then + local sA = (sA or sNu); if(not isstring(sA)) then LogInstance("Angle mismatch "..GetReport(sA)); return nil end - LogInstance("Store "..GetReport(sNull, iID, sP, sO, sA, stData.Slot)) + LogInstance("Store "..GetReport(sNu, iID, sP, sO, sA, stData.Slot)) if(not stData.Offs) then if(iID ~= 1) then LogInstance("Mismatch ID "..GetReport(iID, stData.Slot)); return nil end - stData.Offs = {}; stData.Post = true + stData.Offs = {}; stData.Post = true -- Mark post-process on spawn end local tOffs = stData.Offs; if(tOffs[iID]) then LogInstance("Exists ID "..GetReport(iID)); return tOffs - else + else -- The offset ID does not exists so create one if((iID > 1) and (not tOffs[iID - 1])) then LogInstance("Scatter ID "..GetReport(iID)); return nil end tOffs[iID] = {}; tOffs = tOffs[iID] -- Allocate a local offset index - tOffs.P = NewPOA(); tOffs.O = NewPOA(); tOffs.A = NewPOA() - end - if(not tOffs.O:Raw()) then tOffs.O:Set(); tOffs.O:Raw(sO) end - if(not tOffs.A:Raw()) then tOffs.A:Set(); tOffs.A:Raw(sA) end - if(not tOffs.P:Raw()) then tOffs.P:Set(); tOffs.P:Raw(sP) end - return tOffs -- On success return the populated POA offset + tOffs.P = NewPOA(); tOffs.P:Set(); tOffs.P:Raw(sP) + tOffs.O = NewPOA(); tOffs.O:Set(); tOffs.O:Raw(sO) + tOffs.A = NewPOA(); tOffs.A:Set(); tOffs.A:Raw(sA) + end; return tOffs -- On success return the populated POA offset end function Arrange(tSrc, vPrn, ...) diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index d6ac5d6f..67d6dd16 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -24,6 +24,7 @@ local netWriteBool = net and net.WriteBool local netWriteAngle = net and net.WriteAngle local netWriteEntity = net and net.WriteEntity local netWriteVector = net and net.WriteVector +local netWriteNormal = net and net.WriteNormal local vguiCreate = vgui and vgui.Create local stringUpper = string and string.upper local mathAbs = math and math.abs @@ -914,11 +915,23 @@ function TOOL:GetCurveTransform(stTrace, bPnt) end function TOOL:CurveInsert(stTrace, bPnt, bMute) + local spnflat, iN, vN = self:GetSpawnFlat(), 0 local user, model = self:GetOwner(), self:GetModel() local tData = self:GetCurveTransform(stTrace, bPnt); if(not tData) then asmlib.LogInstance("Transform missing", gtLogs); return nil end local tC = asmlib.GetCacheCurve(user); if(not tC) then asmlib.LogInstance("Curve missing", gtLogs); return nil end + if(not spnflat and tC.Size and tC.Size >= 2) then + local nS, iC = asmlib.GetOpVar("FULL_SLOPEDG"), tC.Size + local tO, tR, tN = tC.Node, tC.Rays, tC.Norm + local vA, vB = tO[iC], tO[iC - 1] + local vD = Vector(tData.Org); vD:Sub(vA); vD:Normalize() + local vF = Vector(vA); vF:Sub(vB); vF:Normalize() + local aN = vF:AngleEx(tR[iC][2]:Up()) + local nP = 0.5 * nS * vD:Dot(aN:Right()) + aN:RotateAroundAxis(vF, nP) + vN = aN:Up(); tN[iC]:Set(vN); iN = iC + end tC.Size = (tC.Size + 1) -- Increment stack size. Adding stuff tableInsert(tC.Node, Vector(tData.Org)) tableInsert(tC.Norm, tData.Ang:Up()) @@ -929,11 +942,13 @@ function TOOL:CurveInsert(stTrace, bPnt, bMute) netStart(gsLibName.."SendCreateCurveNode") netWriteEntity(user) netWriteVector(tC.Node[tC.Size]) - netWriteVector(tC.Norm[tC.Size]) + netWriteNormal(tC.Norm[tC.Size]) netWriteVector(tC.Base[tC.Size]) netWriteVector(tC.Rays[tC.Size][1]) netWriteAngle (tC.Rays[tC.Size][2]) netWriteBool (tC.Rays[tC.Size][3]) + netWriteUInt (iN, 16) + if(iN > 0) then netWriteNormal(vN) end netSend(user) user:SetNWBool(gsToolPrefL.."engcurve", true) end @@ -1187,8 +1202,7 @@ function TOOL:LeftClick(stTrace) }, function(oPly, oArg) for iD = oArg.stard, tC.SSize do tS = tC.Snap[iD] for iK = oArg.stark, tS.Size do local tV, ePiece = tS[iK], nil - oArg.spawn = asmlib.GetNormalSpawn(oPly, tV[1], tV[2], model, pointid, - nextx, nexty, nextz, nextpic, nextyaw, nextrol, oArg.spawn) + oArg.spawn = asmlib.GetNormalSpawn(oPly, tV[1], tV[2], model, pointid, 0, 0, 0, 0, 0, 0, oArg.spawn) if(not oArg.spawn) then -- Make sure it persists to set it afterwards asmlib.LogInstance(self:GetStatus(stTrace,"("..oArg.wname..") "..sItr..": Cannot obtain spawn data"),gtLogs); return false end if(crvturnlm > 0 or crvleanlm > 0) then local nF, nU = asmlib.GetTurningFactor(oPly, tS, iK) @@ -1629,8 +1643,6 @@ function TOOL:UpdateGhostCurve() local stackcnt = self:GetStackCount() local pointid, pnextid = self:GetPointID() local tGho, iGho = asmlib.GetOpVar("ARRAY_GHOST"), 0 - local nextx, nexty, nextz = self:GetPosOffsets() - local nextpic, nextyaw, nextrol = self:GetAngOffsets() local bCrv = user:GetNWBool(gsToolPrefL.."engcurve", false) if(bCrv) then local workmode = self:GetWorkingMode() @@ -1650,8 +1662,7 @@ function TOOL:UpdateGhostCurve() for iD = 1, tCrv.SSize do local tS = tCrv.Snap[iD] for iK = 1, tS.Size do iGho = (iGho + 1) local tV, eGho = tS[iK], tGho[iGho] - local stSpawn = asmlib.GetNormalSpawn(user, tV[1], tV[2], model, pointid, - nextx, nexty, nextz, nextpic, nextyaw, nextrol) + local stSpawn = asmlib.GetNormalSpawn(user, tV[1], tV[2], model, pointid, 0, 0, 0, 0, 0, 0) if(eGho and eGho:IsValid()) then eGho:SetNoDraw(true) if(stackcnt > 0) then if(iGho > stackcnt) then eGho:SetNoDraw(true) else if(stSpawn) then eGho:SetPos(stSpawn.SPos); eGho:SetAngles(stSpawn.SAng); eGho:SetNoDraw(false) end end From 1bfb85f6c0dec8929e660c2b9c0ff7fecf1e128b Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 15 Nov 2024 15:12:06 +0200 Subject: [PATCH 087/114] Fixed: Curve node remove reverts the value of the last node Fixed: Curve node remove on the client checks its status Fixed: Lower the network latency when sending normal vectors Added: User preferences for amount of super-elevation Sorted: Russian translation by phrase hash --- lua/autorun/trackassembly_init.lua | 14 +- .../gmod_tool/stools/trackassembly.lua | 58 +++-- .../localization/bg/trackassembly.properties | 16 +- .../localization/en/trackassembly.properties | 16 +- .../localization/fr/trackassembly.properties | 2 + .../localization/ru/trackassembly.properties | 226 +++++++++--------- 6 files changed, 184 insertions(+), 148 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 6482f470..7c6c9f69 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -151,6 +151,7 @@ asmlib.SetBorder(gsToolPrefL.."spawnrate", 1, 10) asmlib.SetBorder(gsToolPrefL.."sgradmenu", 1, 16) asmlib.SetBorder(gsToolPrefL.."dtmessage", 0, 10) asmlib.SetBorder(gsToolPrefL.."ghostblnd", 0, 1) +asmlib.SetBorder(gsToolPrefL.."crvsuprev", 0, 1) asmlib.SetBorder(gsToolPrefL.."rtradmenu", -gnMaxRot, gnMaxRot) ------------ CONFIGURE LOGGING ------------ @@ -574,7 +575,7 @@ if(CLIENT) then asmlib.SetAction("UPDATE_CURVE_NODE", function(nLen) local oPly, sLog = netReadEntity(), "*UPDATE_CURVE_NODE" - local vNode, vNorm, vBase = netReadVector(), netReadVector(), netReadVector() + local vNode, vNorm, vBase = netReadVector(), netReadNormal(), netReadVector() local vOrgw, aAngw, bRayw = netReadVector(), netReadAngle() , netReadBool() local iD, tC = netReadUInt(16), asmlib.GetCacheCurve(oPly) tC.Node[iD]:Set(vNode); tC.Norm[iD]:Set(vNorm) @@ -584,9 +585,14 @@ if(CLIENT) then asmlib.SetAction("DELETE_CURVE_NODE", function(nLen) local oPly, sLog = netReadEntity(), "*DELETE_CURVE_NODE" local tC = asmlib.GetCacheCurve(oPly) - tC.Size = (tC.Size - 1) -- Register the index before wiping the data for drawing - tableRemove(tC.Node); tableRemove(tC.Norm) - tableRemove(tC.Base); tableRemove(tC.Rays) + if(tC.Size and tC.Size > 0) then + tC.Size = (tC.Size - 1) -- Register the index before wiping the data for drawing + tableRemove(tC.Node); tableRemove(tC.Norm) + tableRemove(tC.Base); tableRemove(tC.Rays) + if(tC.Size and tC.Size > 0) then + tC.Norm[tC.Size]:Set(tC.Rays[tC.Size][2]:Up()) + end + end end) asmlib.SetAction("DELETE_ALL_CURVE_NODE", diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 67d6dd16..6e913a32 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -142,6 +142,7 @@ TOOL.ClientConVar = { [ "upspanchor" ] = 0, [ "crvturnlm" ] = 0.95, [ "crvleanlm" ] = 0.95, + [ "crvsuprev" ] = 0.45, [ "flipoverid" ] = "" } @@ -204,6 +205,10 @@ TOOL.Category = languageGetPhrase and languageGetPhrase("tool."..gsToolNameL.. TOOL.Command = nil -- Command on click (nil for default) TOOL.ConfigName = nil -- Configure file name (nil for default) +function TOOL:GetSuperElevation() + return mathClamp(self:GetClientNumber("crvsuprev", 0), 0, 1) +end + function TOOL:GetCurveFactor() return asmlib.GetAsmConvar("curvefact", "FLT") end @@ -787,15 +792,15 @@ end --[[ * Uses heuristics to provide the best suitable location the * curve note closest location can be updated with. Three cases: - * 1. Both neighbors are active points. Intersect their active rays - * 2. Only one node is an active point. Project on its active ray - * 3. None of the neighbors are active points. Project on line bisector * iD > Curve node index to be updated * vPnt > The new location to update the node with * bMute > Mute mode. Used to disable server status messages * Returns multiple values: - * 1. Curve node calculated heuristics location vector - * 2. The amount of neighbor nodes that are active rays + * V > Curve node calculated heuristics location vector + * N > The amount of neighbor nodes that are active rays + * (2) Both neighbors are active points. Intersect their active rays + * (1) Only one node is an active point. Project on its active ray + * (0) None of the neighbors are active points. Project on line bisector ]]-- function TOOL:GetCurveNodeActive(iD, vPnt, bMute) local user = self:GetOwner() @@ -863,6 +868,9 @@ function TOOL:CurveClear(bAll, bMute) tableRemove(tC.Rays) tableEmpty(tC.Snap); tC.SSize = 0 tableRemove(tC.Base); tC.Size = (tC.Size - 1) + if(tC.Size and tC.Size > 0) then + tC.Norm[tC.Size]:Set(tC.Rays[tC.Size][2]:Up()) + end end end; return tC -- Returns the updated curve nodes table end @@ -914,24 +922,36 @@ function TOOL:GetCurveTransform(stTrace, bPnt) return tData end +function TOOL:ApplySuperElevation(tC, tData) + if(not tData) then -- The node being managed + asmlib.LogInstance("Data missing", gtLogs); return 0 end + if(not tC) then -- The curve containing all nodes + asmlib.LogInstance("Curve missing", gtLogs); return 0 end + local spnflat = self:GetSpawnFlat() + local crvsuprev = self:GetSuperElevation() + if(not (spnflat and crvsuprev > 0) then + asmlib.LogInstance("Auto roll disabled", gtLogs); return 0 end + if(not (tC.Size and tC.Size >= 2)) then + asmlib.LogInstance("Two vertices needed", gtLogs); return 0 end + local nS, iN = asmlib.GetOpVar("FULL_SLOPEDG"), tC.Size + local tO, tR, tN = tC.Node, tC.Rays, tC.Norm + local vL, vP = tO[iN], tO[iN - 1] + local vD = Vector(tData.Org); vD:Sub(vL); vD:Normalize() + local vF = Vector(vL); vF:Sub(vP); vF:Normalize() + local aN = vF:AngleEx(tR[iN][2]:Up()) + local nP = (crvsuprev * nS) * vD:Dot(aN:Right()) + aN:RotateAroundAxis(vF, nP) + local vN = aN:Up(); tN[iN]:Set(vN) + return iN, vN +end + function TOOL:CurveInsert(stTrace, bPnt, bMute) - local spnflat, iN, vN = self:GetSpawnFlat(), 0 local user, model = self:GetOwner(), self:GetModel() local tData = self:GetCurveTransform(stTrace, bPnt); if(not tData) then asmlib.LogInstance("Transform missing", gtLogs); return nil end local tC = asmlib.GetCacheCurve(user); if(not tC) then asmlib.LogInstance("Curve missing", gtLogs); return nil end - if(not spnflat and tC.Size and tC.Size >= 2) then - local nS, iC = asmlib.GetOpVar("FULL_SLOPEDG"), tC.Size - local tO, tR, tN = tC.Node, tC.Rays, tC.Norm - local vA, vB = tO[iC], tO[iC - 1] - local vD = Vector(tData.Org); vD:Sub(vA); vD:Normalize() - local vF = Vector(vA); vF:Sub(vB); vF:Normalize() - local aN = vF:AngleEx(tR[iC][2]:Up()) - local nP = 0.5 * nS * vD:Dot(aN:Right()) - aN:RotateAroundAxis(vF, nP) - vN = aN:Up(); tN[iC]:Set(vN); iN = iC - end + self:ApplySuperElevation(tC, tData) tC.Size = (tC.Size + 1) -- Increment stack size. Adding stuff tableInsert(tC.Node, Vector(tData.Org)) tableInsert(tC.Norm, tData.Ang:Up()) @@ -987,7 +1007,7 @@ function TOOL:CurveUpdate(stTrace, bPnt, bMute) netStart(gsLibName.."SendUpdateCurveNode") netWriteEntity(user) netWriteVector(tC.Node[mD]) - netWriteVector(tC.Norm[mD]) + netWriteNormal(tC.Norm[mD]) netWriteVector(tC.Base[mD]) netWriteVector(tC.Rays[mD][1]) netWriteAngle (tC.Rays[mD][2]) @@ -2496,6 +2516,7 @@ if(CLIENT) then asmlib.SetNumSlider(CPanel, "ghostblnd", iMaxDec) asmlib.SetNumSlider(CPanel, "crvturnlm", iMaxDec) asmlib.SetNumSlider(CPanel, "crvleanlm", iMaxDec) + asmlib.SetNumSlider(CPanel, "crvsuprev", iMaxDec) asmlib.SetNumSlider(CPanel, "sgradmenu", 0) asmlib.SetNumSlider(CPanel, "rtradmenu", iMaxDec) asmlib.SetCheckBox(CPanel, "enradmenu") @@ -2654,6 +2675,7 @@ if(CLIENT) then asmlib.SetAsmConvar(user, "endsvlock", asmlib.GetAsmConvar("endsvlock", "DEF")) asmlib.SetAsmConvar(user, "curvefact", asmlib.GetAsmConvar("curvefact", "DEF")) asmlib.SetAsmConvar(user, "curvsmple", asmlib.GetAsmConvar("curvsmple", "DEF")) + asmlib.SetAsmConvar(user, "crvsuprev", asmlib.GetAsmConvar("crvsuprev", "DEF")) asmlib.SetAsmConvar(user, "spawnrate", asmlib.GetAsmConvar("spawnrate", "DEF")) asmlib.SetAsmConvar(user, "bnderrmod", asmlib.GetAsmConvar("bnderrmod", "DEF")) asmlib.SetAsmConvar(user, "maxfruse" , asmlib.GetAsmConvar("maxfruse" , "DEF")) diff --git a/resource/localization/bg/trackassembly.properties b/resource/localization/bg/trackassembly.properties index f0bbb191..0f4f806e 100644 --- a/resource/localization/bg/trackassembly.properties +++ b/resource/localization/bg/trackassembly.properties @@ -32,6 +32,8 @@ tool.trackassembly.buttonas@M=Запомни стойност tool.trackassembly.client_var=Клиентски предпочитания на играча. Променливи създадени чрез инструмента конфигурация tool.trackassembly.crvleanlm=Променете тук за да настроите остротата на наклона при сегментиране на кривата tool.trackassembly.crvleanlm_con=Наклон на кривината\: +tool.trackassembly.crvsuprev=Променете тук за да настроите тежестта на коефицианта за свъхденивалация +tool.trackassembly.crvsuprev_con=Свръх денивелация\: tool.trackassembly.crvturnlm=Променете тук за да настроите остротата на завоя при сегментиране на кривата tool.trackassembly.crvturnlm_con=Завой на кривината\: tool.trackassembly.curvefact=Променете тук за да настроите тангенциалния коефициент на кривата @@ -185,10 +187,10 @@ tool.trackassembly.pn_display_lb=Дисплей за парчето tool.trackassembly.pn_export=Цъкнете за да съхраните базата данни на файл tool.trackassembly.pn_export_lb=Съхрани DB tool.trackassembly.pn_extdsv_act=Активен -tool.trackassembly.pn_extdsv_prf=Уникален префикс на базата -tool.trackassembly.pn_extdsv_inf=Допълнителна информация tool.trackassembly.pn_extdsv_hd=Списъка на DSV базите данни е показан тук +tool.trackassembly.pn_extdsv_inf=Допълнителна информация tool.trackassembly.pn_extdsv_lb=Външен DSV списък +tool.trackassembly.pn_extdsv_prf=Уникален префикс на базата tool.trackassembly.pn_externdb_bte=Експорт tool.trackassembly.pn_externdb_bte_tp=Експортира информацията от панела към файла за използване tool.trackassembly.pn_externdb_bti=Импорт @@ -198,13 +200,13 @@ tool.trackassembly.pn_externdb_ttt=Текущата стойност от кон tool.trackassembly.pn_pattern=Напишете шаблон тук и натиснете ЕНТЪР за да извършите търсене tool.trackassembly.pn_pattern_lb=Напишете шаблон tool.trackassembly.pn_routine=Списъкът с редовно използваните ви парчета трасе -tool.trackassembly.pn_routine_hd=Редовни парчета на\: -tool.trackassembly.pn_routine_use=Срок tool.trackassembly.pn_routine_end=Ръб -tool.trackassembly.pn_routine_typ=Тип -tool.trackassembly.pn_routine_nam=Име -tool.trackassembly.pn_routine_mod=Модел +tool.trackassembly.pn_routine_hd=Редовни парчета на\: tool.trackassembly.pn_routine_lb=Рутинни обекти +tool.trackassembly.pn_routine_mod=Модел +tool.trackassembly.pn_routine_nam=Име +tool.trackassembly.pn_routine_typ=Тип +tool.trackassembly.pn_routine_use=Срок tool.trackassembly.pn_srchcol=Изберете по коя колона да извършите търсене tool.trackassembly.pn_srchcol_lb=<Търси по> tool.trackassembly.pntasist=Управлява изобразяването на асистента за лепене diff --git a/resource/localization/en/trackassembly.properties b/resource/localization/en/trackassembly.properties index cbf10209..bda3fedf 100644 --- a/resource/localization/en/trackassembly.properties +++ b/resource/localization/en/trackassembly.properties @@ -32,6 +32,8 @@ tool.trackassembly.buttonas@M=Memorize value tool.trackassembly.client_var=Client side player preferences. Convars created in the tool client configuration tool.trackassembly.crvleanlm=Change this to adjust the lean curving sharpness limit for the segment tool.trackassembly.crvleanlm_con=Curvature lean\: +tool.trackassembly.crvsuprev=Change this to adjust the super-elevation magnitude used in the corners +tool.trackassembly.crvsuprev_con=Super elevation\: tool.trackassembly.crvturnlm=Change this to adjust the turn curving sharpness limit for the segment tool.trackassembly.crvturnlm_con=Curvature turn\: tool.trackassembly.curvefact=Change this to adjust the curving factor tangent coefficient @@ -185,10 +187,10 @@ tool.trackassembly.pn_display_lb=Piece display tool.trackassembly.pn_export=Click to export the client database as a file tool.trackassembly.pn_export_lb=Export DB tool.trackassembly.pn_extdsv_act=Active -tool.trackassembly.pn_extdsv_prf=Database unique prefix -tool.trackassembly.pn_extdsv_inf=Additional information tool.trackassembly.pn_extdsv_hd=External DSV databases list is displayed here +tool.trackassembly.pn_extdsv_inf=Additional information tool.trackassembly.pn_extdsv_lb=External DSV list +tool.trackassembly.pn_extdsv_prf=Database unique prefix tool.trackassembly.pn_externdb_bte=Export tool.trackassembly.pn_externdb_bte_tp=Exports information from the panel to the file list and apply tool.trackassembly.pn_externdb_bti=Import @@ -198,13 +200,13 @@ tool.trackassembly.pn_externdb_ttt=Current modified configuration value\: tool.trackassembly.pn_pattern=Write a pattern here and hit ENTER to perform a search tool.trackassembly.pn_pattern_lb=Write pattern tool.trackassembly.pn_routine=The list of your frequently used track pieces -tool.trackassembly.pn_routine_hd=Frequent pieces by\: -tool.trackassembly.pn_routine_use=Used tool.trackassembly.pn_routine_end=End -tool.trackassembly.pn_routine_typ=Type -tool.trackassembly.pn_routine_nam=Name -tool.trackassembly.pn_routine_mod=Model +tool.trackassembly.pn_routine_hd=Frequent pieces by\: tool.trackassembly.pn_routine_lb=Routine items +tool.trackassembly.pn_routine_mod=Model +tool.trackassembly.pn_routine_nam=Name +tool.trackassembly.pn_routine_typ=Type +tool.trackassembly.pn_routine_use=Used tool.trackassembly.pn_srchcol=Choose which list column you want to perform a search on tool.trackassembly.pn_srchcol_lb= tool.trackassembly.pntasist=Controls rendering the tool snap point assistant diff --git a/resource/localization/fr/trackassembly.properties b/resource/localization/fr/trackassembly.properties index 5390901a..502256f7 100644 --- a/resource/localization/fr/trackassembly.properties +++ b/resource/localization/fr/trackassembly.properties @@ -32,6 +32,8 @@ tool.trackassembly.buttonas@M=Mémoriser la valeur tool.trackassembly.client_var=Préférences utilisateur côté client. Convars créées dans la configuration client de l'outil tool.trackassembly.crvleanlm=Changer ceci pour ajuster la finesse de la courbure en inclinaison pour le segment tool.trackassembly.crvleanlm_con=Courbure en inclinaison\: +tool.trackassembly.crvsuprev=Modifiez ceci pour ajuster l'amplitude du dévers utilisé dans les virages +tool.trackassembly.crvsuprev_con=Dévers\: tool.trackassembly.crvturnlm=Changer ceci pour ajuster la finesse de la courbure en virage pour le segment tool.trackassembly.crvturnlm_con=Courbure en virage\: tool.trackassembly.curvefact=Changer ceci pour ajuster le facteur courbe du coefficient tangent diff --git a/resource/localization/ru/trackassembly.properties b/resource/localization/ru/trackassembly.properties index 4b236b1e..72bc5335 100644 --- a/resource/localization/ru/trackassembly.properties +++ b/resource/localization/ru/trackassembly.properties @@ -1,94 +1,22 @@  -tool.trackassembly.workmode.1=Общее создание/прилепание куски -tool.trackassembly.workmode.2=Пересечение активной точки -tool.trackassembly.workmode.3=Кривой отрезок линии фитинг -tool.trackassembly.workmode.4=Нормаль поверхности перевернуть -tool.trackassembly.desc=Создает дорогу для транспортных средств -tool.trackassembly.name=Сборка дороги -tool.trackassembly.phytype=Выберите тип физических свойств из тех которые перечислены здесь -tool.trackassembly.phytype_con=Тип поверхности\: -tool.trackassembly.phytype_def=<Выберите ТИП поверхности> -tool.trackassembly.phyname=Выберите имя физических свойств которые могут быть использованы при создании дороги так как это повлияет на поверхностное трение -tool.trackassembly.phyname_con=Имя поверхности\: -tool.trackassembly.phyname_def=<Выберите ИМЯ поверхности> -tool.trackassembly.bgskids=Код выбора через запятую для Группа-тела/Кожа ID -tool.trackassembly.bgskids_con=Группа-тела/Кожа\: -tool.trackassembly.bgskids_def=Написать код выбора здесь. Например 1,0,0,2,1/3 -tool.trackassembly.mass=Как тяжелый кусок создал будет -tool.trackassembly.mass_con=Масса куска\: -tool.trackassembly.model=Выберите кусок чтобы начать/продолжить свою дорогу выбирая тип дерева и нажав на листе -tool.trackassembly.model_con=Модель куска\: +Cleaned_asmtracks=Все куски дороги очищены +Cleanup_asmtracks=Собранные куски дороги +SBoxLimit_asmtracks=Вы достигли предела созданных кусков дороги! +sbox_maxasmtracks=Измените это, чтобы настроить объекты, создаваемые с помощью инструмента сборки треков на сервере +sbox_maxasmtracks_con=Всего сегментов\: tool.trackassembly.activrad=Минимальное расстояние чтобы выбрать активную точку tool.trackassembly.activrad_con=Активный радиус\: -tool.trackassembly.stackcnt=Максимальное количество куски для нагромождения -tool.trackassembly.stackcnt_con=Количество кусков\: +tool.trackassembly.adviser=Управляет отображением позиционного/углового советника +tool.trackassembly.adviser_con=Нарисовать советник tool.trackassembly.angsnap=Приклейте первый кусок созданный тем положением градусов tool.trackassembly.angsnap_con=Угловое выравнивание\: -tool.trackassembly.resetvars=Нажмите чтобы сбросить дополнительные значения -tool.trackassembly.resetvars_con=V Сбросить переменные V -tool.trackassembly.nextpic=Дополнительный сдвиг начала тангажом -tool.trackassembly.nextpic_con=Начало тангажа\: -tool.trackassembly.nextyaw=Дополнительный сдвиг начала рысканием -tool.trackassembly.nextyaw_con=Начало рыскания\: -tool.trackassembly.nextrol=Дополнительный сдвиг начала рулона -tool.trackassembly.nextrol_con=Начало рулона\: -tool.trackassembly.nextx=Дополнительное линейное смещение X -tool.trackassembly.nextx_con=Смещения X\: -tool.trackassembly.nexty=Дополнительное линейное смещение Y -tool.trackassembly.nexty_con=Смещения Y\: -tool.trackassembly.nextz=Дополнительное линейное смещение Z -tool.trackassembly.nextz_con=Смещения Z\: -tool.trackassembly.gravity=Управляет гравитацию куска -tool.trackassembly.gravity_con=Применить силу тяжести к куске -tool.trackassembly.weld=Создает сварные швы между кусками или кусоком/якорем -tool.trackassembly.weld_con=Сварной шов -tool.trackassembly.forcelim=Управляет сколько сил требуется чтобы сломать сварной шов -tool.trackassembly.forcelim_con=Ограничение силы\: -tool.trackassembly.ignphysgn=Игнорирует захвата физической пушки при созданием/приклеиванием/нагромождением куска -tool.trackassembly.ignphysgn_con=Игнорирует захвата физической пушки -tool.trackassembly.nocollide=Делает не-столкновение между кусками или кусоком/якорем -tool.trackassembly.nocollide_con=Не-столкновение -tool.trackassembly.nocollidew=Делает не-столкновение между кусками и миром -tool.trackassembly.nocollidew_con=Не-столкновение миром -tool.trackassembly.freeze=Создает заморожений кусок -tool.trackassembly.freeze_con=Заморозить кусок -tool.trackassembly.igntype=Игнорирует различные типы кусков прилипания/накопления -tool.trackassembly.igntype_con=Игнорировать тип кусков -tool.trackassembly.spnflat=Следующий кусок будет создан/приклеен/накоплен по горизонтали -tool.trackassembly.spnflat_con=Нагромождать по горизонтали -tool.trackassembly.spawncn=Создание куска в центре иначе в выбранной активной точке -tool.trackassembly.spawncn_con=Происхождение из центра -tool.trackassembly.surfsnap=Приклеить кусок к поверхности к которой ссылается пользователь -tool.trackassembly.surfsnap_con=Приклеивать к поверхности tool.trackassembly.appangfst=Применять угловое смещение только на первой кусок tool.trackassembly.appangfst_con=Применять угловое на первой tool.trackassembly.applinfst=Применять линейное смещение только на первой кусок tool.trackassembly.applinfst_con=Применять линейное на первой -tool.trackassembly.adviser=Управляет отображением позиционного/углового советника -tool.trackassembly.adviser_con=Нарисовать советник -tool.trackassembly.pntasist=Управляет изображение помощника для прилипания -tool.trackassembly.pntasist_con=Нарисовать помощника -tool.trackassembly.ghostcnt=Управляет подсчет отображением куска-тени -tool.trackassembly.ghostcnt_con=Нарисовать подсчет кусок-тень -tool.trackassembly.engunsnap=Управляет приклеивание когда кусок выпущен физической пушки пользователя -tool.trackassembly.engunsnap_con=Приклеивать выпуском -tool.trackassembly.upspanchor=Включите якорь обновить для каждый раз когда создаете без накопления -tool.trackassembly.upspanchor_con=Обновить якорь при создаване -tool.trackassembly.type=Выберите типа дороги для использования путем расширения папки -tool.trackassembly.type_con=Тип дороги\: -tool.trackassembly.subfolder=Выберите категорию дороги для использования путем расширения папки -tool.trackassembly.subfolder_con=Категория дороги\: -tool.trackassembly.workmode=Измените эту опцию чтобы использовать другой рабочий режим -tool.trackassembly.workmode_con=Рабочий режим\: -tool.trackassembly.pn_contextm_cp=Копировать -tool.trackassembly.pn_contextm_cpmd=Модель -tool.trackassembly.pn_contextm_cpnm=Имя -tool.trackassembly.pn_contextm_cpth=Путь -tool.trackassembly.pn_contextm_cpty=Тип -tool.trackassembly.pn_contextm_cpbx=Коробка -tool.trackassembly.pn_contextm_cprw=Ряд -sbox_maxasmtracks=Измените это, чтобы настроить объекты, создаваемые с помощью инструмента сборки треков на сервере -sbox_maxasmtracks_con=Всего сегментов\: +tool.trackassembly.bgskids=Код выбора через запятую для Группа-тела/Кожа ID +tool.trackassembly.bgskids_con=Группа-тела/Кожа\: +tool.trackassembly.bgskids_def=Написать код выбора здесь. Например 1,0,0,2,1/3 tool.trackassembly.bnderrmod=Измените это, чтобы определить поведение при попытке клиентов создавать объекты за пределами карты tool.trackassembly.bnderrmod_con=Режим границ\: tool.trackassembly.bnderrmod_error=Запрет на стек/создание, отображается сообщение об ошибке @@ -96,15 +24,23 @@ tool.trackassembly.bnderrmod_generic=Запрет на стек/создание tool.trackassembly.bnderrmod_hint=Запрет на стек/создание, отображается подсказка tool.trackassembly.bnderrmod_log=Запрет на стек/создание, ошибка логируется tool.trackassembly.bnderrmod_off=Разрешить стек/создание без ограничений +tool.trackassembly.buttonas+/-=Начение по умолчаниюз +tool.trackassembly.buttonas<>=Уменьшить/Увеличить +tool.trackassembly.buttonas@=Применять стоимость\: +tool.trackassembly.buttonas@D=Значение по умолчанию +tool.trackassembly.buttonas@M=Запомнить стоимость tool.trackassembly.client_var=Настройки клиента. Консольные переменные создаются в конфигурации инструмента клиента tool.trackassembly.crvleanlm=Измените это, чтобы настроить ограничение резкости при изгибе сегмента tool.trackassembly.crvleanlm_con=Наклон кривизны\: +tool.trackassembly.crvsuprev=Измените это, чтобы настроить величину поперечного наклона, используемого в поворотах +tool.trackassembly.crvsuprev_con=Поперечный наклон\: tool.trackassembly.crvturnlm=Измените это, чтобы настроить ограничение резкости при повороте сегмента tool.trackassembly.crvturnlm_con=Поворот кривизны\: tool.trackassembly.curvefact=Измените это, чтобы настроить коэффициент касательной кривизны tool.trackassembly.curvefact_con=Коэффициент кривизны\: tool.trackassembly.curvsmple=Измените это, чтобы настроить количество интерполяционных образцов кривизны tool.trackassembly.curvsmple_con=Образцы кривизны\: +tool.trackassembly.desc=Создает дорогу для транспортных средств tool.trackassembly.devmode=Включает режим разработчика для отслеживания и отладки tool.trackassembly.devmode_con=Включить режим разработчика tool.trackassembly.dtmessage=Управляет интервалами времени между серверными сообщениями в контекстном меню @@ -115,6 +51,8 @@ tool.trackassembly.enctxmenu=Включает контекстное меню и tool.trackassembly.enctxmenu_con=Включить контекстное меню tool.trackassembly.endsvlock=Включает блокировку внешней базы данных DSV tool.trackassembly.endsvlock_con=Включить блокировку базы данных DSV +tool.trackassembly.engunsnap=Управляет приклеивание когда кусок выпущен физической пушки пользователя +tool.trackassembly.engunsnap_con=Приклеивать выпуском tool.trackassembly.enmultask=Включает многозадачность в режиме стекового создания tool.trackassembly.enmultask_con=Включить многозадачность tool.trackassembly.enpntmscr=Включает переключение активных точек с помощью прокрутки мыши @@ -127,8 +65,20 @@ tool.trackassembly.exportdb=Включает экспорт базы данны tool.trackassembly.exportdb_con=Включить экспорт базы данных tool.trackassembly.factory_reset=Нажмите, чтобы применить настройки консольных переменных по умолчанию tool.trackassembly.factory_reset_con=Сброс настроек +tool.trackassembly.forcelim=Управляет сколько сил требуется чтобы сломать сварной шов +tool.trackassembly.forcelim_con=Ограничение силы\: +tool.trackassembly.freeze=Создает заморожений кусок +tool.trackassembly.freeze_con=Заморозить кусок tool.trackassembly.ghostblnd=Управляет прозрачностью призрачных объектов. Чем ниже значение, тем более прозрачные tool.trackassembly.ghostblnd_con=Прозрачность призраков\: +tool.trackassembly.ghostcnt=Управляет подсчет отображением куска-тени +tool.trackassembly.ghostcnt_con=Нарисовать подсчет кусок-тень +tool.trackassembly.gravity=Управляет гравитацию куска +tool.trackassembly.gravity_con=Применить силу тяжести к куске +tool.trackassembly.ignphysgn=Игнорирует захвата физической пушки при созданием/приклеиванием/нагромождением куска +tool.trackassembly.ignphysgn_con=Игнорирует захвата физической пушки +tool.trackassembly.igntype=Игнорирует различные типы кусков прилипания/накопления +tool.trackassembly.igntype_con=Игнорировать тип кусков tool.trackassembly.incsnpang=Определяет угловой инкрементный шаг при использовании ползунков tool.trackassembly.incsnpang_con=Угловой шаг\: tool.trackassembly.incsnplin=Определяет линейный инкрементный шаг при использовании ползунков @@ -147,6 +97,8 @@ tool.trackassembly.logfile=Включает запись журнала в от tool.trackassembly.logfile_con=Включить логирование в файл tool.trackassembly.logsmax=Измените это, чтобы настроить максимальное количество записей в журнале tool.trackassembly.logsmax_con=Логирование строк\: +tool.trackassembly.mass=Как тяжелый кусок создал будет +tool.trackassembly.mass_con=Масса куска\: tool.trackassembly.maxactrad=Измените это, чтобы настроить максимальный радиус для получения ID точки tool.trackassembly.maxactrad_con=Ограничение радиуса\: tool.trackassembly.maxforce=Измените это, чтобы настроить максимальную силу при создании соединений @@ -173,7 +125,39 @@ tool.trackassembly.modedb=Измените это, чтобы настроить tool.trackassembly.modedb_con=Режим базы данных\: tool.trackassembly.modedb_lua=Использовать прямое кеширование tool.trackassembly.modedb_sql=Кешировать только запрашиваемые записи +tool.trackassembly.model=Выберите кусок чтобы начать/продолжить свою дорогу выбирая тип дерева и нажав на листе +tool.trackassembly.model_con=Модель куска\: +tool.trackassembly.name=Сборка дороги +tool.trackassembly.nextpic=Дополнительный сдвиг начала тангажом +tool.trackassembly.nextpic_con=Начало тангажа\: +tool.trackassembly.nextrol=Дополнительный сдвиг начала рулона +tool.trackassembly.nextrol_con=Начало рулона\: +tool.trackassembly.nextx=Дополнительное линейное смещение X +tool.trackassembly.nextx_con=Смещения X\: +tool.trackassembly.nexty=Дополнительное линейное смещение Y +tool.trackassembly.nexty_con=Смещения Y\: +tool.trackassembly.nextyaw=Дополнительный сдвиг начала рысканием +tool.trackassembly.nextyaw_con=Начало рыскания\: +tool.trackassembly.nextz=Дополнительное линейное смещение Z +tool.trackassembly.nextz_con=Смещения Z\: +tool.trackassembly.nocollide=Делает не-столкновение между кусками или кусоком/якорем +tool.trackassembly.nocollide_con=Не-столкновение +tool.trackassembly.nocollidew=Делает не-столкновение между кусками и миром +tool.trackassembly.nocollidew_con=Не-столкновение миром tool.trackassembly.nonrep_var=Не реплицируемые консольные переменные. Они имеют разные значения на сервере и клиенте +tool.trackassembly.phyname=Выберите имя физических свойств которые могут быть использованы при создании дороги так как это повлияет на поверхностное трение +tool.trackassembly.phyname_con=Имя поверхности\: +tool.trackassembly.phyname_def=<Выберите ИМЯ поверхности> +tool.trackassembly.phytype=Выберите тип физических свойств из тех которые перечислены здесь +tool.trackassembly.phytype_con=Тип поверхности\: +tool.trackassembly.phytype_def=<Выберите ТИП поверхности> +tool.trackassembly.pn_contextm_cp=Копировать +tool.trackassembly.pn_contextm_cpbx=Коробка +tool.trackassembly.pn_contextm_cpmd=Модель +tool.trackassembly.pn_contextm_cpnm=Имя +tool.trackassembly.pn_contextm_cprw=Ряд +tool.trackassembly.pn_contextm_cpth=Путь +tool.trackassembly.pn_contextm_cpty=Тип tool.trackassembly.pn_contextm_ep=Развернуть узел tool.trackassembly.pn_contextm_ex=Экспортировать tool.trackassembly.pn_contextm_exdv=Внешний @@ -198,11 +182,35 @@ tool.trackassembly.pn_contextm_tg=Переключить tool.trackassembly.pn_contextm_ws=Мастерская tool.trackassembly.pn_contextm_wsid=Скопировать WID tool.trackassembly.pn_contextm_wsop=Открыть страницу +tool.trackassembly.pn_display=Модель вашего куска дороги здесь отображается +tool.trackassembly.pn_display_lb=Показать кусок +tool.trackassembly.pn_export=Нажмите чтобы сохранить файл базы данных +tool.trackassembly.pn_export_lb=Экспорт БД +tool.trackassembly.pn_extdsv_act=Активный +tool.trackassembly.pn_extdsv_hd=Список внешних баз данных DSV отображается здесь +tool.trackassembly.pn_extdsv_inf=Дополнительная информация +tool.trackassembly.pn_extdsv_lb=Внешний список DSV +tool.trackassembly.pn_extdsv_prf=Уникальный префикс базы данных tool.trackassembly.pn_externdb_bte=Экспортировать tool.trackassembly.pn_externdb_bte_tp=Экспортирует информацию из панели в список файлов и применяет tool.trackassembly.pn_externdb_bti=Импортировать tool.trackassembly.pn_externdb_bti_tp=Импортирует информацию из списка файлов в панель для редактирования +tool.trackassembly.pn_externdb_hd=Внешние базы данных для\: tool.trackassembly.pn_externdb_ttt=Текущее измененное значение конфигурации\: +tool.trackassembly.pn_pattern=Напишите шаблон здесь и нажмите ВВОД для выполнения поиска +tool.trackassembly.pn_pattern_lb=Напишите шаблон +tool.trackassembly.pn_routine=Список регулярно используемых кусков дороги +tool.trackassembly.pn_routine_end=Конец +tool.trackassembly.pn_routine_hd=Часто используемых кусков пользователя\: +tool.trackassembly.pn_routine_lb=Часто используемых кусков +tool.trackassembly.pn_routine_mod=Модель +tool.trackassembly.pn_routine_nam=Имя +tool.trackassembly.pn_routine_typ=Тип +tool.trackassembly.pn_routine_use=Срок +tool.trackassembly.pn_srchcol=Выберите столбец для поиска +tool.trackassembly.pn_srchcol_lb=<Искать по> +tool.trackassembly.pntasist=Управляет изображение помощника для прилипания +tool.trackassembly.pntasist_con=Нарисовать помощника tool.trackassembly.relica_var=Управление константами с репликацией. Значение на сервере передается всем клиентам для использования tool.trackassembly.reload.1=Удалить элемент трассы. Удерживайте SHIFT для выбора якоря tool.trackassembly.reload.2=Удалить элемент трассы. Удерживайте SHIFT для выбора луча связи @@ -214,6 +222,8 @@ tool.trackassembly.reload_use.2=Включить экспорт базы дан tool.trackassembly.reload_use.3=Включить экспорт базы данных для открытия менеджера DSV tool.trackassembly.reload_use.4=Включить экспорт базы данных для открытия менеджера DSV tool.trackassembly.reload_use.5=Включить экспорт базы данных для открытия менеджера DSV +tool.trackassembly.resetvars=Нажмите чтобы сбросить дополнительные значения +tool.trackassembly.resetvars_con=V Сбросить переменные V tool.trackassembly.right.1=Копировать модель элемента трассы или открыть окно частых элементов tool.trackassembly.right.2=Копировать модель элемента трассы или открыть окно частых элементов tool.trackassembly.right.3=Создать узел для сегментированной кривой. Удерживайте SHIFT для обновления @@ -230,8 +240,18 @@ tool.trackassembly.sgradmenu=Измените это для округления tool.trackassembly.sgradmenu_con=Сегменты радиального меню\: tool.trackassembly.sizeucs=Масштаб для отображаемых систем координат tool.trackassembly.sizeucs_con=Масштаб UCS\: +tool.trackassembly.spawncn=Создание куска в центре иначе в выбранной активной точке +tool.trackassembly.spawncn_con=Происхождение из центра tool.trackassembly.spawnrate=Измените это для настройки количества сегментов трассы, создаваемых за тик сервера tool.trackassembly.spawnrate_con=Скорость создания\: +tool.trackassembly.spnflat=Следующий кусок будет создан/приклеен/накоплен по горизонтали +tool.trackassembly.spnflat_con=Нагромождать по горизонтали +tool.trackassembly.stackcnt=Максимальное количество куски для нагромождения +tool.trackassembly.stackcnt_con=Количество кусков\: +tool.trackassembly.subfolder=Выберите категорию дороги для использования путем расширения папки +tool.trackassembly.subfolder_con=Категория дороги\: +tool.trackassembly.surfsnap=Приклеить кусок к поверхности к которой ссылается пользователь +tool.trackassembly.surfsnap_con=Приклеивать к поверхности tool.trackassembly.timermode_ap=Нажмите здесь, чтобы применить изменения в конфигурации менеджера памяти SQL tool.trackassembly.timermode_ap_con=Применить настройки памяти tool.trackassembly.timermode_cqt=Таймер запроса кэша через запрос записи @@ -244,36 +264,18 @@ tool.trackassembly.timermode_mem=Менеджер памяти для табли tool.trackassembly.timermode_obj=Таймер объекта, прикрепленного к записи кэша tool.trackassembly.timermode_rd=При включении удаляет запись из кэша, присваивая значение nil tool.trackassembly.timermode_rd_con=Включить удаление записи +tool.trackassembly.type=Выберите типа дороги для использования путем расширения папки +tool.trackassembly.type_con=Тип дороги\: +tool.trackassembly.upspanchor=Включите якорь обновить для каждый раз когда создаете без накопления +tool.trackassembly.upspanchor_con=Обновить якорь при создаване tool.trackassembly.utilities_admin=Настройка параметров администратора tool.trackassembly.utilities_user=Настройка параметров пользователя +tool.trackassembly.weld=Создает сварные швы между кусками или кусоком/якорем +tool.trackassembly.weld_con=Сварной шов +tool.trackassembly.workmode.1=Общее создание/прилепание куски +tool.trackassembly.workmode.2=Пересечение активной точки +tool.trackassembly.workmode.3=Кривой отрезок линии фитинг +tool.trackassembly.workmode.4=Нормаль поверхности перевернуть tool.trackassembly.workmode.5=Переходы с касательной -tool.trackassembly.pn_export=Нажмите чтобы сохранить файл базы данных -tool.trackassembly.pn_export_lb=Экспорт БД -tool.trackassembly.pn_routine=Список регулярно используемых кусков дороги -tool.trackassembly.pn_routine_hd=Часто используемых кусков пользователя\: -tool.trackassembly.pn_externdb_hd=Внешние базы данных для\: -tool.trackassembly.pn_extdsv_lb=Внешний список DSV -tool.trackassembly.pn_extdsv_hd=Список внешних баз данных DSV отображается здесь -tool.trackassembly.pn_extdsv_act=Активный -tool.trackassembly.pn_extdsv_prf=Уникальный префикс базы данных -tool.trackassembly.pn_extdsv_inf=Дополнительная информация -tool.trackassembly.pn_display=Модель вашего куска дороги здесь отображается -tool.trackassembly.pn_pattern=Напишите шаблон здесь и нажмите ВВОД для выполнения поиска -tool.trackassembly.pn_srchcol=Выберите столбец для поиска -tool.trackassembly.pn_srchcol_lb=<Искать по> -tool.trackassembly.pn_routine_use=Срок -tool.trackassembly.pn_routine_end=Конец -tool.trackassembly.pn_routine_typ=Тип -tool.trackassembly.pn_routine_nam=Имя -tool.trackassembly.pn_routine_mod=Модель -tool.trackassembly.pn_routine_lb=Часто используемых кусков -tool.trackassembly.pn_display_lb=Показать кусок -tool.trackassembly.pn_pattern_lb=Напишите шаблон -tool.trackassembly.buttonas<>=Уменьшить/Увеличить -tool.trackassembly.buttonas+/-=Начение по умолчаниюз -tool.trackassembly.buttonas@M=Запомнить стоимость -tool.trackassembly.buttonas@D=Значение по умолчанию -tool.trackassembly.buttonas@=Применять стоимость\: -Cleanup_asmtracks=Собранные куски дороги -Cleaned_asmtracks=Все куски дороги очищены -SBoxLimit_asmtracks=Вы достигли предела созданных кусков дороги! +tool.trackassembly.workmode=Измените эту опцию чтобы использовать другой рабочий режим +tool.trackassembly.workmode_con=Рабочий режим\: From 0b25f2ea14e938d007ac20ef8d7be15920be673e Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 15 Nov 2024 15:43:54 +0200 Subject: [PATCH 088/114] Fixed: Apply super-elevation when spawn flat is not checked Fixed: Actually use the super-elevation return value to notify the client --- lua/weapons/gmod_tool/stools/trackassembly.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 6e913a32..1ce910d7 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -929,7 +929,7 @@ function TOOL:ApplySuperElevation(tC, tData) asmlib.LogInstance("Curve missing", gtLogs); return 0 end local spnflat = self:GetSpawnFlat() local crvsuprev = self:GetSuperElevation() - if(not (spnflat and crvsuprev > 0) then + if(not (crvsuprev > 0 and not spnflat) then asmlib.LogInstance("Auto roll disabled", gtLogs); return 0 end if(not (tC.Size and tC.Size >= 2)) then asmlib.LogInstance("Two vertices needed", gtLogs); return 0 end @@ -951,7 +951,7 @@ function TOOL:CurveInsert(stTrace, bPnt, bMute) asmlib.LogInstance("Transform missing", gtLogs); return nil end local tC = asmlib.GetCacheCurve(user); if(not tC) then asmlib.LogInstance("Curve missing", gtLogs); return nil end - self:ApplySuperElevation(tC, tData) + local iN, vN = self:ApplySuperElevation(tC, tData) tC.Size = (tC.Size + 1) -- Increment stack size. Adding stuff tableInsert(tC.Node, Vector(tData.Org)) tableInsert(tC.Norm, tData.Ang:Up()) From 6c2451523435e35838ff89be8d81b8d3337d7c3c Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 15 Nov 2024 16:09:54 +0200 Subject: [PATCH 089/114] Added: Check of the modified normal exists Added: Description for super-elevation --- lua/autorun/trackassembly_init.lua | 5 +++-- lua/weapons/gmod_tool/stools/trackassembly.lua | 7 +++++++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 7c6c9f69..53daaad9 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -566,8 +566,9 @@ if(CLIENT) then function(nLen) local oPly, sLog = netReadEntity(), "*CREATE_CURVE_NODE" local vNode, vNorm, vBase = netReadVector(), netReadNormal(), netReadVector() local vOrgw, aAngw, bRayw = netReadVector(), netReadAngle() , netReadBool() - local iNorm, tC = netReadUInt(16), asmlib.GetCacheCurve(oPly) -- Read the curve - if(iNorm > 0 and tC.Size and tC.Size >= 2) then tC.Norm[iNorm]:Set(netReadNormal()) end + local iD, tC = netReadUInt(16), asmlib.GetCacheCurve(oPly) -- Read the curve + if(iD > 0 and tC.Norm[iD] and tC.Size and tC.Size => 2) then + tC.Norm[iD]:Set(netReadNormal()) end -- Update the previews curve normal tableInsert(tC.Node, vNode); tableInsert(tC.Norm, vNorm) tableInsert(tC.Base, vBase); tableInsert(tC.Rays, {vOrgw, aAngw, bRayw}) tC.Size = (tC.Size + 1) -- Register the index after writing the data for drawing diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 1ce910d7..bf76e922 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -922,6 +922,13 @@ function TOOL:GetCurveTransform(stTrace, bPnt) return tData end +--[[ + * Used to apply super-elevation on the previous node + * according to the location of the next node placed + * Must be run BEFORE inserting the new node placed + * tC > Curve data stricture with the normal modified + * tData > Reference to the node being inserted +]] function TOOL:ApplySuperElevation(tC, tData) if(not tData) then -- The node being managed asmlib.LogInstance("Data missing", gtLogs); return 0 end From 36601bd3a9120416df5ae40c6e0567f8587a1783 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 15 Nov 2024 16:31:33 +0200 Subject: [PATCH 090/114] Fixed: Wrong storage of grater-equals Added: Description for `GetCurveTransform` Added: TODO list for `CurveUpdate` --- lua/autorun/trackassembly_init.lua | 2 +- lua/weapons/gmod_tool/stools/trackassembly.lua | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 53daaad9..98cc067f 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -567,7 +567,7 @@ if(CLIENT) then local vNode, vNorm, vBase = netReadVector(), netReadNormal(), netReadVector() local vOrgw, aAngw, bRayw = netReadVector(), netReadAngle() , netReadBool() local iD, tC = netReadUInt(16), asmlib.GetCacheCurve(oPly) -- Read the curve - if(iD > 0 and tC.Norm[iD] and tC.Size and tC.Size => 2) then + if(iD > 0 and tC.Norm[iD] and tC.Size and tC.Size >= 2) then tC.Norm[iD]:Set(netReadNormal()) end -- Update the previews curve normal tableInsert(tC.Node, vNode); tableInsert(tC.Norm, vNorm) tableInsert(tC.Base, vBase); tableInsert(tC.Rays, {vOrgw, aAngw, bRayw}) diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index bf76e922..e9643e7e 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -875,6 +875,12 @@ function TOOL:CurveClear(bAll, bMute) end; return tC -- Returns the updated curve nodes table end +--[[ + * Generates curve transform data structure + * It is used to create data for the curve nodes + * stTrace > Trace structure being used for generation + * bPnt > Whenever the generation is from active point +]] function TOOL:GetCurveTransform(stTrace, bPnt) if(not stTrace) then asmlib.LogInstance("Trace missing", gtLogs); return nil end @@ -992,6 +998,10 @@ function TOOL:CurveUpdate(stTrace, bPnt, bMute) asmlib.Notify(user,"Populate nodes first !","ERROR") asmlib.LogInstance("Nodes missing", gtLogs); return nil end + --[[ TODO: + Update P/Y/R offsets and use then to store the curve normal + Update X,Y,X offsets and use them to store the curve origin + ]] local mD, mL = asmlib.GetNearest(tData.Hit, tC.Base) tC.Node[mD]:Set(tData.Org) tC.Norm[mD]:Set(tData.Ang:Up()) From abec33b76a88dace1cda1f5af31ec74d8e4466b7 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Fri, 15 Nov 2024 16:59:20 +0200 Subject: [PATCH 091/114] Added: Load the node into tool offsets --- .../gmod_tool/stools/trackassembly.lua | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index e9643e7e..2ad326bd 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -998,11 +998,25 @@ function TOOL:CurveUpdate(stTrace, bPnt, bMute) asmlib.Notify(user,"Populate nodes first !","ERROR") asmlib.LogInstance("Nodes missing", gtLogs); return nil end - --[[ TODO: - Update P/Y/R offsets and use then to store the curve normal - Update X,Y,X offsets and use them to store the curve origin - ]] local mD, mL = asmlib.GetNearest(tData.Hit, tC.Base) + local nextx, nexty, nextz = self:GetPosOffsets() + if(nextx == 0 and nexty == 0 and nextz == 0) then + local vN, vB = tC.Node[mD], tC.Base[mD] + local vO = Vector(); vO:Set(vN); vO:Sub(vB) + nextx, nexty, nextz = vO:Unpack() + asmlib.SetAsmConvar(oPly,"nextx", nextx) + asmlib.SetAsmConvar(oPly,"nexty", nexty) + asmlib.SetAsmConvar(oPly,"nextz", nextz) + end + local nextpic, nextyaw, nextrol = self:GetAngOffsets() + if(nextpic == 0 and nextyaw == 0 and nextrol == 0) then + local aO = C.Norm[mD]:Angle() + aO:RotateAroundAxis(aO:Right(), 90) + nextpic, nextyaw, nextrol = aO:Unpack() + asmlib.SetAsmConvar(oPly,"nextpic", nextpic) + asmlib.SetAsmConvar(oPly,"nextyaw", nextyaw) + asmlib.SetAsmConvar(oPly,"nextrol", nextrol) + end tC.Node[mD]:Set(tData.Org) tC.Norm[mD]:Set(tData.Ang:Up()) tC.Base[mD]:Set(tData.Hit) From 68ede4dd733c318fef3cd8fead78a8baed530ff4 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sat, 16 Nov 2024 16:15:00 +0200 Subject: [PATCH 092/114] Fixed: Runtime missing bracket in `ApplySuperElevation` Fixed: Unneeded square root calculation in `GetNearest` Added: Upload/Download node offsets in `CurveUpdate` Added: Upload/Download node offsets and marker in `DrawHUD` --- lua/trackassembly/trackasmlib.lua | 2 +- .../gmod_tool/stools/trackassembly.lua | 71 ++++++++++++------- 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4e43aa55..f65090e4 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -4469,7 +4469,7 @@ function GetNearest(vHit, tVec) if(mL and mD) then -- Length is allocated if(nT <= mL) then mD, mL = iD, nT end else mD, mL = iD, nT end; iD = (iD + 1) - end; return mD, mathSqrt(mL) + end; return mD, mL end --[[ diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 2ad326bd..40145114 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -942,7 +942,7 @@ function TOOL:ApplySuperElevation(tC, tData) asmlib.LogInstance("Curve missing", gtLogs); return 0 end local spnflat = self:GetSpawnFlat() local crvsuprev = self:GetSuperElevation() - if(not (crvsuprev > 0 and not spnflat) then + if(not (crvsuprev > 0 and not spnflat)) then asmlib.LogInstance("Auto roll disabled", gtLogs); return 0 end if(not (tC.Size and tC.Size >= 2)) then asmlib.LogInstance("Two vertices needed", gtLogs); return 0 end @@ -998,33 +998,40 @@ function TOOL:CurveUpdate(stTrace, bPnt, bMute) asmlib.Notify(user,"Populate nodes first !","ERROR") asmlib.LogInstance("Nodes missing", gtLogs); return nil end + local nrA = self:GetActiveRadius() local mD, mL = asmlib.GetNearest(tData.Hit, tC.Base) - local nextx, nexty, nextz = self:GetPosOffsets() - if(nextx == 0 and nexty == 0 and nextz == 0) then - local vN, vB = tC.Node[mD], tC.Base[mD] - local vO = Vector(); vO:Set(vN); vO:Sub(vB) - nextx, nexty, nextz = vO:Unpack() - asmlib.SetAsmConvar(oPly,"nextx", nextx) - asmlib.SetAsmConvar(oPly,"nexty", nexty) - asmlib.SetAsmConvar(oPly,"nextz", nextz) + local bTr = (mD and mD > 0 and mL < nrA^2) + if(bTr) then + if(not bPnt) then + local elevpnt = self:GetElevation() + local vB, tR = tC.Base[mD], tC.Rays[mD] + local vN, vD = tC.Norm[mD], tC.Node[mD] + local vO = Vector(); vO:Set(vD); vO:Sub(vB) + local nextx, nexty, nextz = vO:Unpack() + asmlib.SetAsmConvar(oPly,"nextx", 0) + asmlib.SetAsmConvar(oPly,"nexty", 0) + asmlib.SetAsmConvar(oPly,"nextz", (nextz - elevpnt)) + local aO = tR[2]:Forward():AngleEx(vN) --tC.Norm[mD]:Angle() + aO:RotateAroundAxis(tR[2]:Up(), 180) + local nextpic, nextyaw, nextrol = aO:Unpack() + asmlib.SetAsmConvar(oPly,"nextpic", nextpic) + asmlib.SetAsmConvar(oPly,"nextyaw", 0) + asmlib.SetAsmConvar(oPly,"nextrol", nextrol) + return tC + end end - local nextpic, nextyaw, nextrol = self:GetAngOffsets() - if(nextpic == 0 and nextyaw == 0 and nextrol == 0) then - local aO = C.Norm[mD]:Angle() - aO:RotateAroundAxis(aO:Right(), 90) - nextpic, nextyaw, nextrol = aO:Unpack() - asmlib.SetAsmConvar(oPly,"nextpic", nextpic) - asmlib.SetAsmConvar(oPly,"nextyaw", nextyaw) - asmlib.SetAsmConvar(oPly,"nextrol", nextrol) + if(not bTr) then + tC.Node[mD]:Set(tData.Org) end - tC.Node[mD]:Set(tData.Org) tC.Norm[mD]:Set(tData.Ang:Up()) - tC.Base[mD]:Set(tData.Hit) + if(not bTr) then + tC.Base[mD]:Set(tData.Hit) + end tC.Rays[mD][1]:Set(tData.Org) tC.Rays[mD][2]:Set(tData.Ang) tC.Rays[mD][3] = (tData.POA ~= nil) -- Adjust node according to intersection - if(bPnt and not tData.POA) then + if(bPnt and not tData.POA and not bTr) then local xx = self:GetCurveNodeActive(mD, tData.Org) if(xx) then tC.Node[mD]:Set(xx) @@ -1259,12 +1266,12 @@ function TOOL:LeftClick(stTrace) if(crvturnlm > 0 or crvleanlm > 0) then local nF, nU = asmlib.GetTurningFactor(oPly, tS, iK) if(nF and nF < crvturnlm) then oArg.mundo = asmlib.GetReport(iD, asmlib.GetNearest(tV[1], tC.Node), ("%4.3f"):format(nF)) - asmlib.Notify(oPly, oArg.wname.." excessive turn at "..oArg.mundo.." !", "ERROR") + asmlib.Notify(oPly, oArg.wname..": excessive turn at "..oArg.mundo.." !", "ERROR") asmlib.LogInstance(self:GetStatus(stTrace,"("..oArg.wname..") "..oArg.mundo..": Turn excessive"), gtLogs); return false end if(nU and nU < crvleanlm) then oArg.mundo = asmlib.GetReport(iD, asmlib.GetNearest(tV[1], tC.Node),("%4.3f"):format(nU)) - asmlib.Notify(oPly, oArg.wname.." excessive lean at "..oArg.mundo.." !", "ERROR") + asmlib.Notify(oPly, oArg.wname..": excessive lean at "..oArg.mundo.." !", "ERROR") asmlib.LogInstance(self:GetStatus(stTrace,"("..oArg.wname..") "..oArg.mundo..": Lean excessive"), gtLogs); return false end end @@ -1985,7 +1992,7 @@ function TOOL:DrawCurveNode(oScreen, oPly, stTrace) if(not tData) then asmlib.LogInstance("Transform missing", gtLogs); return end local tC, nS = asmlib.GetCacheCurve(oPly), self:GetSizeUCS() if(not tC) then asmlib.LogInstance("Curve missing", gtLogs); return end - local nrB, nrS, mD, mL = 3, 1.5 + local nrB, nrS, nrA, mD, mL = 3, 1.5, self:GetActiveRadius() local xyO, xyH = tData.Org:ToScreen(), tData.Hit:ToScreen() local xyZ = (tData.Org + nS * tData.Ang:Up()):ToScreen() local xyX = (tData.Org + nS * tData.Ang:Forward()):ToScreen() @@ -1998,14 +2005,17 @@ function TOOL:DrawCurveNode(oScreen, oPly, stTrace) if(tC.Size and tC.Size > 0) then for iD = 1, tC.Size do local rN = (iD == 1 and nrB or nrS) - local vB, vD, vN = tC.Base[iD], tC.Node[iD], tC.Norm[iD] + local vB, tR = tC.Base[iD], tC.Rays[iD] + local vD, vN = tC.Node[iD], tC.Norm[iD] local nB = asmlib.GetViewRadius(oPly, vB, 2) local nD = asmlib.GetViewRadius(oPly, vD, rN) local xyB, xyD = vB:ToScreen(), vD:ToScreen() local xyN = (vD + nS * vN):ToScreen() + local xyF = (vD + nS * tR[2]:Forward()):ToScreen() oScreen:DrawLine(xyB, xyD, "y") oScreen:DrawCircle(xyB, nB) oScreen:DrawCircle(xyD, nD) + oScreen:DrawLine(xyF, xyD, "r") oScreen:DrawLine(xyN, xyD, "b") oScreen:DrawCircle(xyD, nD / 2, "r") if(tC.Node[iD - 1]) then @@ -2024,7 +2034,18 @@ function TOOL:DrawCurveNode(oScreen, oPly, stTrace) if(bRp and mD) then local xyN = tC.Node[mD]:ToScreen() oScreen:DrawLine(xyO, xyN, "r") - if(bPnt and not tData.POA) then + if(mL < nrA^2) then + local nP, vR = 10, oPly:GetRight() + if(bPnt) then + local vU = oPly:GetUp(); vU:Mul(-nP); vU:Add(tData.Org) + oScreen:DrawLine(xyO, (vU + nP * vR):ToScreen(), "m") + oScreen:DrawLine(xyO, (vU - nP * vR):ToScreen(), "m") + else + local vU = oPly:GetUp(); vU:Mul(nP); vU:Add(tData.Org) + oScreen:DrawLine(xyO, (vU + nP * vR):ToScreen(), "m") + oScreen:DrawLine(xyO, (vU - nP * vR):ToScreen(), "m") + end + elseif(bPnt and not tData.POA) then local xx, sx = self:GetCurveNodeActive(mD, tData.Org, true) if(xx) then local xyX = xx:ToScreen(); oScreen:DrawLine(xyX, xyO, "ry") From 70c3f832795434211ceef2a26a188be02cfebe80 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 17 Nov 2024 13:33:35 +0200 Subject: [PATCH 093/114] Fixed: Super-elevation auto update not working on node update Fixed: Node settings not being copied in some cases Added: Scene builder addon content Updated: Use trace fraction when calling `GetCurveTransform` --- .../tools/peaces_manager/create_report.bat | 6 +- lua/autorun/trackassembly_init.lua | 23 +++++- lua/trackassembly/trackasmlib.lua | 8 +- .../gmod_tool/stools/trackassembly.lua | 75 ++++++++++++------- 4 files changed, 78 insertions(+), 34 deletions(-) diff --git a/data/trackassembly/tools/peaces_manager/create_report.bat b/data/trackassembly/tools/peaces_manager/create_report.bat index 75064077..d4a70352 100644 --- a/data/trackassembly/tools/peaces_manager/create_report.bat +++ b/data/trackassembly/tools/peaces_manager/create_report.bat @@ -30,8 +30,8 @@ set emd_chew_dbase=%emd_chew_gmod%\garrysmod\data\trackassembly\exp\trackasmlib_ set emd_chew_skip=%emd_chew_repo%\data\trackassembly\tools\peaces_manager\models_ignored.txt :: How many addons are to be processed -set emd_chew_addfrm=30 -set emd_chew_addcnt=30 +set emd_chew_addfrm=31 +set emd_chew_addcnt=31 :: GMA addons to be processed set emd_chew_addlst[1]=740453553 @@ -64,6 +64,7 @@ set emd_chew_addlst[27]=1955876643 set emd_chew_addlst[28]=3071058065 set emd_chew_addlst[29]=3297918081 set emd_chew_addlst[30]=3314861708 +set emd_chew_addlst[31]=2233731395 :: Folder list for extraction and the directories they will be extracted set emd_chew_adddir[1]=AlexCookie's 2ft track pack @@ -96,6 +97,7 @@ set emd_chew_adddir[27]=Trackmania United Props set emd_chew_adddir[28]=RockMan's Fortification set emd_chew_adddir[29]=SligWolf's Suspension Train set emd_chew_adddir[30]=Modular City Street +set emd_chew_adddir[31]=Scene Builder :: Show the current folder echo Running in: %emd_chew_pathb% diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 98cc067f..92f1ddab 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.806") +asmlib.SetOpVar("TOOL_VERSION","8.807") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -557,6 +557,7 @@ if(CLIENT) then asmlib.WorkshopID("RockMan's Fortification" , "3071058065") asmlib.WorkshopID("SligWolf's Suspension Train" , "3297918081") asmlib.WorkshopID("Modular City Street" , "3314861708") + asmlib.WorkshopID("Scene Builder" , "2233731395") asmlib.SetAction("CLEAR_GHOSTS" , function() asmlib.ClearGhosts() end) asmlib.SetAction("CTXMENU_OPEN" , function() asmlib.IsFlag("tg_context_menu", true ) end) @@ -4751,6 +4752,26 @@ else PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn.mdl", "#", "#", 2, "", "-512,-1024,120", "0,-90,0"}) PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn_tall.mdl", "#", "#", 1, "", "1024,512,248"}) PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn_tall.mdl", "#", "#", 2, "", "-512,-1024,248", "0,-90,0"}) + asmlib.Categorize("Scene Builder") + PIECES:Record({"models/scene_building/sewer_system/arch_small_hall.mdl", "#", "#", 1, "", "0, 47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_hall.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_hall_med.mdl", "#", "#", 1, "", "0, 23,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_hall_med.mdl", "#", "#", 2, "", "0,-23,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_hall_small.mdl", "#", "#", 1, "", "0, 11,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_hall_small.mdl", "#", "#", 2, "", "0,-11,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_corner.mdl", "#", "#", 1, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_corner.mdl", "#", "#", 2, "", "47,0,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_3way.mdl", "#", "#", 1, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_3way.mdl", "#", "#", 2, "", "47,0,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_3way.mdl", "#", "#", 3, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_4way.mdl", "#", "#", 1, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_4way.mdl", "#", "#", 2, "", "47,0,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_4way.mdl", "#", "#", 3, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_hall_4way.mdl", "#", "#", 4, "", "-47,0,0", "0,-180,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_door1.mdl", "#", "#", 1, "", "0, 47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_door1.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_door2.mdl", "#", "#", 1, "", "0, 47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/arch_small_door2.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) if(gsMoDB == "SQL") then sqlCommit() end end diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index f65090e4..89f33ae4 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -787,6 +787,7 @@ function InitBase(sName, sPurp) SetOpVar("HASH_PROPERTY_TYPES","PROPERTY_TYPES") SetOpVar("TRACE_CLASS", {[GetOpVar("ENTITY_DEFCLASS")]=true}) SetOpVar("TRACE_DATA",{ -- Used for general trace result storage + length = 0, -- Will store the trace length when needed start = Vector(), -- Start position of the trace endpos = Vector(), -- End position of the trace mask = MASK_SOLID, -- Mask telling it what to hit @@ -4616,13 +4617,16 @@ function GetTraceEntityPoint(trEnt, ivPoID, nLen, vDir) local trPOA = LocatePOA(trRec, ivPoID); if(not IsHere(trPOA)) then LogInstance("Point missing "..GetReport(ivPoID)); return nil end local trDt, trAng = GetOpVar("TRACE_DATA"), Angle() + trDt.length = nLen trDt.start:SetUnpacked(trPOA.O:Get()) trDt.start:Rotate(trEnt:GetAngles()) trDt.start:Add(trEnt:GetPos()) trAng:SetUnpacked(trPOA.A:Get()) trAng:Set(trEnt:LocalToWorldAngles(trAng)) - trDt.endpos:Set(vDir or trAng:Forward()); trDt.endpos:Mul(nLen) - trDt.endpos:Add(trDt.start); SetOpVar("TRACE_FILTER", trEnt) + trDt.endpos:Set(vDir or trAng:Forward()) + trDt.endpos:Mul(trDt.length) + trDt.endpos:Add(trDt.start) + SetOpVar("TRACE_FILTER", trEnt) return utilTraceLine(trDt), trDt end diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 40145114..1e304bc7 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -910,9 +910,9 @@ function TOOL:GetCurveTransform(stTrace, bPnt) tData.Orw:Set(tData.Org); tData.Anw:Set(tData.Ang) -- Transform of POA tData.ID = oID; tData.Min = oMin -- Point ID and minimum distance tData.POA = oPOA; tData.Rec = oRec -- POA and cache record - local trDt = asmlib.GetTraceEntityPoint(eEnt, oID, 30000, asmlib.GetOpVar("VEC_DW")) - if(trDt and trDt.Hit) then - nT = ((tData.Orw.z - trDt.HitPos.z) - elevpnt) + local trRz, trDt = asmlib.GetTraceEntityPoint(eEnt, oID, 30000, asmlib.GetOpVar("VEC_DW")) + if(trRz and trRz.Hit) then + nT = (trDt.length * trRz.Fraction - elevpnt) asmlib.SetAsmConvar(user, "nextz", nT) end end -- Use the track piece active end to create relative curve node @@ -935,7 +935,7 @@ end * tC > Curve data stricture with the normal modified * tData > Reference to the node being inserted ]] -function TOOL:ApplySuperElevation(tC, tData) +function TOOL:ApplySuperElevation(tC, tData, iD) if(not tData) then -- The node being managed asmlib.LogInstance("Data missing", gtLogs); return 0 end if(not tC) then -- The curve containing all nodes @@ -944,18 +944,33 @@ function TOOL:ApplySuperElevation(tC, tData) local crvsuprev = self:GetSuperElevation() if(not (crvsuprev > 0 and not spnflat)) then asmlib.LogInstance("Auto roll disabled", gtLogs); return 0 end - if(not (tC.Size and tC.Size >= 2)) then - asmlib.LogInstance("Two vertices needed", gtLogs); return 0 end - local nS, iN = asmlib.GetOpVar("FULL_SLOPEDG"), tC.Size - local tO, tR, tN = tC.Node, tC.Rays, tC.Norm - local vL, vP = tO[iN], tO[iN - 1] - local vD = Vector(tData.Org); vD:Sub(vL); vD:Normalize() - local vF = Vector(vL); vF:Sub(vP); vF:Normalize() - local aN = vF:AngleEx(tR[iN][2]:Up()) - local nP = (crvsuprev * nS) * vD:Dot(aN:Right()) - aN:RotateAroundAxis(vF, nP) - local vN = aN:Up(); tN[iN]:Set(vN) - return iN, vN + local iN, nS = tonumber(iD), asmlib.GetOpVar("FULL_SLOPEDG") + if(iN) then + local tR = tC.Rays + local tO, tN = tC.Node, tC.Norm + local vL, vP = tO[iN+1], tO[iN-1] + if(not (vL and vP)) then return 0 end + local vD = Vector(vL); vD:Sub(tData.Org); vD:Normalize() + local vF = Vector(vL); vF:Sub(vP); vF:Normalize() + local aN = vF:AngleEx(tR[iN][2]:Up()) + local nP = (crvsuprev * nS) * vD:Dot(aN:Right()) + aN:RotateAroundAxis(vF, nP) + local vN = aN:Up(); tN[iN]:Set(vN) + return iN, vN + else + if(not (tC.Size and tC.Size >= 2)) then + asmlib.LogInstance("Two vertices needed", gtLogs); return 0 end + local tR, iN = tC.Rays, tC.Size + local tO, tN = tC.Node, tC.Norm + local vL, vP = tO[iN], tO[iN - 1] + local vD = Vector(tData.Org); vD:Sub(vL); vD:Normalize() + local vF = Vector(tData.Org); vF:Sub(vP); vF:Normalize() + local aN = vF:AngleEx(tR[iN][2]:Up()) + local nP = (crvsuprev * nS) * vD:Dot(aN:Right()) + aN:RotateAroundAxis(vF, nP) + local vN = aN:Up(); tN[iN]:Set(vN) + return iN, vN + end end function TOOL:CurveInsert(stTrace, bPnt, bMute) @@ -1003,30 +1018,28 @@ function TOOL:CurveUpdate(stTrace, bPnt, bMute) local bTr = (mD and mD > 0 and mL < nrA^2) if(bTr) then if(not bPnt) then + local tN, vF = tC.Node, nil local elevpnt = self:GetElevation() local vB, tR = tC.Base[mD], tC.Rays[mD] local vN, vD = tC.Norm[mD], tC.Node[mD] local vO = Vector(); vO:Set(vD); vO:Sub(vB) local nextx, nexty, nextz = vO:Unpack() - asmlib.SetAsmConvar(oPly,"nextx", 0) - asmlib.SetAsmConvar(oPly,"nexty", 0) - asmlib.SetAsmConvar(oPly,"nextz", (nextz - elevpnt)) - local aO = tR[2]:Forward():AngleEx(vN) --tC.Norm[mD]:Angle() - aO:RotateAroundAxis(tR[2]:Up(), 180) + asmlib.SetAsmConvar(oPly,"nextx", nextx) + asmlib.SetAsmConvar(oPly,"nexty", nextx) + asmlib.SetAsmConvar(oPly,"nextz", nextz - elevpnt) + if(not (tN[mD-1] and tN[mD+1])) then vF = tR[2]:Forward() else + vF = Vector(tN[mD+1]); vF:Sub(tN[mD-1]); vF:Normalize() end + local aO = vF:AngleEx(vN) local nextpic, nextyaw, nextrol = aO:Unpack() asmlib.SetAsmConvar(oPly,"nextpic", nextpic) - asmlib.SetAsmConvar(oPly,"nextyaw", 0) + asmlib.SetAsmConvar(oPly,"nextyaw", nextyaw) asmlib.SetAsmConvar(oPly,"nextrol", nextrol) return tC end end - if(not bTr) then - tC.Node[mD]:Set(tData.Org) - end + tC.Node[mD]:Set(tData.Org) tC.Norm[mD]:Set(tData.Ang:Up()) - if(not bTr) then - tC.Base[mD]:Set(tData.Hit) - end + tC.Base[mD]:Set(tData.Hit) tC.Rays[mD][1]:Set(tData.Org) tC.Rays[mD][2]:Set(tData.Ang) tC.Rays[mD][3] = (tData.POA ~= nil) @@ -1040,6 +1053,10 @@ function TOOL:CurveUpdate(stTrace, bPnt, bMute) tC.Norm[mD]:Normalize() end end + if(not bTr) then -- Try to apply the new super-elevation + local iN, vN = self:ApplySuperElevation(tC, tData, mD) + if(iN > 0) then tC.Norm[iN]:Set(vN) end + end if(not bMute) then asmlib.Notify(user, "Node ["..mD.."] updated !", "CLEANUP") netStart(gsLibName.."SendUpdateCurveNode") @@ -1992,7 +2009,7 @@ function TOOL:DrawCurveNode(oScreen, oPly, stTrace) if(not tData) then asmlib.LogInstance("Transform missing", gtLogs); return end local tC, nS = asmlib.GetCacheCurve(oPly), self:GetSizeUCS() if(not tC) then asmlib.LogInstance("Curve missing", gtLogs); return end - local nrB, nrS, nrA, mD, mL = 3, 1.5, self:GetActiveRadius() + local nrB, nrS, nrA, mD, mL = 1.5, 1.5, self:GetActiveRadius() local xyO, xyH = tData.Org:ToScreen(), tData.Hit:ToScreen() local xyZ = (tData.Org + nS * tData.Ang:Up()):ToScreen() local xyX = (tData.Org + nS * tData.Ang:Forward()):ToScreen() From 99f48e685db1ef9dbda5ad6e755de0a7627d479b Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 17 Nov 2024 16:02:43 +0200 Subject: [PATCH 094/114] Added: Category for `Scene Builder` --- lua/autorun/trackassembly_init.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 92f1ddab..4e529611 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.807") +asmlib.SetOpVar("TOOL_VERSION","8.808") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -4752,7 +4752,9 @@ else PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn.mdl", "#", "#", 2, "", "-512,-1024,120", "0,-90,0"}) PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn_tall.mdl", "#", "#", 1, "", "1024,512,248"}) PIECES:Record({"models/propper/dingles_modular_streets/highway_street_1024turn_tall.mdl", "#", "#", 2, "", "-512,-1024,248", "0,-90,0"}) - asmlib.Categorize("Scene Builder") + asmlib.Categorize("Scene Builder", [[function(m) + local g = m:gsub("models/scene_building/","") + local r = g:gsub("/.+$",""); return r end]]) PIECES:Record({"models/scene_building/sewer_system/arch_small_hall.mdl", "#", "#", 1, "", "0, 47,0", "0,90,0"}) PIECES:Record({"models/scene_building/sewer_system/arch_small_hall.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) PIECES:Record({"models/scene_building/sewer_system/arch_small_hall_med.mdl", "#", "#", 1, "", "0, 23,0", "0,90,0"}) From d9e72f4cfbc0098a505ea192f8b597e1926db061 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 17 Nov 2024 20:01:28 +0200 Subject: [PATCH 095/114] Renamed: `CacheQueryPanel` to `CacheQueryInventory` Added: Export tracks inventory on shift + click Removed: Export inventory form panel tree buildup --- data/trackassembly/trackasmlib_db.txt | 2 +- lua/autorun/trackassembly_init.lua | 19 ++-- lua/trackassembly/trackasmlib.lua | 105 ++++++++---------- .../gmod_tool/stools/trackassembly.lua | 3 +- 4 files changed, 63 insertions(+), 66 deletions(-) diff --git a/data/trackassembly/trackasmlib_db.txt b/data/trackassembly/trackasmlib_db.txt index e8a7ffc1..094f5f0e 100644 --- a/data/trackassembly/trackasmlib_db.txt +++ b/data/trackassembly/trackasmlib_db.txt @@ -1,4 +1,4 @@ -# CacheQueryPanel:(true) 20-09-10 17:47:37 [ LUA ] +# CacheQueryInventory:(true) 20-09-10 17:47:37 [ LUA ] "models/alexcookie/2ft/curve/curve_90_512.mdl","AlexCookie's 2ft track pack","Curve 90 512" "models/alexcookie/2ft/misc/end1.mdl","AlexCookie's 2ft track pack","End1" "models/alexcookie/2ft/straight/straight_1024.mdl","AlexCookie's 2ft track pack","Straight 1024" diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 4e529611..629e1411 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -1273,13 +1273,18 @@ if(CLIENT) then pnButton.DoClick = function(pnSelf) asmlib.LogInstance("Click "..asmlib.GetReport(pnSelf:GetText()), sLog..".Button") if(asmlib.GetAsmConvar("exportdb", "BUL")) then - local fPref = "["..gsMoDB:lower().."-dsv]"..gsGenerPrf - asmlib.ExportCategory(3, nil, fPref, true) - asmlib.ExportDSV("PIECES", fPref, nil, true) - asmlib.ExportDSV("ADDITIONS", fPref, nil, true) - asmlib.ExportDSV("PHYSPROPERTIES", fPref, nil, true) - asmlib.LogInstance("Export data", sLog..".Button") - asmlib.SetAsmConvar(oPly, "exportdb", 0) + if(inputIsKeyDown(KEY_LSHIFT)) then + if(not asmlib.ExportInventory()) then + asmlib.LogInstance("Export invalid", sLog..".Button"); return nil end + else + local fPref = "["..gsMoDB:lower().."-dsv]"..gsGenerPrf + asmlib.ExportCategory(3, nil, fPref, true) + asmlib.ExportDSV("PIECES", fPref, nil, true) + asmlib.ExportDSV("ADDITIONS", fPref, nil, true) + asmlib.ExportDSV("PHYSPROPERTIES", fPref, nil, true) + asmlib.LogInstance("Export data", sLog..".Button") + asmlib.SetAsmConvar(oPly, "exportdb", 0) + end else local fW = asmlib.GetOpVar("FORM_GITWIKI") guiOpenURL(fW:format("Additional-features")) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 89f33ae4..0c149414 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3393,39 +3393,6 @@ end ----------------------- PANEL QUERY ------------------------------- ---[[ - * Export tool panel contents as a sync file - * stPanel > The actual tool panel information handled - * sFunc > Export requestor ( CacheQueryPanel ) - * bExp > Control flag. Export when enabled -]] -local function DumpCategory(stPanel, sFunc, bExp) - if(SERVER) then return stPanel end - if(not bExp) then return stPanel end - local sFunc = tostring(sFunc or "") - local sMiss = GetOpVar("MISS_NOAV") - local sBase = GetOpVar("DIRPATH_BAS") - local sExpo = GetOpVar("DIRPATH_EXP") - local sMoDB = GetOpVar("MODE_DATABASE") - local symSep, cT = GetOpVar("OPSYM_SEPARATOR") - if(not fileExists(sBase, "DATA")) then fileCreateDir(sBase) end - local fName = (sBase..sExpo..GetOpVar("NAME_LIBRARY").."_db.txt") - local F = fileOpen(fName, "wb" ,"DATA"), sMiss; if(not F) then - LogInstance("Open fail "..GetReport(fName)); return stPanel end - F:Write("# "..sFunc..":("..stPanel.Size..") "..GetDateTime().." [ "..sMoDB.." ]\n") - for iCnt = 1, stPanel.Size do - local vRec = stPanel[iCnt] - local sM, sT, sN = vRec.M, vRec.T, vRec.N - if(not cT or cT ~= sT) then -- Category has been changed - F:Write("# Categorize [ "..sMoDB.." ]("..sT.."): "..tostring(WorkshopID(sT) or sMiss)) - F:Write("\n"); cT = sT -- Cache category name - end -- Otherwise just write down the piece active point - F:Write("\""..sM.."\""..symSep) - F:Write("\""..sT.."\""..symSep) - F:Write("\""..sN.."\""); F:Write("\n") - end; F:Flush(); F:Close(); return stPanel -end - --[[ * Updates panel category to dedicated hash * stPanel > The actual panel information to populate @@ -3458,27 +3425,26 @@ end --[[ * Caches the data needed to populate the CPanel tree - * bExp > Export panel data into a DB file ]] -function CacheQueryPanel(bExp) +function CacheQueryInventory() local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then LogInstance("Missing table builder"); return nil end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then LogInstance("Missing table definition"); return nil end if(not IsHere(libCache[defTab.Name])) then LogInstance("Missing cache allocated "..GetReport(defTab.Name)); return nil end - local keyPan , sFunc = GetOpVar("HASH_USER_PANEL"), "CacheQueryPanel" - local stPanel, qsKey = libCache[keyPan], GetOpVar("FORM_KEYSTMT") - if(IsHere(stPanel) and IsHere(stPanel.Size)) then LogInstance("Retrieve") - if(stPanel.Size <= 0) then stPanel = nil else - stPanel = makTab:TimerRestart(sFunc, keyPan) end - return stPanel + local keyPan , sFunc = GetOpVar("HASH_USER_PANEL"), "CacheQueryInventory" + local stPan, qsKey = libCache[keyPan], GetOpVar("FORM_KEYSTMT") + if(IsHere(stPan) and IsHere(stPan.Size)) then LogInstance("Retrieve") + if(stPan.Size <= 0) then stPan = nil else + stPan = makTab:TimerRestart(sFunc, keyPan) end + return stPan else local coMo = makTab:GetColumnName(1) local coTy = makTab:GetColumnName(2) local coNm = makTab:GetColumnName(3) local sMoDB = GetOpVar("MODE_DATABASE") - libCache[keyPan] = {}; stPanel = libCache[keyPan] + libCache[keyPan] = {}; stPan = libCache[keyPan] if(sMoDB == "SQL") then local qIndx = qsKey:format(sFunc,"") local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then @@ -3489,23 +3455,18 @@ function CacheQueryPanel(bExp) LogInstance("SQL exec error "..GetReport(sqlLastError())); return nil end if(not IsHere(qData) or IsEmpty(qData)) then LogInstance("No data found "..GetReport(Q)); return nil end - stPanel.Size = #qData -- Store the amount of SQL rows - for iCnt = 1, stPanel.Size do local qRow = qData[iCnt] - stPanel[iCnt] = {M = qRow[coMo], T = qRow[coTy], N = qRow[coNm]} - end - SortCategory(stPanel) - DumpCategory(stPanel, sFunc, bExp) + stPan.Size = #qData -- Store the amount of SQL rows + for iCnt = 1, stPan.Size do local qRow = qData[iCnt] + stPan[iCnt] = {M = qRow[coMo], T = qRow[coTy], N = qRow[coNm]} + end; SortCategory(stPan) return makTab:TimerAttach(sFunc, keyPan) elseif(sMoDB == "LUA") then - local tCache, stPanel = libCache[defTab.Name], {Size = 0} + local tCache, stPan = libCache[defTab.Name], {Size = 0} for mod, rec in pairs(tCache) do - local iCnt = stPanel.Size; iCnt = iCnt + 1 - stPanel[iCnt] = {M = rec.Slot, T = rec.Type, N = rec.Name} - stPanel.Size = iCnt -- Store the amount of rows - end - SortCategory(stPanel) - DumpCategory(stPanel, sFunc, bExp) - return stPanel + local iCnt = stPan.Size; iCnt = iCnt + 1 + stPan[iCnt] = {M = rec.Slot, T = rec.Type, N = rec.Name} + stPan.Size = iCnt -- Store the amount of rows + end; SortCategory(stPan); return stPan else LogInstance("Unsupported mode "..GetReport(sMoDB)); return nil end end end @@ -3592,6 +3553,38 @@ end ---------------------- EXPORT -------------------------------- +--[[ + * Export tool inventory contents as a sync file +]] +function ExportInventory() + if(SERVER) then LogInstance("Working on server"); return true end + local stPan = asmlib.CacheQueryInventory(); if(not stPan) then + asmlib.LogInstance("Items missing"); return false end + local sFunc = "ExportInventory" + local sMiss = GetOpVar("MISS_NOAV") + local sBase = GetOpVar("DIRPATH_BAS") + local sExpo = GetOpVar("DIRPATH_EXP") + local sMoDB = GetOpVar("MODE_DATABASE") + local symSep, cT = GetOpVar("OPSYM_SEPARATOR") + if(not fileExists(sBase, "DATA")) then fileCreateDir(sBase) end + local fName = (sBase..sExpo..GetOpVar("NAME_LIBRARY").."_db.txt") + local F = fileOpen(fName, "wb" ,"DATA"), sMiss; if(not F) then + LogInstance("Open fail "..GetReport(fName)); return false end + F:Write("# "..sFunc..":("..stPan.Size..") "..GetDateTime().." [ "..sMoDB.." ]\n") + for iCnt = 1, stPan.Size do + local vRec = stPan[iCnt] + local sM, sT, sN = vRec.M, vRec.T, vRec.N + if(not cT or cT ~= sT) then -- Category has been changed + local sW = tostring(WorkshopID(sT) or sMiss) + F:Write("# Categorize("..sT.."): "..sW) + F:Write("\n"); cT = sT -- Cache category name + end -- Otherwise just write down the piece active point + F:Write("\""..sM.."\""..symSep) + F:Write("\""..sT.."\""..symSep) + F:Write("\""..sN.."\""); F:Write("\n") + end; F:Flush(); F:Close(); return true +end + --[[ * Save/Load the category generation * vEq > Amount of internal comment depth diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 1e304bc7..b97b8c8e 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2383,7 +2383,6 @@ function TOOL.BuildCPanel(CPanel) asmlib.SetAsmConvar(nil, "flipoverid") -- Reset flip-over mode on pickup CPanel:ClearControls(); CPanel:DockPadding(5, 0, 5, 10) local drmSkin, sLog = CPanel:GetSkin(), "*TOOL.BuildCPanel" - local devmode = asmlib.GetAsmConvar("devmode", "BUL") local nMaxLin = asmlib.GetAsmConvar("maxlinear","FLT") local iMaxDec = asmlib.GetAsmConvar("maxmenupr","INT") local sCall, pItem, sName, aData = "_cpan" -- pItem is the current panel created @@ -2397,7 +2396,7 @@ function TOOL.BuildCPanel(CPanel) pComboPresets:AddConVar(val) end CPanel:AddItem(pComboPresets) - local qPanel = asmlib.CacheQueryPanel(devmode); if(not qPanel) then + local qPanel = asmlib.CacheQueryInventory(); if(not qPanel) then asmlib.LogInstance("Panel population empty",sLog); return end local makTab = asmlib.GetBuilderNick("PIECES"); if(not asmlib.IsHere(makTab)) then asmlib.LogInstance("Missing builder table",sLog); return end From a724751d8c822595fc6f89ccc06a52a735816848 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Mon, 18 Nov 2024 18:27:19 +0200 Subject: [PATCH 096/114] Fixed: Inventory export runtime errors with library self-reference Fixed: Export BD convar is not reset when exporting inventory Added: More items in scene builder --- lua/autorun/trackassembly_init.lua | 38 +++++++++++++++++++++++++++--- lua/trackassembly/trackasmlib.lua | 4 ++-- readme.md | 1 + 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 629e1411..ea75e65d 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -1273,7 +1273,8 @@ if(CLIENT) then pnButton.DoClick = function(pnSelf) asmlib.LogInstance("Click "..asmlib.GetReport(pnSelf:GetText()), sLog..".Button") if(asmlib.GetAsmConvar("exportdb", "BUL")) then - if(inputIsKeyDown(KEY_LSHIFT)) then + asmlib.SetAsmConvar(oPly, "exportdb", 0) + if(inputIsKeyDown(KEY_LSHIFT) and asmlib.GetAsmConvar("devmode" ,"BUL")) then if(not asmlib.ExportInventory()) then asmlib.LogInstance("Export invalid", sLog..".Button"); return nil end else @@ -1283,7 +1284,6 @@ if(CLIENT) then asmlib.ExportDSV("ADDITIONS", fPref, nil, true) asmlib.ExportDSV("PHYSPROPERTIES", fPref, nil, true) asmlib.LogInstance("Export data", sLog..".Button") - asmlib.SetAsmConvar(oPly, "exportdb", 0) end else local fW = asmlib.GetOpVar("FORM_GITWIKI") @@ -1292,10 +1292,10 @@ if(CLIENT) then end pnButton.DoRightClick = function(pnSelf) if(asmlib.GetAsmConvar("exportdb", "BUL")) then + asmlib.SetAsmConvar(oPly, "exportdb", 0) local bS, vOut = asmlib.DoAction("OPEN_EXTERNDB"); if(not bS) then asmlib.LogInstance("Open manager:"..vOut, sLog..".Button"); return nil end asmlib.LogInstance("Open manager", sLog..".Button") - asmlib.SetAsmConvar(oPly, "exportdb", 0) else local fW = asmlib.GetOpVar("FORM_GITWIKI") guiOpenURL(fW:format("Additional-features")) @@ -4779,6 +4779,38 @@ else PIECES:Record({"models/scene_building/sewer_system/arch_small_door1.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) PIECES:Record({"models/scene_building/sewer_system/arch_small_door2.mdl", "#", "#", 1, "", "0, 47,0", "0,90,0"}) PIECES:Record({"models/scene_building/sewer_system/arch_small_door2.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/beam_door.mdl", "#", "#", 1, "", "0, 6,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/beam_door.mdl", "#", "#", 2, "", "0,-6,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/beam_hall.mdl", "#", "#", 1, "", "0, 45,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/beam_hall.mdl", "#", "#", 2, "", "0,-45,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/beam_hall_sky.mdl", "#", "#", 1, "", "0, 44,-10", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/beam_hall_sky.mdl", "#", "#", 2, "", "0,-44,-10", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/beam_hall_sky_dip.mdl", "#", "#", 1, "", "0, 44,4", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/beam_hall_sky_dip.mdl", "#", "#", 2, "", "0,-44,4", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/comp_roundroom.mdl", "#", "#", 1, "", "-20,128,-26", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/comp_roundroom.mdl", "#", "#", 2, "", "-94,-28, 14", "0,-180,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door_med.mdl", "#", "#", 1, "", "0, 15,0", "0, 90,0", ""}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door_med.mdl", "#", "#", 2, "", "0,-15,0", "0,-90,0", ""}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_2door.mdl", "#", "#", 1, "", "145,0,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_2door.mdl", "#", "#", 2, "", "0,-175,-20", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_2door.mdl", "#", "#", 3, "", "-145,0,0", "0,-180,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_2door.mdl", "#", "#", 4, "", "0,175,-20", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_2sec.mdl", "#", "#", 1, "", "171,28,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_2sec.mdl", "#", "#", 2, "", "-28,-171,0","0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_3sec.mdl", "#", "#", 1, "", "0,-172,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_3sec.mdl", "#", "#", 2, "", "-200,28,0", "0,-180,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_3sec.mdl", "#", "#", 3, "", "200,28,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_big_bend.mdl", "#", "#", 1, "", "8.2,-121,-4", "0,-90,0", ""}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_big_bend.mdl", "#", "#", 2, "", "-49.604,18.618,-4", "0,135,0", ""}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_door.mdl", "#", "#", 1, "", "-145,0,0", "0,-180,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_door.mdl", "#", "#", 2, "", "0,175,-20", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_door.mdl", "#", "#", 3, "", "0,-175,-20", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_ent.mdl", "#", "#", 1, "", "0, 59,-16", "0, 90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_ent.mdl", "#", "#", 2, "", "0,-59,-20", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_ent_gate.mdl", "#", "#", 1, "", "0, 59,-16", "0, 90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_ent_gate.mdl", "#", "#", 2, "", "0,-59,-20", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_long.mdl", "#", "#", 1, "", "0, 115,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_long.mdl", "#", "#", 2, "", "0,-115,0", "0,-90,0"}) if(gsMoDB == "SQL") then sqlCommit() end end diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 0c149414..bac135be 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3558,8 +3558,8 @@ end ]] function ExportInventory() if(SERVER) then LogInstance("Working on server"); return true end - local stPan = asmlib.CacheQueryInventory(); if(not stPan) then - asmlib.LogInstance("Items missing"); return false end + local stPan = CacheQueryInventory(); if(not stPan) then + LogInstance("Items missing"); return false end local sFunc = "ExportInventory" local sMiss = GetOpVar("MISS_NOAV") local sBase = GetOpVar("DIRPATH_BAS") diff --git a/readme.md b/readme.md index 2eba778f..f2a456e6 100644 --- a/readme.md +++ b/readme.md @@ -396,6 +396,7 @@ anymore to maintain cetain track packs leading in **NO SUPPORT**, which is also * [RockMan's Fortification](https://steamcommunity.com/sharedfiles/filedetails/?id=3071058065) * [SligWolf's Suspension train](https://steamcommunity.com/sharedfiles/filedetails/?id=3297918081) [**(AUTHOR)**][ref-maintained] * [Modular City Street](https://steamcommunity.com/sharedfiles/filedetails/?id=3314861708) + * [Scene Builder](https://steamcommunity.com/sharedfiles/filedetails/?id=2233731395) #### Where are the trains/vehicles[,][ref-easter] are there any of these? Dude seriously, make them yourself, what's the point of playing Gmod then ... xD From f36b3127798313c2a5e258dfd634fdd12ba62bf3 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 19 Nov 2024 16:23:46 +0200 Subject: [PATCH 097/114] Fixed: Exporting content for sync inventory missing new added models due to the store cache Added: Automatic folder creation when requesting a path Added: Internal queries are defined in the table definition Changed: Some logs when Lua table routine handler fails Renamed: `CacheQueryInventory` to `CacheQueryTree` using inventory cached version --- data/trackassembly/trackasmlib_db.txt | 2 +- lua/autorun/trackassembly_init.lua | 39 ++- lua/trackassembly/trackasmlib.lua | 260 ++++++++++-------- .../gmod_tool/stools/trackassembly.lua | 2 +- 4 files changed, 168 insertions(+), 135 deletions(-) diff --git a/data/trackassembly/trackasmlib_db.txt b/data/trackassembly/trackasmlib_db.txt index 094f5f0e..08ba3b3b 100644 --- a/data/trackassembly/trackasmlib_db.txt +++ b/data/trackassembly/trackasmlib_db.txt @@ -1,4 +1,4 @@ -# CacheQueryInventory:(true) 20-09-10 17:47:37 [ LUA ] +# ExportSyncDB:(true) 20-09-10 17:47:37 [ LUA ] "models/alexcookie/2ft/curve/curve_90_512.mdl","AlexCookie's 2ft track pack","Curve 90 512" "models/alexcookie/2ft/misc/end1.mdl","AlexCookie's 2ft track pack","End1" "models/alexcookie/2ft/straight/straight_1024.mdl","AlexCookie's 2ft track pack","Straight 1024" diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index ea75e65d..19accf20 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.808") +asmlib.SetOpVar("TOOL_VERSION","8.809") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1275,7 +1275,7 @@ if(CLIENT) then if(asmlib.GetAsmConvar("exportdb", "BUL")) then asmlib.SetAsmConvar(oPly, "exportdb", 0) if(inputIsKeyDown(KEY_LSHIFT) and asmlib.GetAsmConvar("devmode" ,"BUL")) then - if(not asmlib.ExportInventory()) then + if(not asmlib.ExportSyncDB()) then asmlib.LogInstance("Export invalid", sLog..".Button"); return nil end else local fPref = "["..gsMoDB:lower().."-dsv]"..gsGenerPrf @@ -1769,10 +1769,13 @@ asmlib.NewTable("PIECES",{ Timer = gaTimerSet[1], Index = {{1,4,Un=true},{1},{2},{4}}, Query = { - Record = {"%s","%s","%s","%d","%s","%s","%s","%s"}, - ExportDSV = {2,3,1,4}, - ExportTypeDSV = {3,1,4}, - ExportTypeRun = {3,1,4} + ExportDSV = {O = {2,3,1,4}}, + CacheQueryPiece = {W = {{1,"%s"}}, O = {4}}, + ExportTypeDSV = {W = {{2,"%s"}}, O = {3,1,4}}, + ExportTypeRun = {W = {{2,"%s"}}, O = {3,1,4}}, + Record = {"%s","%s","%s","%d","%s","%s","%s","%s"}, + CacheQueryTree = {S = {1,2,3}, W = {{4,"%d"}}, O = {2,3,1}}, + ExportSyncDB = {S = {1,2,3}, W = {{4,"%d"}}, O = {2,3,1}} }, Trigs = { Record = function(arLine, vSrc) @@ -1813,6 +1816,14 @@ asmlib.NewTable("PIECES",{ asmlib.LogInstance("Cannot process "..asmlib.GetReport(nOffsID, snPK),vSrc); return false end stData.Size = stData.Size + 1; return true end, + ExportSyncDB = function(tCache, stPan, vSrc) + local tSort = asmlib.Arrange(tCache, "Type", "Name", "Slot"); if(not tSort) then + asmlib.LogInstance("Cannot sort cache data",vSrc); return false end + stPan.Size = tSort.Size + for iR = 1, tSort.Size do local vRec = tSort[iR] + stPan[iR] = {M = vRec.Slot, T = vRec.Type, N = vRec.Name} + end; return true + end ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() local tSort = asmlib.Arrange(tCache, "Type", "Name", "Slot") @@ -1934,9 +1945,11 @@ asmlib.NewTable("ADDITIONS",{ Timer = gaTimerSet[2], Index = {{1,4,Un=true},{1},{4}}, Query = { - Record = {"%s","%s","%s","%d","%s","%s","%d","%d","%d","%d","%d","%d"}, - ExportDSV = {1,4}, - ExportTypeDSV = {1,4} + ExportDSV = {O = {1,4}}, + SetAdditionsRun = {W = {{1,"%s"}}, O = {4}}, + CacheQueryAdditions = {W = {{1,"%s"}}, O = {4}}, + ExportTypeDSV = {W = {{1,"%s"}}, O = {1,4}}, + Record = {"%s","%s","%s","%d","%s","%s","%d","%d","%d","%d","%d","%d"} }, Cache = { Record = function(makTab, tCache, snPK, arLine, vSrc) @@ -1997,8 +2010,12 @@ asmlib.NewTable("PHYSPROPERTIES",{ Timer = gaTimerSet[3], Index = {{1,2,Un=true},{1},{2}}, Query = { - Record = {"%s","%d","%s"}, - ExportDSV = {1,2} + Record = {"%s","%d","%s"}, + ExportDSV = {O = {1,2}}, + CacheQueryProperty = { + N = {S = {2, 3}, W = {{1,"%s"}}, O = {2}}, + T = {S = {1} , W = {{2,"%s"}}, O = {1}}, + } }, Trigs = { Record = function(arLine, vSrc) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index bac135be..2f0daac3 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -258,18 +258,6 @@ function IsOther(oEnt) return false end -function IsGenericDB(sSors) - local sSors = tostring(sSors or "") - local sName = GetOpVar("TOOLNAME_PU") - local fGenc = GetOpVar("DBEXP_PREFGEN") - local fDSV = GetOpVar("DIRPATH_BAS") - if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end - local fDSV = fDSV..GetOpVar("DIRPATH_DSV") - if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end - local fForm = GetOpVar("FORM_PREFIXDSV") - return fileExists(fDSV..fForm:format(fGenc, sName..sSors), "DATA") -end - --[[ * Reports the type and actual value for one argument * Reports vararg containing many values concatenated @@ -632,10 +620,9 @@ end ----------------- INITAIALIZATION ----------------- function SetLogControl(nLines, bFile) - local bFou, sBas = IsFlag("en_logging_file", bFile), GetOpVar("DIRPATH_BAS") + local bFou = IsFlag("en_logging_file", bFile) local nMax = (tonumber(nLines) or 0); nMax = mathFloor((nMax > 0) and nMax or 0) local sMax, sFou = tostring(GetOpVar("LOG_MAXLOGS")), tostring(bFou) - if(sBas and not fileExists(sBas,"DATA")) then fileCreateDir(sBas) end SetOpVar("LOG_CURLOGS", 0); SetOpVar("LOG_MAXLOGS", nMax) SetOpVar("LOG_FORMLID", "%"..(tostring(nMax)):len().."d") LogInstance("("..sMax..","..sFou..")") @@ -647,8 +634,7 @@ function SettingsLogs(sHash) LogInstance("Invalid "..GetReport(sKey)); return false end local tLogs, lbNam = GetOpVar("LOG_"..sKey), GetOpVar("NAME_LIBRARY") if(not tLogs) then LogInstance("Missing "..GetReport(sKey)); return false end - local sBas, sSet = GetOpVar("DIRPATH_BAS"), GetOpVar("DIRPATH_SET") - local fName = (sBas..sSet..lbNam.."_sl"..sKey:lower()..".txt") + local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), lbNam.."_sl"..sKey:lower()) if(not fileExists(fName, "DATA")) then LogInstance("Discard "..GetReport(sKey, fName)); return false end local S = fileOpen(fName, "rb", "DATA"); tableEmpty(tLogs) @@ -3323,10 +3309,9 @@ function CacheQueryPiece(sModel) LogInstance("Save >> "..GetReport(sModel)) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 local qIndx = qsKey:format(sFunc, "") - local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then - Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end - if(not Q) then -- Query creation has failed so no need to build again - LogInstance("Build statement failed "..GetReport(qIndx, qModel)); return nil end + local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc] + Q = makTab:Select():Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, qModel) end + if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx, qModel)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3371,10 +3356,9 @@ function CacheQueryAdditions(sModel) LogInstance("Save >> "..GetReport(sModel)) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 local qIndx = qsKey:format(sFunc, "") - local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then - Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end - if(not Q) then - LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end + local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc) + Q = makTab:Select():Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, qModel) end + if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3426,14 +3410,14 @@ end --[[ * Caches the data needed to populate the CPanel tree ]] -function CacheQueryInventory() +function CacheQueryTree() local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then LogInstance("Missing table builder"); return nil end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then LogInstance("Missing table definition"); return nil end if(not IsHere(libCache[defTab.Name])) then LogInstance("Missing cache allocated "..GetReport(defTab.Name)); return nil end - local keyPan , sFunc = GetOpVar("HASH_USER_PANEL"), "CacheQueryInventory" + local keyPan , sFunc = GetOpVar("HASH_USER_PANEL"), "CacheQueryTree" local stPan, qsKey = libCache[keyPan], GetOpVar("FORM_KEYSTMT") if(IsHere(stPan) and IsHere(stPan.Size)) then LogInstance("Retrieve") if(stPan.Size <= 0) then stPan = nil else @@ -3447,10 +3431,9 @@ function CacheQueryInventory() libCache[keyPan] = {}; stPan = libCache[keyPan] if(sMoDB == "SQL") then local qIndx = qsKey:format(sFunc,"") - local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then - Q = makTab:Select(1,2,3):Where({4,"%d"}):Order(2,1):Store(qIndx):Get(qIndx, 1) end - if(not Q) then - LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end + local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc] + Q = makTab:Select(unpack(tQ.S)):Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, 1) end + if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError())); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3501,10 +3484,9 @@ function CacheQueryProperty(sType) arNames[sType] = {}; stName = arNames[sType]; stName.Size = 0 local qType = makTab:Match(sType,1,true) local qIndx = qsKey:format(sFunc,keyName) - local Q = makTab:Get(qIndx, qType); if(not IsHere(Q)) then - Q = makTab:Select(2, 3):Where({1,"%s"}):Order(2):Store(qIndx):Get(qIndx, qType) end - if(not Q) then - LogInstance("Build statement failed "..GetReport(qIndx,qType)); return nil end + local Q = makTab:Get(qIndx, qType); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc].N + Q = makTab:Select(unpack(tQ.S)):Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, qType) end + if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,qType)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3533,10 +3515,9 @@ function CacheQueryProperty(sType) if(sMoDB == "SQL") then tCache[keyType] = {}; stType = tCache[keyType]; stType.Size = 0 local qIndx = qsKey:format(sFunc,keyType) - local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then - Q = makTab:Select(1):Where({2,"%d"}):Order(1):Store(qIndx):Get(qIndx, 1) end - if(not Q) then - LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end + local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc].T + Q = makTab:Select(unpack(tQ.S)):Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, 1) end + if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,1)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return nil end if(not IsHere(qData) or IsEmpty(qData)) then @@ -3554,25 +3535,84 @@ end ---------------------- EXPORT -------------------------------- --[[ - * Export tool inventory contents as a sync file + * Creates the directories needed and concatenates the + * file path to be ready for opening the file object ]] -function ExportInventory() +function GetLibraryPath(sT, sN) + local fName = GetOpVar("DIRPATH_BAS") + if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end + fName = fName..tostring(sT or "") -- Target folder in `trackassembly/` + if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end + if(not sN) then return fName end -- Create the folders only + return fName..tostring(sN or "")..".txt" -- Concatenate file name +end + +--[[ + * Checks whenever a generic database is present + * When present uses it instead of importing DSV + * sSors > The source file name being checked +]] +function IsGenericDB(sSors) + local sSors = tostring(sSors or "") + local sName = GetOpVar("TOOLNAME_PU") + local fGenc = GetOpVar("DBEXP_PREFGEN") + local fName = GetLibraryPath(GetOpVar("DIRPATH_DSV"), + GetOpVar("FORM_PREFIXDSV"):format(fGenc, sName..sSors)) + return fileExists(fName, "DATA") +end + +--[[ + * Export database inventory contents as a sync file + * The result of this function is used to sync contents + * between addons and show what is missing or discontinued +]] +function ExportSyncDB() if(SERVER) then LogInstance("Working on server"); return true end - local stPan = CacheQueryInventory(); if(not stPan) then - LogInstance("Items missing"); return false end - local sFunc = "ExportInventory" local sMiss = GetOpVar("MISS_NOAV") - local sBase = GetOpVar("DIRPATH_BAS") - local sExpo = GetOpVar("DIRPATH_EXP") local sMoDB = GetOpVar("MODE_DATABASE") local symSep, cT = GetOpVar("OPSYM_SEPARATOR") - if(not fileExists(sBase, "DATA")) then fileCreateDir(sBase) end - local fName = (sBase..sExpo..GetOpVar("NAME_LIBRARY").."_db.txt") - local F = fileOpen(fName, "wb" ,"DATA"), sMiss; if(not F) then + local sFunc, stPan = "ExportSyncDB", {Size = 0} + local fName = GetLibraryPath(GetOpVar("DIRPATH_EXP"), + GetOpVar("NAME_LIBRARY").."_db") + local F = fileOpen(fName, "wb" ,"DATA"); if(not F) then LogInstance("Open fail "..GetReport(fName)); return false end - F:Write("# "..sFunc..":("..stPan.Size..") "..GetDateTime().." [ "..sMoDB.." ]\n") - for iCnt = 1, stPan.Size do - local vRec = stPan[iCnt] + F:Write("# "..sFunc..": "..GetDateTime().." [ "..sMoDB.." ]\n") + if(sMoDB == "SQL") then + local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then + LogInstance("Missing table builder"); F:Flush(); F:Close(); return false end + local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then + LogInstance("Missing table definition"); F:Flush(); F:Close(); return false end + local qsKey = GetOpVar("FORM_KEYSTMT") + local qIndx = qsKey:format(sFunc, "") + local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc] + Q = makTab:Select(unpack(tQ.S)):Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, 1) end + if(not IsHere(Q)) then LogInstance("Build statement failed"); F:Flush(); F:Close(); return false end + local qData = sqlQuery(Q); if(not qData and isbool(qData)) then F:Flush(); F:Close() + LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return false end + if(not IsHere(qData) or IsEmpty(qData)) then F:Flush(); F:Close() + LogInstance("No data found "..GetReport(Q)); return false end + local coMo = makTab:GetColumnName(1); stPan.Size = #qData + local coTy = makTab:GetColumnName(2) + local coNm = makTab:GetColumnName(3) + F:Write("# Query("..stPan.Size.."):<"..Q..">\n") + for iR = 1, stPan.Size do local vRec = qData[iR] + stPan[iR] = {M = vRec[coMo], T = vRec[coTy], N = vRec[coNm]} end + elseif(sMoDB == "LUA") then + local fsLog = GetOpVar("FORM_LOGSOURCE") + local ssLog = "*"..fsLog:format(defTab.Nick,sFunc,"Cache") + local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then + LogInstance("Cache missing"); F:Flush(); F:Close(); return false end + local bS, sR = pcall(defTab.Cache[sFunc], tCache, stPan, ssLog) + if(not bS) then F:Flush(); F:Close() + LogInstance("Cache manager error: "..sR); return false end + if(not sR) then F:Flush(); F:Close() + LogInstance("Cache routine fail"); return false end + else + LogInstance("Unsupported mode "..GetReport(sMoDB, fName)) + F:Flush(); F:Close(); return false + end + for iR = 1, stPan.Size do + local vRec = stPan[iR] local sM, sT, sN = vRec.M, vRec.T, vRec.N if(not cT or cT ~= sT) then -- Category has been changed local sW = tostring(WorkshopID(sT) or sMiss) @@ -3605,12 +3645,10 @@ function ExportCategory(vEq, tData, sPref, bExp) LogInstance(sHew.." User disabled"); return true end if(IsGenericDB("CATEGORY")) then LogInstance(sHew.." Generic database",sTable); return true end - local fName, sFunc = GetOpVar("DIRPATH_BAS"), "ExportCategory" - if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) - if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") - fName = fName..fForm:format(fPref, sTool.."CATEGORY") + local fName, sFunc = GetLibraryPath( + (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")), + fForm:format(fPref, sTool.."CATEGORY")), "ExportCategory" local F = fileOpen(fName, "wb", "DATA") if(not F) then LogInstance(sHew.." Open fail: "..fName); return false end local sEq, nLen, sMoDB = ("="):rep(nEq), (nEq+2), GetOpVar("MODE_DATABASE") @@ -3707,25 +3745,20 @@ function ExportDSV(sTable, sPref, sDelim, bExp) LogInstance(sHew.." Missing table builder",sTable); return false end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then LogInstance(sHew.." Missing table definition",sTable); return nil end - local fName = GetOpVar("DIRPATH_BAS") - if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) - if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - local fForm = GetOpVar("FORM_PREFIXDSV") - fName = fName..fForm:format(fPref, defTab.Name) + local fName = GetLibraryPath( + (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")), + GetOpVar("FORM_PREFIXDSV"):format(fPref, defTab.Name)) local F = fileOpen(fName, "wb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end local sDelim, sFunc = tostring(sDelim or "\t"):sub(1,1), "ExportDSV" - local fsLog = GetOpVar("FORM_LOGSOURCE") -- Read the log source format - local ssLog = "*"..fsLog:format(defTab.Nick,sFunc,"%s") local sMoDB = GetOpVar("MODE_DATABASE") -- Read database mode F:Write("#1 "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") F:Write("#2 "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") local qIndx = qsKey:format(sFunc, sTable) - local Q = makTab:Get(qIndx); if(not IsHere(Q)) then - Q = makTab:Select():Order(unpack(defTab.Query[sFunc])):Store(qIndx):Get(qIndx) end + local Q = makTab:Get(qIndx); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc] + Q = makTab:Select():Order(unpack(tQ.O)):Store(qIndx):Get(qIndx) end if(not IsHere(Q)) then F:Flush(); F:Close() LogInstance(sHew.." Build statement failed",sTable); return false end F:Write("#3 Query:<"..Q..">\n") @@ -3738,11 +3771,13 @@ function ExportDSV(sTable, sPref, sDelim, bExp) function(iCT, sCT, vCT) return makTab:Match(vCT,iCT,true,"\"",true) end).."\n") end -- Matching will not crash as it is matched during insertion elseif(sMoDB == "LUA") then + local fsLog = GetOpVar("FORM_LOGSOURCE") -- Read the log source format + local ssLog = "*"..fsLog:format(defTab.Nick,sFunc,"Cache") local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then F:Flush(); F:Close() LogInstance(sHew.." Cache missing",sTable); return false end - local bS, sR = pcall(defTab.Cache[sFunc], F, makTab, tCache, fPref, sDelim, ssLog:format("Cache")) + local bS, sR = pcall(defTab.Cache[sFunc], F, makTab, tCache, fPref, sDelim, ssLog) if(not bS) then F:Flush(); F:Close() - LogInstance(sHew.." Cache manager fail for "..sR,sTable); return false end + LogInstance(sHew.." Cache manager error: "..sR,sTable); return false end if(not sR) then F:Flush(); F:Close() LogInstance(sHew.." Cache routine fail",sTable); return false end else F:Flush(); F:Close(); LogInstance(sHew.." Unsupported mode "..GetReport(sMoDB, fName),sTable); return false end @@ -3818,12 +3853,9 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return false end local defTab, iD = makTab:GetDefinition(), makTab:GetColumnID("LINEID") - local fDSV, sDelim = GetOpVar("DIRPATH_BAS"), tostring(sDelim or "\t"):sub(1,1) - if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end - local fDSV = fDSV..GetOpVar("DIRPATH_DSV") - if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end - local fForm, fData = GetOpVar("FORM_PREFIXDSV"), {} - local fName = fDSV..fForm:format(fPref, defTab.Name) + local sDelim, fData = tostring(sDelim or "\t"):sub(1,1), {} + local fName = GetLibraryPath(GetOpVar("DIRPATH_DSV"), + GetOpVar("FORM_PREFIXDSV"):format(fPref, defTab.Name)) if(fileExists(fName, "DATA")) then local sLine, isEOF = "", false local I = fileOpen(fName, "rb", "DATA"); if(not I) then @@ -3920,15 +3952,10 @@ function TranslateDSV(sTable, sPref, sDelim) local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return false end local defTab, sFunc = makTab:GetDefinition(), "TranslateDSV" - local fBAS = GetOpVar("DIRPATH_BAS") - if(not fileExists(fBAS,"DATA")) then fileCreateDir(fBAS) end - local fDSV = fBAS..GetOpVar("DIRPATH_DSV") - if(not fileExists(fDSV,"DATA")) then fileCreateDir(fDSV) end - local fEXP = fBAS..GetOpVar("DIRPATH_EXP") - if(not fileExists(fEXP,"DATA")) then fileCreateDir(fDSV) end - local fForm = GetOpVar("FORM_PREFIXDSV") - local sEXP = fEXP..fForm:format("[tr]"..fPref, defTab.Name) - local sDSV = fDSV..fForm:format(fPref, defTab.Name) + local sDSV = GetLibraryPath(GetOpVar("DIRPATH_DSV"), + GetOpVar("FORM_PREFIXDSV"):format(fPref, defTab.Name)) + local sDSV = GetLibraryPath(GetOpVar("DIRPATH_EXP"), + GetOpVar("FORM_PREFIXDSV"):format("[tr]"..fPref, defTab.Name)) local sDelim = tostring(sDelim or "\t"):sub(1,1) local D = fileOpen(sDSV, "rb", "DATA"); if(not D) then LogInstance(sHew.." Open fail: "..sDSV,sTable); return false end @@ -3971,13 +3998,8 @@ function RegisterDSV(sProg, sPref, sDelim, bSkip) LogInstance("Single client "..GetReport(sProg, sPref)); return true end if(IsFlag("en_dsv_datalock")) then LogInstance("User disabled "..GetReport(sProg, sPref)); return true end - local sBas = GetOpVar("DIRPATH_BAS") - if(not fileExists(sBas,"DATA")) then fileCreateDir(sBas) end - local sBas = sBas..GetOpVar("DIRPATH_SET") - if(not fileExists(sBas,"DATA")) then fileCreateDir(sBas) end - local lbNam, sMiss = GetOpVar("NAME_LIBRARY"), GetOpVar("MISS_NOAV") - local fName = (sBas..lbNam.."_dsv.txt") - local sDelim = tostring(sDelim or "\t"):sub(1,1) + local sDelim, sMiss = tostring(sDelim or "\t"):sub(1,1), GetOpVar("MISS_NOAV") + local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), GetOpVar("NAME_LIBRARY").."_dsv")) if(bSkip) then if(fileExists(fName, "DATA")) then local fPool, isEOF = {}, false @@ -4017,16 +4039,14 @@ end * sDelim > The delimiter to be used while processing the DSV list ]] function ProcessDSV(sDelim) - local sBas = GetOpVar("DIRPATH_BAS") - local sSet = GetOpVar("DIRPATH_SET") local lbNam = GetOpVar("NAME_LIBRARY") - local fName = (sBas..sSet..lbNam.."_dsv.txt") + local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXDSV") + local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), lbNam.."_dsv") + local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} + local sDsv = GetLibraryPath(GetOpVar("DIRPATH_DSV")) local F = fileOpen(fName, "rb" ,"DATA"); if(not F) then LogInstance("Open fail: "..GetReport(fName)); return false end local sLine, isEOF, sGen = "", false, GetOpVar("DBEXP_PREFGEN") - local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXDSV") - local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} - local sDv = sBas..GetOpVar("DIRPATH_DSV") while(not isEOF) do sLine, isEOF = GetStringFile(F) if(not IsBlank(sLine)) then if(not IsDisable(sLine)) then @@ -4053,8 +4073,8 @@ function ProcessDSV(sDelim) for iD = 1, tab.Size do LogInstance("Prefix "..GetReport(iD, prf, tab[iD])) end else if(CLIENT) then - if(not fileExists(sDv..fForm:format(sGen, sNt.."CATEGORY"), "DATA")) then - if(fileExists(sDv..fForm:format(prf, sNt.."CATEGORY"), "DATA")) then + if(not fileExists(sDsv..fForm:format(sGen, sNt.."CATEGORY"), "DATA")) then + if(fileExists(sDsv..fForm:format(prf, sNt.."CATEGORY"), "DATA")) then if(not ImportCategory(3, prf)) then LogInstance("Failed "..GetReport(prf, "CATEGORY")) end else LogInstance("Missing "..GetReport(prf, "CATEGORY")) end @@ -4063,8 +4083,8 @@ function ProcessDSV(sDelim) for iD = 1, #libQTable do local makTab = GetBuilderID(iD) local defTab = makTab:GetDefinition() - if(not fileExists(sDv..fForm:format(sGen, sNt..defTab.Nick), "DATA")) then - if(fileExists(sDv..fForm:format(prf, sNt..defTab.Nick), "DATA")) then + if(not fileExists(sDsv..fForm:format(sGen, sNt..defTab.Nick), "DATA")) then + if(fileExists(sDsv..fForm:format(prf, sNt..defTab.Nick), "DATA")) then if(not ImportDSV(defTab.Nick, true, prf)) then LogInstance("Failed "..GetReport(prf, defTab.Nick)) end else LogInstance("Missing "..GetReport(prf, defTab.Nick)) end @@ -4090,10 +4110,9 @@ function SetAdditionsRun(sModel, makTab, qList) local qsKey = GetOpVar("FORM_KEYSTMT") local qModel = makTab:Match(tostring(sModel or ""), 1, true) local qIndx = qsKey:format(sFunc, "ADDITIONS") - local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then - Q = makTab:Select():Where({1,"%s"}):Order(4):Store(qIndx):Get(qIndx, qModel) end - if(not IsHere(Q)) then - LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return false end + local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc] + Q = makTab:Select():Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, qModel) end + if(not IsHere(Q)) then LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return false end qData = sqlQuery(Q); if(not qData and isbool(qData)) then LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return false end elseif(sMoDB == "LUA") then @@ -4218,8 +4237,8 @@ function ExportTypeRun(sType) end local qType = makP:Match(sType, 2, true) local qIndx = qsKey:format(sFunc, "PIECES") - local Q = makP:Get(qIndx, qType); if(not IsHere(Q)) then - Q = makP:Select():Where({2,"%s"}):Order(unpack(defP.Query[sFunc])):Store(qIndx):Get(qIndx, qType) end + local Q = makP:Get(qIndx, qType); if(not IsHere(Q)) then local tQ = defP.Query[sFunc] + Q = makP:Select():Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, qType) end if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,qType),defP.Nick) fE:Flush(); fE:Close(); fS:Close(); return @@ -4240,7 +4259,7 @@ function ExportTypeRun(sType) local ssLog = "*"..fsLog:format(defP.Nick,sFunc,"%s") local bS, sR = pcall(defP.Cache[sFunc], fE, fS, sType, makP, tCache, qPieces, ssLog:format("Cache")) if(not bS) then fE:Flush(); fE:Close(); fS:Close() - LogInstance("Cache manager fail for "..sR,defP.Nick) ; return end + LogInstance("Cache manager error: "..sR,defP.Nick) ; return end if(not sR) then fE:Flush(); fE:Close(); fS:Close() LogInstance("Cache routine fail",defP.Nick) ; return end else @@ -4318,17 +4337,14 @@ function ExportTypeDSV(sType, sDelim) LogInstance("("..fPref..") Missing additions builder"); return false end local defA = makA:GetDefinition(); if(not IsHere(defA)) then LogInstance("("..fPref..") Missing additions definition"); return nil end - local sMoDB = GetOpVar("MODE_DATABASE") -- Read database mode - local fDir = GetOpVar("DIRPATH_BAS") - if(not fileExists(fDir,"DATA")) then fileCreateDir(fDir) end - local fDir = fDir..GetOpVar("DIRPATH_EXP") - if(not fileExists(fDir,"DATA")) then fileCreateDir(fDir) end - local fForm, fMon = GetOpVar("FORM_PREFIXDSV"), "["..sMoDB:lower().."-dsv]" - local fName = fDir..fForm:format(fMon..fPref, defP.Name) - local P = fileOpen(fName, "wb", "DATA"); if(not P) then + local sMoDB, fMon = GetOpVar("MODE_DATABASE"), "["..sMoDB:lower().."-dsv]" + local pNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), + GetOpVar("FORM_PREFIXDSV"):format(fMon..fPref, defP.Name)) + local aNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), + GetOpVar("FORM_PREFIXDSV"):format(fMon..fPref, defA.Name)) + local P = fileOpen(pNam, "wb", "DATA"); if(not P) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end - local fName = fDir..fForm:format(fMon..fPref, defA.Name) - local A = fileOpen(fName, "wb", "DATA"); if(not A) then + local A = fileOpen(aNam, "wb", "DATA"); if(not A) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end local sDelim, sFunc = tostring(sDelim or "\t"):sub(1,1), "ExportTypeDSV" local fsLog = GetOpVar("FORM_LOGSOURCE") -- Read the log source format @@ -4343,8 +4359,8 @@ function ExportTypeDSV(sType, sDelim) local qType = makP:Match(sType, 2, true) local qInxP = qsKey:format(sFunc, defP.Nick) local qInxA = qsKey:format(sFunc, defA.Nick) - local Q = makP:Get(qInxP, qType); if(not IsHere(Q)) then - Q = makP:Select():Where({2,"%s"}):Order(unpack(defP.Query[sFunc])):Store(qInxP):Get(qInxP, qType) end + local Q = makP:Get(qInxP, qType); if(not IsHere(Q)) then local tQ = defP.Query[sFunc] + Q = makP:Select():Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qInxP):Get(qInxP, qType) end if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") Build statement failed",defP.Nick); return false end P:Write("#3 Query:<"..Q..">\n") @@ -4359,8 +4375,8 @@ function ExportTypeDSV(sType, sDelim) rwM = (sCP == coMo and vCP or rwM) if(sCP == coLI and (tonumber(vCP) or 0) == 1) then local qrMo = makP:Match(rwM, 1, true) - local Q = makA:Get(qInxA, qrMo); if(not IsHere(Q)) then - Q = makA:Select():Where({1,"%s"}):Order(unpack(defA.Query[sFunc])):Store(qInxA):Get(qInxA, qrMo) end + local Q = makA:Get(qInxA, qrMo); if(not IsHere(Q)) then local tQ = defA.Query[sFunc] + Q = makA:Select():Where(unpack(tQ.W)):Order(unpack(tW.O)):Store(qInxA):Get(qInxA, qrMo) end if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") Build statement failed",defA.Nick); return qsNov end if(iP == 1) then A:Write("#3 Query:<"..Q..">\n") end @@ -4382,7 +4398,7 @@ function ExportTypeDSV(sType, sDelim) LogInstance("("..fPref..") Cache missing",defP.Nick) ; return false end local bS, sR = pcall(defP.Cache[sFunc], P, makP, PCache, A, makA, ACache, fPref, sDelim, ssLog:format("Cache")) if(not bS) then P:Flush(); P:Close(); A:Flush(); A:Close() - LogInstance("("..fPref..") Cache manager fail for "..sR,defP.Nick) ; return false end + LogInstance("("..fPref..") Cache manager error: "..sR,defP.Nick) ; return false end if(not sR) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") Cache routine fail",defP.Nick) ; return false end else P:Flush(); P:Close(); A:Flush(); A:Close() diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index b97b8c8e..934973ee 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2396,7 +2396,7 @@ function TOOL.BuildCPanel(CPanel) pComboPresets:AddConVar(val) end CPanel:AddItem(pComboPresets) - local qPanel = asmlib.CacheQueryInventory(); if(not qPanel) then + local qPanel = asmlib.CacheQueryTree(); if(not qPanel) then asmlib.LogInstance("Panel population empty",sLog); return end local makTab = asmlib.GetBuilderNick("PIECES"); if(not asmlib.IsHere(makTab)) then asmlib.LogInstance("Missing builder table",sLog); return end From b57db5452e62f7a729c520cc1670395c35f1f6e3 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 21 Nov 2024 13:38:29 +0200 Subject: [PATCH 098/114] Fixed: Runtime error due to missed bracket in `CacheQueryAdditions` Added: Custom columns ID option to `GetColumnList` Added: Custom columns ID option to `GetConcat` Updated: `ExportSyncDB` with better handling --- lua/autorun/trackassembly_init.lua | 42 ++++++------- lua/trackassembly/trackasmlib.lua | 97 +++++++++++++++--------------- 2 files changed, 68 insertions(+), 71 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 19accf20..92021fe4 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.809") +asmlib.SetOpVar("TOOL_VERSION","8.810") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1816,18 +1816,23 @@ asmlib.NewTable("PIECES",{ asmlib.LogInstance("Cannot process "..asmlib.GetReport(nOffsID, snPK),vSrc); return false end stData.Size = stData.Size + 1; return true end, - ExportSyncDB = function(tCache, stPan, vSrc) - local tSort = asmlib.Arrange(tCache, "Type", "Name", "Slot"); if(not tSort) then - asmlib.LogInstance("Cannot sort cache data",vSrc); return false end - stPan.Size = tSort.Size - for iR = 1, tSort.Size do local vRec = tSort[iR] - stPan[iR] = {M = vRec.Slot, T = vRec.Type, N = vRec.Name} + ExportSyncDB = function(oFile, makTab, tCache, sDelim, vSrc) + local tSort, cT = asmlib.Arrange(tCache, "Type", "Name", "Slot"), nil + if(not tSort) then asmlib.LogInstance("Cannot sort cache data",vSrc); return false end + for iS = 1, tSort.Size do local stRec = tSort[iS] + local sKey, vRec = stRec.Key, stRec.Rec + if(not cT or cT ~= vRec.Type) then cT = vRec.Type + local sW = tostring(WorkshopID(cT) or sMiss) + oFile:Write("# Categorize("..cT.."): "..sW.."\n") + end + oFile:Write(makTab:Match(vRec.Slot,1,true,"\"")..sDelim) + oFile:Write(makTab:Match(vRec.Type,2,true,"\"")..sDelim) + oFile:Write(makTab:Match(vRec.Name,3,true,"\"")); oFile:Write("\n") end; return true end ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() - local tSort = asmlib.Arrange(tCache, "Type", "Name", "Slot") - if(not tSort) then oFile:Flush(); oFile:Close() + local tSort = asmlib.Arrange(tCache, "Type", "Name", "Slot"); if(not tSort) then asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end local noSQL = asmlib.GetOpVar("MISS_NOSQL") local symOff = asmlib.GetOpVar("OPSYM_DISABLE") @@ -1852,8 +1857,7 @@ asmlib.NewTable("PIECES",{ end; return true end, ExportTypeDSV = function(fP, makP, PCache, fA, makA, ACache, fPref, sDelim, vSrc) - local tSort = asmlib.Arrange(PCache, "Name", "Slot") - if(not tSort) then fP:Flush(); fP:Close(); fA:Flush(); fA:Close() + local tSort = asmlib.Arrange(PCache, "Name", "Slot"); if(not tSort) then asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end local defP, defA = makP:GetDefinition(), makA:GetDefinition() local noSQL = asmlib.GetOpVar("MISS_NOSQL") @@ -1902,9 +1906,7 @@ asmlib.NewTable("PIECES",{ if(rec.Type == sType) then local iID, tOffs = 1, rec.Offs -- Start from the first point local rPOA = tOffs[iID]; if(not asmlib.IsHere(rPOA)) then - asmlib.LogInstance("Missing point ID "..asmlib.GetReport(iID, rec.Slot),vSrc) - fE:Flush(); fE:Close(); fS:Close(); return false - end + asmlib.LogInstance("Missing point ID "..asmlib.GetReport(iID, rec.Slot),vSrc) return false end for iID = 1, rec.Size do iCnt = (iCnt + 1); qPieces[iCnt] = {} -- Allocate row memory local qRow = qPieces[iCnt]; rPOA = tOffs[iID] @@ -1920,10 +1922,8 @@ asmlib.NewTable("PIECES",{ end end end -- Must be the same format as returned from SQL - local tSort = asmlib.Arrange(qPieces, coNm, coMo, coLn) - if(not tSort) then - LogInstance("Sort cache mismatch",vSrc) - fE:Flush(); fE:Close(); fS:Close(); return false + local tSort = asmlib.Arrange(qPieces, coNm, coMo, coLn); if(not tSort) then + LogInstance("Sort cache mismatch",vSrc); return false end; tableEmpty(qPieces) for iD = 1, tSort.Size do qPieces[iD] = tSort[iD].Rec end asmlib.LogInstance("Sorted rows count "..asmlib.GetReport(tSort.Size, sType),vSrc) @@ -2049,13 +2049,13 @@ asmlib.NewTable("PHYSPROPERTIES",{ local pT = asmlib.GetOpVar("HASH_PROPERTY_TYPES") local pN = asmlib.GetOpVar("HASH_PROPERTY_NAMES") local tTypes, tNames, tT = tCache[pT], tCache[pN], {} - if(not (tTypes or tNames)) then oF:Flush(); oF:Close() + if(not (tTypes or tNames)) then asmlib.LogInstance("("..fPref..") No data found",vSrc); return false end for iD = 1, tTypes.Size do tableInsert(tT, tTypes[iD]) end - local tS = asmlib.Arrange(tT); if(not tS) then oF:Flush(); oF:Close() + local tS = asmlib.Arrange(tT); if(not tS) then asmlib.LogInstance("("..fPref..") Cannot sort cache data",vSrc); return false end for iS = 1, tS.Size do local sT = tS[iS].Rec - local tProp = tNames[sT]; if(not tProp) then oF:Flush(); oF:Close() + local tProp = tNames[sT]; if(not tProp) then asmlib.LogInstance("("..fPref..") Missing index "..asmlib.GetReport(iS, sT),vSrc); return false end for iP = 1, tProp.Size do local sP = tProp[iP] oF:Write(defTab.Name..sDelim..makTab:Match(sT,1,true,"\"").. diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 2f0daac3..f46cbf97 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -2901,15 +2901,19 @@ function NewTable(sTable,defTab,bDelete,bReload) end; return bStat -- Successfully validated the builder table end -- Creates table column list as string - function self:GetColumnList(sD) - if(not IsHere(sD)) then return "" end + function self:GetColumnList(sD, ...) local sD = tostring(sD or "\t"):sub(1,1); if(IsBlank(sD)) then LogInstance("Missing delimiter",tabDef.Nick); return "" end - local qtDef, sRes = self:GetDefinition(), sD - for iCnt = 1, qtDef.Size do - local sCon = ((iCnt ~= qtDef.Size) and sD or "") - local sVac = tostring(qtDef[iCnt][1] or "") - sRes = (sRes..sVac..sCon) + local nA, tA = select("#", ...), nil + local qtDef, sRes = self:GetDefinition(), "" + if(nA > 0) then tA = {...} else tA, nA = {}, qtDef.Size + for iD = 1, nA do tableInsert(tA, iD) end end + for iD = 1, nA do local iC = tA[iD] + local tC = qtDef[iC]; if(not tC) then + LogInstance("Column missing "..GetReport(iD,iC,nA), tabDef.Nick); return nil end + local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then + LogInstance("Column name mismatch "..GetReport(iD,iC,nA),tabDef.Nick); return nil end + local sCon = ((iD ~= nA) and sD or ""); sRes = (sRes..sC..sCon) end; return sRes end -- Internal type matching @@ -2949,20 +2953,22 @@ function NewTable(sTable,defTab,bDelete,bReload) else LogInstance("Invalid column type "..GetReport(tyCol),tabDef.Nick); return nil end; return snOut end - function self:GetConcat(tLine, sDelim, fFoo) + function self:GetConcat(tLine, sDelim, fFoo, ...) local qtDef, sLine = self:GetDefinition(), ""; if(not istable(tLine)) then LogInstance("Source not table "..GetReport(tLine, sDelim), tabDef.Nick); return nil end - local sDelim = tostring(sDelim or "\t"):sub(1,1) - for iCnt = 1, qtDef.Size do - local tC = qtDef[iCnt]; if(not tC) then - LogInstance("Column missing "..GetReport(iCnt, qtDef.Size), tabDef.Nick); return nil end + local sDelim, nA, tA = tostring(sDelim or "\t"):sub(1,1), select("#", ...), nil + if(nA > 0) then tA = {...} else tA, nA = {}, qtDef.Size + for iD = 1, nA do tableInsert(tA, iD) end end + for iD = 1, nA do local iC = tA[iD] + local tC = qtDef[iC]; if(not tC) then + LogInstance("Column missing "..GetReport(iD,iC,nA), tabDef.Nick); return nil end local sC = tostring(tC[1] or ""); if(IsBlank(sC)) then - LogInstance("Column name mismatch "..GetReport(iCnt, qtDef.Size),tabDef.Nick); return nil end - local vC, sD = tLine[sC], (iCnt == 1 and "" or sDelim) -- Extract the value + LogInstance("Column name mismatch "..GetReport(iD,iC,nA),tabDef.Nick); return nil end + local vC, sD = tLine[sC], (iD == 1 and "" or sDelim) -- Extract the value if(fFoo) then -- Call the conversion handler function when provided - local bS, sR = pcall(fFoo, iCnt, sC, vC); if(not bS) then - LogInstance("Value convert error "..GetReport(iCnt, qtDef.Size, vC)..": "..sR,tabDef.Nick); return nil end - vC = sR -- The value is converted and updaed successfully + local bS, sR = pcall(fFoo, iC, sC, vC, iD, nA); if(not bS) then + LogInstance("Value convert error "..GetReport(iD,iC,vC,nA)..": "..sR,tabDef.Nick); return nil end + vC = sR -- The value is converted and updated successfully end; sLine = sLine..sD..tostring(vC or "") end; return sLine end @@ -3356,7 +3362,7 @@ function CacheQueryAdditions(sModel) LogInstance("Save >> "..GetReport(sModel)) tCache[sModel] = {}; stData = tCache[sModel]; stData.Size = 0 local qIndx = qsKey:format(sFunc, "") - local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc) + local Q = makTab:Get(qIndx, qModel); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc] Q = makTab:Select():Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, qModel) end if(not Q) then LogInstance("Build statement failed "..GetReport(qIndx,qModel)); return nil end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then @@ -3566,22 +3572,23 @@ end * The result of this function is used to sync contents * between addons and show what is missing or discontinued ]] -function ExportSyncDB() +function ExportSyncDB(sDelim) if(SERVER) then LogInstance("Working on server"); return true end - local sMiss = GetOpVar("MISS_NOAV") local sMoDB = GetOpVar("MODE_DATABASE") - local symSep, cT = GetOpVar("OPSYM_SEPARATOR") - local sFunc, stPan = "ExportSyncDB", {Size = 0} + local symSep = GetOpVar("OPSYM_SEPARATOR") + local sDelim = tostring(sDelim or "\t"):sub(1,1) + local sMiss, sFunc = GetOpVar("MISS_NOAV"), "ExportSyncDB" local fName = GetLibraryPath(GetOpVar("DIRPATH_EXP"), GetOpVar("NAME_LIBRARY").."_db") + local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then + LogInstance("Missing table builder"); return false end + local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then + LogInstance("Missing table definition"); return false end local F = fileOpen(fName, "wb" ,"DATA"); if(not F) then LogInstance("Open fail "..GetReport(fName)); return false end F:Write("# "..sFunc..": "..GetDateTime().." [ "..sMoDB.." ]\n") + F:Write("# "..defTab.Name..":("..makTab:GetColumnList(nil,1,2,3)..")\n") if(sMoDB == "SQL") then - local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then - LogInstance("Missing table builder"); F:Flush(); F:Close(); return false end - local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then - LogInstance("Missing table definition"); F:Flush(); F:Close(); return false end local qsKey = GetOpVar("FORM_KEYSTMT") local qIndx = qsKey:format(sFunc, "") local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc] @@ -3591,18 +3598,21 @@ function ExportSyncDB() LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return false end if(not IsHere(qData) or IsEmpty(qData)) then F:Flush(); F:Close() LogInstance("No data found "..GetReport(Q)); return false end - local coMo = makTab:GetColumnName(1); stPan.Size = #qData - local coTy = makTab:GetColumnName(2) - local coNm = makTab:GetColumnName(3) - F:Write("# Query("..stPan.Size.."):<"..Q..">\n") - for iR = 1, stPan.Size do local vRec = qData[iR] - stPan[iR] = {M = vRec[coMo], T = vRec[coTy], N = vRec[coNm]} end + stPan.Size = #qData; F:Write("# Query("..stPan.Size.."):<"..Q..">\n") + local coTy, cT = makTab:GetColumnName(2), nil + for iD = 1, #qData do local vRow = qData[iD] + if(not cT or cT ~= vRow[coTy]) then cT = vRow[coTy] + local sW = tostring(WorkshopID(cT) or sMiss) + F:Write("# Categorize("..cT.."): "..sW.."\n") + end; F:Write(makTab:GetConcat(vRow, sDelim, + function(iCT, sCT, vCT) return makTab:Match(vCT,iCT,true,"\"",true) end).."\n") + end elseif(sMoDB == "LUA") then local fsLog = GetOpVar("FORM_LOGSOURCE") local ssLog = "*"..fsLog:format(defTab.Nick,sFunc,"Cache") local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then LogInstance("Cache missing"); F:Flush(); F:Close(); return false end - local bS, sR = pcall(defTab.Cache[sFunc], tCache, stPan, ssLog) + local bS, sR = pcall(defTab.Cache[sFunc], F, makTab, tCache, sDelim, ssLog) if(not bS) then F:Flush(); F:Close() LogInstance("Cache manager error: "..sR); return false end if(not sR) then F:Flush(); F:Close() @@ -3610,19 +3620,7 @@ function ExportSyncDB() else LogInstance("Unsupported mode "..GetReport(sMoDB, fName)) F:Flush(); F:Close(); return false - end - for iR = 1, stPan.Size do - local vRec = stPan[iR] - local sM, sT, sN = vRec.M, vRec.T, vRec.N - if(not cT or cT ~= sT) then -- Category has been changed - local sW = tostring(WorkshopID(sT) or sMiss) - F:Write("# Categorize("..sT.."): "..sW) - F:Write("\n"); cT = sT -- Cache category name - end -- Otherwise just write down the piece active point - F:Write("\""..sM.."\""..symSep) - F:Write("\""..sT.."\""..symSep) - F:Write("\""..sN.."\""); F:Write("\n") - end; F:Flush(); F:Close(); return true + end; F:Flush(); F:Close(); LogInstance("Success"); return true end --[[ @@ -3999,7 +3997,7 @@ function RegisterDSV(sProg, sPref, sDelim, bSkip) if(IsFlag("en_dsv_datalock")) then LogInstance("User disabled "..GetReport(sProg, sPref)); return true end local sDelim, sMiss = tostring(sDelim or "\t"):sub(1,1), GetOpVar("MISS_NOAV") - local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), GetOpVar("NAME_LIBRARY").."_dsv")) + local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), GetOpVar("NAME_LIBRARY").."_dsv") if(bSkip) then if(fileExists(fName, "DATA")) then local fPool, isEOF = {}, false @@ -4313,10 +4311,9 @@ function ExportTypeRun(sType) if(not isSkip) then if(isEOF) then fE:Write(sLine) else fE:Write(sLine.."\n") end end - end - fE:Write("\n"); fE:Flush() - fE:Close(); fS:Close() + end; fE:Write("\n") else LogInstance("Export content missing "..GetReport(sMoDB),defP.Nick) end + fE:Flush(); fE:Close(); fS:Close() end --[[ From aa6fc113dde9ec8e3615fe30d3d7ba07b223be7c Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 24 Nov 2024 19:06:09 +0200 Subject: [PATCH 099/114] Fixed table definition runtime error for `ExportSyncDB` Updated: General path format during export only used in `GetLibraryPath` --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 128 +++++++++++++---------------- 2 files changed, 59 insertions(+), 71 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 92021fe4..e792c20c 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -1829,7 +1829,7 @@ asmlib.NewTable("PIECES",{ oFile:Write(makTab:Match(vRec.Type,2,true,"\"")..sDelim) oFile:Write(makTab:Match(vRec.Name,3,true,"\"")); oFile:Write("\n") end; return true - end + end, ExportDSV = function(oFile, makTab, tCache, fPref, sDelim, vSrc) local defTab = makTab:GetDefinition() local tSort = asmlib.Arrange(tCache, "Type", "Name", "Slot"); if(not tSort) then diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index f46cbf97..fd2c2a8d 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3407,7 +3407,7 @@ local function SortCategory(stPanel) end -- When the category has at least one element end -- Is there is any category apply it. When available process it now else -- When there is an error in the category execution report it - LogInstance("Process "..GetReport(vRec.T, vRec.M).." [[["..tCat[vRec.T].Txt.."]]] execution error: "..vC,sLog) + LogInstance("Process "..GetReport(vRec.T, vRec.M).." [[["..tCat[vRec.T].Txt.."]]] execution error: "..vC) end -- Category factory has been executed and sub-folders are created end -- Category definition has been processed and nothing more to be done end; tableSort(stPanel, GetOpVar("VCOMPARE_SPAN")); return stPanel @@ -3544,13 +3544,14 @@ end * Creates the directories needed and concatenates the * file path to be ready for opening the file object ]] -function GetLibraryPath(sT, sN) +function GetLibraryPath(sT, sP, sN) local fName = GetOpVar("DIRPATH_BAS") if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end fName = fName..tostring(sT or "") -- Target folder in `trackassembly/` if(not fileExists(fName,"DATA")) then fileCreateDir(fName) end - if(not sN) then return fName end -- Create the folders only - return fName..tostring(sN or "")..".txt" -- Concatenate file name + if(not (sP or sN)) then return fName end -- Create the folders only + local sForm = GetOpVar("FORM_PREFIXDSV") -- Concatenate file name + return fName..sForm:format(tostring(sP or ""), tostring(sN or "")) end --[[ @@ -3560,10 +3561,8 @@ end ]] function IsGenericDB(sSors) local sSors = tostring(sSors or "") - local sName = GetOpVar("TOOLNAME_PU") - local fGenc = GetOpVar("DBEXP_PREFGEN") - local fName = GetLibraryPath(GetOpVar("DIRPATH_DSV"), - GetOpVar("FORM_PREFIXDSV"):format(fGenc, sName..sSors)) + local sName, fGenc = GetOpVar("TOOLNAME_PU"), GetOpVar("DBEXP_PREFGEN") + local fName = GetLibraryPath(GetOpVar("DIRPATH_DSV"), fGenc, sName..sSors) return fileExists(fName, "DATA") end @@ -3574,18 +3573,17 @@ end ]] function ExportSyncDB(sDelim) if(SERVER) then LogInstance("Working on server"); return true end - local sMoDB = GetOpVar("MODE_DATABASE") - local symSep = GetOpVar("OPSYM_SEPARATOR") local sDelim = tostring(sDelim or "\t"):sub(1,1) - local sMiss, sFunc = GetOpVar("MISS_NOAV"), "ExportSyncDB" - local fName = GetLibraryPath(GetOpVar("DIRPATH_EXP"), - GetOpVar("NAME_LIBRARY").."_db") + local sMiss, symSep = GetOpVar("MISS_NOAV"), GetOpVar("OPSYM_SEPARATOR") + local tHew, sMoDB = GetOpVar("PATTEM_EXCATHED"), GetOpVar("MODE_DATABASE") + local sHew, sFunc = tHew[2]:format(sMiss, symSep), "ExportSyncDB" + local fName = GetLibraryPath(GetOpVar("DIRPATH_EXP"), GetOpVar("NAME_LIBRARY"), "_db") local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then - LogInstance("Missing table builder"); return false end + LogInstance(sHew.." Missing table builder"); return false end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then - LogInstance("Missing table definition"); return false end + LogInstance(sHew.." Missing table definition"); return false end local F = fileOpen(fName, "wb" ,"DATA"); if(not F) then - LogInstance("Open fail "..GetReport(fName)); return false end + LogInstance(sHew.." Open fail "..GetReport(fName)); return false end F:Write("# "..sFunc..": "..GetDateTime().." [ "..sMoDB.." ]\n") F:Write("# "..defTab.Name..":("..makTab:GetColumnList(nil,1,2,3)..")\n") if(sMoDB == "SQL") then @@ -3593,11 +3591,11 @@ function ExportSyncDB(sDelim) local qIndx = qsKey:format(sFunc, "") local Q = makTab:Get(qIndx, 1); if(not IsHere(Q)) then local tQ = defTab.Query[sFunc] Q = makTab:Select(unpack(tQ.S)):Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qIndx):Get(qIndx, 1) end - if(not IsHere(Q)) then LogInstance("Build statement failed"); F:Flush(); F:Close(); return false end + if(not IsHere(Q)) then LogInstance(sHew.." Build statement failed"); F:Flush(); F:Close(); return false end local qData = sqlQuery(Q); if(not qData and isbool(qData)) then F:Flush(); F:Close() - LogInstance("SQL exec error "..GetReport(sqlLastError(), Q)); return false end + LogInstance(sHew.." SQL exec error "..GetReport(sqlLastError(), Q)); return false end if(not IsHere(qData) or IsEmpty(qData)) then F:Flush(); F:Close() - LogInstance("No data found "..GetReport(Q)); return false end + LogInstance(sHew.." No data found "..GetReport(Q)); return false end stPan.Size = #qData; F:Write("# Query("..stPan.Size.."):<"..Q..">\n") local coTy, cT = makTab:GetColumnName(2), nil for iD = 1, #qData do local vRow = qData[iD] @@ -3611,16 +3609,16 @@ function ExportSyncDB(sDelim) local fsLog = GetOpVar("FORM_LOGSOURCE") local ssLog = "*"..fsLog:format(defTab.Nick,sFunc,"Cache") local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then - LogInstance("Cache missing"); F:Flush(); F:Close(); return false end + LogInstance(sHew.." Cache missing"); F:Flush(); F:Close(); return false end local bS, sR = pcall(defTab.Cache[sFunc], F, makTab, tCache, sDelim, ssLog) if(not bS) then F:Flush(); F:Close() - LogInstance("Cache manager error: "..sR); return false end + LogInstance(sHew.." Cache manager error: "..sR); return false end if(not sR) then F:Flush(); F:Close() - LogInstance("Cache routine fail"); return false end + LogInstance(sHew.." Cache routine fail"); return false end else - LogInstance("Unsupported mode "..GetReport(sMoDB, fName)) + LogInstance(sHew.." Unsupported mode "..GetReport(sMoDB, fName)) F:Flush(); F:Close(); return false - end; F:Flush(); F:Close(); LogInstance("Success"); return true + end; F:Flush(); F:Close(); LogInstance(sHew.." Success"); return true end --[[ @@ -3632,24 +3630,23 @@ end ]] function ExportCategory(vEq, tData, sPref, bExp) if(SERVER) then LogInstance("Working on server"); return true end - local tHew = GetOpVar("PATTEM_EXCATHED") local fPref = tostring(sPref or GetInstPref()) local nEq = (tonumber(vEq) or 0); if(nEq <= 0) then LogInstance("Wrong equality "..GetReport(vEq)); return false end - local sHew = tHew[2]:format(fPref, nEq) + local tHew, sMoDB = GetOpVar("PATTEM_EXCATHED"), GetOpVar("MODE_DATABASE") + local sHew, sFunc = tHew[2]:format(fPref, nEq), "ExportCategory" local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance(sHew.."Prefix empty"); return false end if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled"); return true end if(IsGenericDB("CATEGORY")) then LogInstance(sHew.." Generic database",sTable); return true end - local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") - local fName, sFunc = GetLibraryPath( - (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")), - fForm:format(fPref, sTool.."CATEGORY")), "ExportCategory" - local F = fileOpen(fName, "wb", "DATA") - if(not F) then LogInstance(sHew.." Open fail: "..fName); return false end - local sEq, nLen, sMoDB = ("="):rep(nEq), (nEq+2), GetOpVar("MODE_DATABASE") + local sSnam = GetOpVar("TOOLNAME_PU").."CATEGORY" + local sSors = (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) + local fName = GetLibraryPath(sSors, fPref, sSnam) + local F = fileOpen(fName, "wb", "DATA"); if(not F) then + LogInstance(sHew.." Open fail: "..fName); return false end + local sEq, nLen = ("="):rep(nEq), (nEq+2) local tCat = (istable(tData) and tData or GetOpVar("TABLE_CATEGORIES")) local tSort = Arrange(tCat); if(not tSort) then LogInstance(sHew.." Sorting keys fail"); return false end @@ -3668,15 +3665,15 @@ end ]] function ImportCategory(vEq, sPref, bExp) if(SERVER) then LogInstance("Working on server"); return true end - local tHew = GetOpVar("PATTEM_EXCATHED") local fPref = tostring(sPref or GetInstPref()) local nEq = mathMax(mathFloor(tonumber(vEq) or 0), 0) - local fForm, sTool = GetOpVar("FORM_PREFIXDSV"), GetOpVar("TOOLNAME_PU") - local fName, sHew = GetOpVar("DIRPATH_BAS"), tHew[2]:format(fPref, nEq) - fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) - fName = fName..fForm:format(fPref, sTool.."CATEGORY") - local F = fileOpen(fName, "rb", "DATA") - if(not F) then LogInstance(sHew.." Open fail: "..fName); return false end + local tHew = GetOpVar("PATTEM_EXCATHED") + local sHew = tHew[2]:format(fPref, nEq) + local sSnam = GetOpVar("TOOLNAME_PU").."CATEGORY" + local sSors = (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) + local fName = GetLibraryPath(sSors, fPref, sSnam) + local F = fileOpen(fName, "rb", "DATA"); if(not F) then + LogInstance(sHew.." Open fail: "..fName); return false end if(nEq == 0) then local iF = F:Tell() -- Store the initial file pointer local sLine, isEOF = GetStringFile(F) -- Read the file header local sPar = sLine:match(tHew[3]); if(not sPar) then @@ -3733,8 +3730,8 @@ function ExportDSV(sTable, sPref, sDelim, bExp) LogInstance("Table mismatch "..GetReport(sTable)); return false end local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end - local tHew = GetOpVar("PATTEM_EXDSVHED") - local sHew = tHew[2]:format(fPref, sTable) + local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") + local sHew, sFunc = tHew[2]:format(fPref, sTable), "ExportDSV" if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then @@ -3743,13 +3740,11 @@ function ExportDSV(sTable, sPref, sDelim, bExp) LogInstance(sHew.." Missing table builder",sTable); return false end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then LogInstance(sHew.." Missing table definition",sTable); return nil end - local fName = GetLibraryPath( - (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")), - GetOpVar("FORM_PREFIXDSV"):format(fPref, defTab.Name)) + local sSors = (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) + local fName = GetLibraryPath(sSors, fPref, defTab.Name) local F = fileOpen(fName, "wb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end - local sDelim, sFunc = tostring(sDelim or "\t"):sub(1,1), "ExportDSV" - local sMoDB = GetOpVar("MODE_DATABASE") -- Read database mode + local sDelim = tostring(sDelim or "\t"):sub(1,1) F:Write("#1 "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") F:Write("#2 "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then @@ -3804,10 +3799,8 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) LogInstance(sHew.." Missing table definition",sTable); return false end local cmdTab = makTab:GetCommand(); if(not IsHere(cmdTab)) then LogInstance(sHew.." Missing table command",sTable); return false end - local fName = GetOpVar("DIRPATH_BAS") --Switch the import source folder - fName = fName..(bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) - local fForm = GetOpVar("FORM_PREFIXDSV") - fName = fName..fForm:format(fPref, defTab.Name) + local sSors = (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) + local fName = GetLibraryPath(sSors, fPref, defTab.Name) local F = fileOpen(fName, "rb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end local sDelim = tostring(sDelim or "\t"):sub(1,1) @@ -3842,8 +3835,8 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) LogInstance("Table mismatch "..GetReport(sTable)); return false end local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref),sTable); return false end - local tHew, sFunc = GetOpVar("PATTEM_EXDSVHED"), "SynchronizeDSV" - local sHew, sMoDB = tHew[2]:format(fPref, sTable), GetOpVar("MODE_DATABASE") + local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") + local sHew, sFunc = tHew[2]:format(fPref, sTable), "SynchronizeDSV" if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then @@ -3852,8 +3845,7 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) LogInstance(sHew.." Missing table builder",sTable); return false end local defTab, iD = makTab:GetDefinition(), makTab:GetColumnID("LINEID") local sDelim, fData = tostring(sDelim or "\t"):sub(1,1), {} - local fName = GetLibraryPath(GetOpVar("DIRPATH_DSV"), - GetOpVar("FORM_PREFIXDSV"):format(fPref, defTab.Name)) + local fName = GetLibraryPath(GetOpVar("DIRPATH_DSV"), fPref, defTab.Name) if(fileExists(fName, "DATA")) then local sLine, isEOF = "", false local I = fileOpen(fName, "rb", "DATA"); if(not I) then @@ -3941,19 +3933,18 @@ function TranslateDSV(sTable, sPref, sDelim) LogInstance("Table mismatch "..GetReport(sTable)); return false end local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end - local tHew = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("DBEXP_PREFGEN") - local sHew, sMoDB = tHew[2]:format(fPref, sTable), GetOpVar("MODE_DATABASE") + local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") + local sHew, sFunc = tHew[2]:format(fPref, sTable), "TranslateDSV" if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then LogInstance(sHew.." Generic database",sTable); return true end local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return false end - local defTab, sFunc = makTab:GetDefinition(), "TranslateDSV" - local sDSV = GetLibraryPath(GetOpVar("DIRPATH_DSV"), - GetOpVar("FORM_PREFIXDSV"):format(fPref, defTab.Name)) - local sDSV = GetLibraryPath(GetOpVar("DIRPATH_EXP"), - GetOpVar("FORM_PREFIXDSV"):format("[tr]"..fPref, defTab.Name)) + local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then + LogInstance(sHew.." Missing table definition",sTable); return false end + local sDSV = GetLibraryPath(GetOpVar("DIRPATH_DSV"), fPref, defTab.Name) + local sEXP = GetLibraryPath(GetOpVar("DIRPATH_EXP"), "[tr]"..fPref, defTab.Name) local sDelim = tostring(sDelim or "\t"):sub(1,1) local D = fileOpen(sDSV, "rb", "DATA"); if(not D) then LogInstance(sHew.." Open fail: "..sDSV,sTable); return false end @@ -3997,7 +3988,7 @@ function RegisterDSV(sProg, sPref, sDelim, bSkip) if(IsFlag("en_dsv_datalock")) then LogInstance("User disabled "..GetReport(sProg, sPref)); return true end local sDelim, sMiss = tostring(sDelim or "\t"):sub(1,1), GetOpVar("MISS_NOAV") - local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), GetOpVar("NAME_LIBRARY").."_dsv") + local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), GetOpVar("NAME_LIBRARY"), "_dsv") if(bSkip) then if(fileExists(fName, "DATA")) then local fPool, isEOF = {}, false @@ -4037,9 +4028,8 @@ end * sDelim > The delimiter to be used while processing the DSV list ]] function ProcessDSV(sDelim) - local lbNam = GetOpVar("NAME_LIBRARY") - local sNt, fForm = GetOpVar("TOOLNAME_PU"), GetOpVar("FORM_PREFIXDSV") - local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), lbNam.."_dsv") + local lbNam, sNt = GetOpVar("NAME_LIBRARY"), GetOpVar("TOOLNAME_PU") + local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), lbNam, "_dsv") local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} local sDsv = GetLibraryPath(GetOpVar("DIRPATH_DSV")) local F = fileOpen(fName, "rb" ,"DATA"); if(not F) then @@ -4335,10 +4325,8 @@ function ExportTypeDSV(sType, sDelim) local defA = makA:GetDefinition(); if(not IsHere(defA)) then LogInstance("("..fPref..") Missing additions definition"); return nil end local sMoDB, fMon = GetOpVar("MODE_DATABASE"), "["..sMoDB:lower().."-dsv]" - local pNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), - GetOpVar("FORM_PREFIXDSV"):format(fMon..fPref, defP.Name)) - local aNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), - GetOpVar("FORM_PREFIXDSV"):format(fMon..fPref, defA.Name)) + local pNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), fMon..fPref, defP.Name) + local aNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), fMon..fPref, defA.Name) local P = fileOpen(pNam, "wb", "DATA"); if(not P) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end local A = fileOpen(aNam, "wb", "DATA"); if(not A) then From 0443b3190790347b0e0e3f5926088faf8d3049af Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 24 Nov 2024 19:54:00 +0200 Subject: [PATCH 100/114] Updated: Use library path instead of `FORM_PREFIXDSV` --- data/trackassembly/set/z_autorun_[trackassembly].txt | 6 ++---- data/trackassembly/set/z_autoset_[trackassembly].txt | 6 ++---- lua/autorun/z_autorun_[shinji85_s_rails].lua | 6 ++---- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/data/trackassembly/set/z_autorun_[trackassembly].txt b/data/trackassembly/set/z_autorun_[trackassembly].txt index 6c55eb8a..cb17dd84 100644 --- a/data/trackassembly/set/z_autorun_[trackassembly].txt +++ b/data/trackassembly/set/z_autorun_[trackassembly].txt @@ -43,14 +43,12 @@ local myScript = tostring(debug.getinfo(1).source or "N/A") -- Store a reference to disable symbol local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") +local gsDirDSV = asmlib.GetOpVar("DIRPATH_DSV") local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") -local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") -- This is the path to your DSV -local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. - asmlib.GetOpVar("DIRPATH_DSV").. - gsFormPF:format(myPrefix, gsToolPF.."PIECES") +local myDsv = asmlib.GetLibraryPath(gsDirDSV, myPrefix, gsToolPF.."PIECES") --[[ * This flag is used when the track pieces list needs to be processed. diff --git a/data/trackassembly/set/z_autoset_[trackassembly].txt b/data/trackassembly/set/z_autoset_[trackassembly].txt index ea2e6b28..3255bf2e 100644 --- a/data/trackassembly/set/z_autoset_[trackassembly].txt +++ b/data/trackassembly/set/z_autoset_[trackassembly].txt @@ -56,15 +56,13 @@ end if(asmlib) then -- Store a reference to disable symbol local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") + local gsDirDSV = asmlib.GetOpVar("DIRPATH_DSV") local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") local gsModeDB = asmlib.GetOpVar("MODE_DATABASE") - local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") -- This is the path to your DSV - local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. - asmlib.GetOpVar("DIRPATH_DSV").. - gsFormPF:format(myPrefix, gsToolPF.."PIECES") + local myDsv = asmlib.GetLibraryPath(gsDirDSV, myPrefix, gsToolPF.."PIECES") -- Evaluated to TRUE when the global database is exported local myFlag = file.Exists(myDsv, "DATA") diff --git a/lua/autorun/z_autorun_[shinji85_s_rails].lua b/lua/autorun/z_autorun_[shinji85_s_rails].lua index 59a276a2..30b9b077 100644 --- a/lua/autorun/z_autorun_[shinji85_s_rails].lua +++ b/lua/autorun/z_autorun_[shinji85_s_rails].lua @@ -43,14 +43,12 @@ local myScript = tostring(debug.getinfo(1).source or "N/A") -- Store a reference to disable symbol local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") +local gsDirDSV = asmlib.GetOpVar("DIRPATH_DSV") local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") -local gsFormPF = asmlib.GetOpVar("FORM_PREFIXDSV") -- This is the path to your DSV -local myDsv = asmlib.GetOpVar("DIRPATH_BAS").. - asmlib.GetOpVar("DIRPATH_DSV").. - gsFormPF:format(myPrefix, gsToolPF.."PIECES") +local myDsv = asmlib.GetLibraryPath(gsDirDSV, myPrefix, gsToolPF.."PIECES") --[[ * This flag is used when the track pieces list needs to be processed. From 19a5973d3f475a32b2a3eb474265386f2febba51 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Mon, 25 Nov 2024 11:20:24 +0200 Subject: [PATCH 101/114] Fixed: Runtime errors in `ProcessDSV` using old folder path Fixed: Runtime errors in `ExportTypeDSV` for DB mode Fixed: `ExportSyncDB` accessing global `WorkshopID` Fixed: `ExportSyncDB` addressing the wrong log pattern Updated: convert log formatting to local for `ExportTypeDSV` --- lua/autorun/trackassembly_init.lua | 4 ++-- lua/trackassembly/trackasmlib.lua | 27 ++++++++++++++------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index e792c20c..7ebc73ae 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.810") +asmlib.SetOpVar("TOOL_VERSION","8.811") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1822,7 +1822,7 @@ asmlib.NewTable("PIECES",{ for iS = 1, tSort.Size do local stRec = tSort[iS] local sKey, vRec = stRec.Key, stRec.Rec if(not cT or cT ~= vRec.Type) then cT = vRec.Type - local sW = tostring(WorkshopID(cT) or sMiss) + local sW = tostring(asmlib.WorkshopID(cT) or sMiss) oFile:Write("# Categorize("..cT.."): "..sW.."\n") end oFile:Write(makTab:Match(vRec.Slot,1,true,"\"")..sDelim) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index fd2c2a8d..4c39d018 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3575,7 +3575,7 @@ function ExportSyncDB(sDelim) if(SERVER) then LogInstance("Working on server"); return true end local sDelim = tostring(sDelim or "\t"):sub(1,1) local sMiss, symSep = GetOpVar("MISS_NOAV"), GetOpVar("OPSYM_SEPARATOR") - local tHew, sMoDB = GetOpVar("PATTEM_EXCATHED"), GetOpVar("MODE_DATABASE") + local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") local sHew, sFunc = tHew[2]:format(sMiss, symSep), "ExportSyncDB" local fName = GetLibraryPath(GetOpVar("DIRPATH_EXP"), GetOpVar("NAME_LIBRARY"), "_db") local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then @@ -4028,10 +4028,10 @@ end * sDelim > The delimiter to be used while processing the DSV list ]] function ProcessDSV(sDelim) - local lbNam, sNt = GetOpVar("NAME_LIBRARY"), GetOpVar("TOOLNAME_PU") + local lbNam, sPU = GetOpVar("NAME_LIBRARY"), GetOpVar("TOOLNAME_PU") local fName = GetLibraryPath(GetOpVar("DIRPATH_SET"), lbNam, "_dsv") - local sDelim, tProc = tostring(sDelim or "\t"):sub(1,1), {} - local sDsv = GetLibraryPath(GetOpVar("DIRPATH_DSV")) + local sDelim = tostring(sDelim or "\t"):sub(1,1) + local sDsv, tProc = GetOpVar("DIRPATH_DSV"), {} local F = fileOpen(fName, "rb" ,"DATA"); if(not F) then LogInstance("Open fail: "..GetReport(fName)); return false end local sLine, isEOF, sGen = "", false, GetOpVar("DBEXP_PREFGEN") @@ -4060,9 +4060,9 @@ function ProcessDSV(sDelim) LogInstance("Prefix clones "..GetReport(prf, tab.Size, fName)) for iD = 1, tab.Size do LogInstance("Prefix "..GetReport(iD, prf, tab[iD])) end else - if(CLIENT) then - if(not fileExists(sDsv..fForm:format(sGen, sNt.."CATEGORY"), "DATA")) then - if(fileExists(sDsv..fForm:format(prf, sNt.."CATEGORY"), "DATA")) then + if(CLIENT) then local srNam = (sPU.."CATEGORY") + if(not fileExists(GetLibraryPath(sDsv, sGen, srNam), "DATA")) then + if(fileExists(GetLibraryPath(sDsv, prf, srNam), "DATA")) then if(not ImportCategory(3, prf)) then LogInstance("Failed "..GetReport(prf, "CATEGORY")) end else LogInstance("Missing "..GetReport(prf, "CATEGORY")) end @@ -4071,8 +4071,9 @@ function ProcessDSV(sDelim) for iD = 1, #libQTable do local makTab = GetBuilderID(iD) local defTab = makTab:GetDefinition() - if(not fileExists(sDsv..fForm:format(sGen, sNt..defTab.Nick), "DATA")) then - if(fileExists(sDsv..fForm:format(prf, sNt..defTab.Nick), "DATA")) then + local srNam = (sPU..defTab.Nick) + if(not fileExists(GetLibraryPath(sDsv, sGen, srNam), "DATA")) then + if(fileExists(GetLibraryPath(sDsv, prf, srNam), "DATA")) then if(not ImportDSV(defTab.Nick, true, prf)) then LogInstance("Failed "..GetReport(prf, defTab.Nick)) end else LogInstance("Missing "..GetReport(prf, defTab.Nick)) end @@ -4324,16 +4325,14 @@ function ExportTypeDSV(sType, sDelim) LogInstance("("..fPref..") Missing additions builder"); return false end local defA = makA:GetDefinition(); if(not IsHere(defA)) then LogInstance("("..fPref..") Missing additions definition"); return nil end - local sMoDB, fMon = GetOpVar("MODE_DATABASE"), "["..sMoDB:lower().."-dsv]" + local sMoDB, sFunc = GetOpVar("MODE_DATABASE"), "ExportTypeDSV" + local sDelim, fMon = tostring(sDelim or "\t"):sub(1,1), "["..sMoDB:lower().."-dsv]" local pNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), fMon..fPref, defP.Name) local aNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), fMon..fPref, defA.Name) local P = fileOpen(pNam, "wb", "DATA"); if(not P) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end local A = fileOpen(aNam, "wb", "DATA"); if(not A) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end - local sDelim, sFunc = tostring(sDelim or "\t"):sub(1,1), "ExportTypeDSV" - local fsLog = GetOpVar("FORM_LOGSOURCE") -- Read the log source format - local ssLog = "*"..fsLog:format(defP.Nick,sFunc,"%s") P:Write("#1 "..sFunc..":("..fPref.."@"..defP.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") P:Write("#2 "..defP.Nick..":("..makP:GetColumnList(sDelim)..")\n") A:Write("#1 "..sFunc..":("..fPref.."@"..defA.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") @@ -4378,6 +4377,8 @@ function ExportTypeDSV(sType, sDelim) end; return makP:Match(vCP,iCP,true,"\"",true) end).."\n") end -- Matching will not crash as it is matched during insertion elseif(sMoDB == "LUA") then + local fsLog = GetOpVar("FORM_LOGSOURCE") -- Read the log source format + local ssLog = "*"..fsLog:format(defP.Nick,sFunc,"%s") local PCache, ACache = libCache[defP.Name], libCache[defA.Name] if(not IsHere(PCache)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") Cache missing",defP.Nick) ; return false end From 6ad690e7452c61ff7519bb0e0b3926e88e770d73 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Tue, 26 Nov 2024 14:54:58 +0200 Subject: [PATCH 102/114] Added: More checks when importing a DSV file --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 7ebc73ae..1e2ab0da 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.811") +asmlib.SetOpVar("TOOL_VERSION","8.812") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 4c39d018..49cf2ec9 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3803,17 +3803,17 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) local fName = GetLibraryPath(sSors, fPref, defTab.Name) local F = fileOpen(fName, "rb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end - local sDelim = tostring(sDelim or "\t"):sub(1,1) - local sLine, isEOF, nLen = "", false, defTab.Name:len() + local sDelim, sLine, isEOF = tostring(sDelim or "\t"):sub(1,1), "", false if(sMoDB == "SQL") then sqlQuery(cmdTab.BEGIN) LogInstance(sHew.." Begin",sTable) end while(not isEOF) do sLine, isEOF = GetStringFile(F) if((not IsBlank(sLine)) and (not IsDisable(sLine))) then - if(sLine:sub(1,nLen) == defTab.Name) then - local tData = sDelim:Explode(sLine:sub(nLen+2,-1)) - for iCnt = 1, defTab.Size do tData[iCnt] = GetStrip(tData[iCnt]) end - if(bComm) then makTab:Record(tData) end - end + local tData = sDelim:Explode(sLine); if((#tData-1) ~= defTab.Size) then + LogInstance(sHew.." Internal length mismatch "..GetReport(sLine),sTable); return false end + local sSors = tableRemove(tData, 1); if(sSors ~= defTab.Name) then + LogInstance(sHew.." Internal table mismatch "..GetReport(sLine),sTable); return false end + for iCnt = 1, defTab.Size do tData[iCnt] = GetStrip(tData[iCnt]) end + if(bComm) then makTab:Record(tData) end end end; F:Close() if(sMoDB == "SQL") then sqlQuery(cmdTab.COMMIT) From 09a90bbeef019a5abd819d86e652d1120cbd1325 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 27 Nov 2024 10:23:29 +0200 Subject: [PATCH 103/114] Added: Usage of `PATTEM_EXDSVHED` in the rest of the places --- lua/trackassembly/trackasmlib.lua | 45 +++++++++++++++---------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 49cf2ec9..904302fd 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -788,7 +788,7 @@ function InitBase(sName, sPurp) SetOpVar("PATTEX_VARADDON", "%s*local%s+myAddon%s*=%s*") SetOpVar("PATTEM_WORKSHID", "^%d+$") SetOpVar("PATTEM_EXCATHED", {"@", "(%s@%d)", "^#.*ExportCategory.*%(.+%)", "%(.+@.+%)"}) - SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s)"}) + SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s@%s)"}) SetOpVar("HOVER_TRIGGER" , {}) if(CLIENT) then SetOpVar("TABLE_IHEADER", {name = "", stage = 0, op = 0, icon = "", icon2 = ""}) @@ -3574,18 +3574,18 @@ end function ExportSyncDB(sDelim) if(SERVER) then LogInstance("Working on server"); return true end local sDelim = tostring(sDelim or "\t"):sub(1,1) - local sMiss, symSep = GetOpVar("MISS_NOAV"), GetOpVar("OPSYM_SEPARATOR") + local sMiss, sTable = GetOpVar("MISS_NOAV"), "PIECES" local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(sMiss, symSep), "ExportSyncDB" + local sHew, sFunc = tHew[2]:format(sMiss, sTable, sDelim), "ExportSyncDB" local fName = GetLibraryPath(GetOpVar("DIRPATH_EXP"), GetOpVar("NAME_LIBRARY"), "_db") - local makTab = GetBuilderNick("PIECES"); if(not IsHere(makTab)) then + local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder"); return false end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then LogInstance(sHew.." Missing table definition"); return false end local F = fileOpen(fName, "wb" ,"DATA"); if(not F) then LogInstance(sHew.." Open fail "..GetReport(fName)); return false end - F:Write("# "..sFunc..": "..GetDateTime().." [ "..sMoDB.." ]\n") - F:Write("# "..defTab.Name..":("..makTab:GetColumnList(nil,1,2,3)..")\n") + F:Write("# "..sFunc..":"..sHew.." "..GetDateTime().." [ "..sMoDB.." ]\n") + F:Write("# "..defTab.Nick..":("..makTab:GetColumnList(nil,1,2,3)..")\n") if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") local qIndx = qsKey:format(sFunc, "") @@ -3728,10 +3728,11 @@ end function ExportDSV(sTable, sPref, sDelim, bExp) if(not isstring(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end + local sDelim = tostring(sDelim or "\t"):sub(1,1) local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(fPref, sTable), "ExportDSV" + local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), "ExportDSV" if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then @@ -3744,8 +3745,7 @@ function ExportDSV(sTable, sPref, sDelim, bExp) local fName = GetLibraryPath(sSors, fPref, defTab.Name) local F = fileOpen(fName, "wb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end - local sDelim = tostring(sDelim or "\t"):sub(1,1) - F:Write("#1 "..sFunc..":("..fPref.."@"..sTable..") "..GetDateTime().." [ "..sMoDB.." ]\n") + F:Write("#1 "..sFunc..":"..sHew.." "..GetDateTime().." [ "..sMoDB.." ]\n") F:Write("#2 "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") @@ -3780,7 +3780,7 @@ end --[[ * Import table data from DSV database created earlier - * sTable > Definition KEY to import + * sTable > Table definition KEY being imported ( or a file ) * bComm > Calls TABLE:Record(arLine) when set to true * sPref > Prefix used on importing ( optional ) * sDelim > Delimiter separating the values @@ -3789,10 +3789,11 @@ end function ImportDSV(sTable, bComm, sPref, sDelim, bExp) if(not isstring(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end + local sDelim, sLine, isEOF = tostring(sDelim or "\t"):sub(1,1), "", false local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew = tHew[2]:format(fPref, sTable) + local sHew = tHew[2]:format(fPref, sTable, sDelim) local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return nil end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then @@ -3803,9 +3804,7 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) local fName = GetLibraryPath(sSors, fPref, defTab.Name) local F = fileOpen(fName, "rb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end - local sDelim, sLine, isEOF = tostring(sDelim or "\t"):sub(1,1), "", false - if(sMoDB == "SQL") then sqlQuery(cmdTab.BEGIN) - LogInstance(sHew.." Begin",sTable) end + if(sMoDB == "SQL") then sqlQuery(cmdTab.BEGIN); LogInstance(sHew.." Begin",sTable) end while(not isEOF) do sLine, isEOF = GetStringFile(F) if((not IsBlank(sLine)) and (not IsDisable(sLine))) then local tData = sDelim:Explode(sLine); if((#tData-1) ~= defTab.Size) then @@ -3816,9 +3815,8 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) if(bComm) then makTab:Record(tData) end end end; F:Close() - if(sMoDB == "SQL") then sqlQuery(cmdTab.COMMIT) - LogInstance(sHew.." Commit",sTable) - end; LogInstance(sHew.." Success",sTable); return true + if(sMoDB == "SQL") then sqlQuery(cmdTab.COMMIT); LogInstance(sHew.." Commit",sTable) end + LogInstance(sHew.." Success",sTable); return true end --[[ @@ -3833,10 +3831,11 @@ end function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) if(not isstring(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end + local sDelim, fData = tostring(sDelim or "\t"):sub(1,1), {} local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref),sTable); return false end local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(fPref, sTable), "SynchronizeDSV" + local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), "SynchronizeDSV" if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then @@ -3844,7 +3843,6 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return false end local defTab, iD = makTab:GetDefinition(), makTab:GetColumnID("LINEID") - local sDelim, fData = tostring(sDelim or "\t"):sub(1,1), {} local fName = GetLibraryPath(GetOpVar("DIRPATH_DSV"), fPref, defTab.Name) if(fileExists(fName, "DATA")) then local sLine, isEOF = "", false @@ -3931,10 +3929,11 @@ end function TranslateDSV(sTable, sPref, sDelim) if(not isstring(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end + local sDelim = tostring(sDelim or "\t"):sub(1,1) local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(fPref, sTable), "TranslateDSV" + local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), "TranslateDSV" if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then @@ -3945,7 +3944,6 @@ function TranslateDSV(sTable, sPref, sDelim) LogInstance(sHew.." Missing table definition",sTable); return false end local sDSV = GetLibraryPath(GetOpVar("DIRPATH_DSV"), fPref, defTab.Name) local sEXP = GetLibraryPath(GetOpVar("DIRPATH_EXP"), "[tr]"..fPref, defTab.Name) - local sDelim = tostring(sDelim or "\t"):sub(1,1) local D = fileOpen(sDSV, "rb", "DATA"); if(not D) then LogInstance(sHew.." Open fail: "..sDSV,sTable); return false end local I = fileOpen(sEXP, "wb", "DATA"); if(not I) then @@ -4317,6 +4315,7 @@ function ExportTypeDSV(sType, sDelim) if(not isstring(sType)) then LogInstance("Type mismatch "..GetReport(sType)); return false end local fPref = sType:gsub("[^%w]","_"):lower() + local tHew = GetOpVar("PATTEM_EXDSVHED") local makP = GetBuilderNick("PIECES"); if(not IsHere(makP)) then LogInstance("("..fPref..") Missing pieces builder"); return false end local defP = makP:GetDefinition(); if(not IsHere(defP)) then @@ -4333,9 +4332,9 @@ function ExportTypeDSV(sType, sDelim) LogInstance("("..fPref..")("..fName..") Open fail"); return false end local A = fileOpen(aNam, "wb", "DATA"); if(not A) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end - P:Write("#1 "..sFunc..":("..fPref.."@"..defP.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") + P:Write("#1 "..sFunc..":"..tHew[2]:format(fPref,defP.Nick,sDelim).." "..GetDateTime().." [ "..sMoDB.." ]\n") P:Write("#2 "..defP.Nick..":("..makP:GetColumnList(sDelim)..")\n") - A:Write("#1 "..sFunc..":("..fPref.."@"..defA.Nick..") "..GetDateTime().." [ "..sMoDB.." ]\n") + A:Write("#1 "..sFunc..":"..tHew[2]:format(fPref,defA.Nick,sDelim).." "..GetDateTime().." [ "..sMoDB.." ]\n") A:Write("#2 "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then local qsNov = GetOpVar("MISS_NOAV") From 4e0a222d4e1145adb122412bc7abbedf62fdd8cf Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 27 Nov 2024 11:15:45 +0200 Subject: [PATCH 104/114] Removed: Numbers from comments --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 56 +++++++++++++++++------------- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 1e2ab0da..e2e9df34 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.812") +asmlib.SetOpVar("TOOL_VERSION","8.813") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 904302fd..ba043a12 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3745,8 +3745,8 @@ function ExportDSV(sTable, sPref, sDelim, bExp) local fName = GetLibraryPath(sSors, fPref, defTab.Name) local F = fileOpen(fName, "wb", "DATA"); if(not F) then LogInstance(sHew.." Open fail: "..fName,sTable); return false end - F:Write("#1 "..sFunc..":"..sHew.." "..GetDateTime().." [ "..sMoDB.." ]\n") - F:Write("#2 "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") + F:Write("# "..sFunc..":"..sHew.." "..GetDateTime().." [ "..sMoDB.." ]\n") + F:Write("# "..sTable..":("..makTab:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") local qIndx = qsKey:format(sFunc, sTable) @@ -3754,7 +3754,7 @@ function ExportDSV(sTable, sPref, sDelim, bExp) Q = makTab:Select():Order(unpack(tQ.O)):Store(qIndx):Get(qIndx) end if(not IsHere(Q)) then F:Flush(); F:Close() LogInstance(sHew.." Build statement failed",sTable); return false end - F:Write("#3 Query:<"..Q..">\n") + F:Write("# Query:<"..Q..">\n") local qData = sqlQuery(Q); if(not qData and isbool(qData)) then F:Flush(); F:Close() LogInstance(sHew.." SQL exec error "..GetReport(sqlLastError(), Q), sTable); return nil end if(not IsHere(qData) or IsEmpty(qData)) then F:Flush(); F:Close() @@ -3787,23 +3787,29 @@ end * bExp > Forces the input from the export folder.( defaults to DSV ) ]] function ImportDSV(sTable, bComm, sPref, sDelim, bExp) - if(not isstring(sTable)) then + local sTable = tostring(sTable or ""); if(IsBlank(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end - local sDelim, sLine, isEOF = tostring(sDelim or "\t"):sub(1,1), "", false - local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then - LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end - local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew = tHew[2]:format(fPref, sTable, sDelim) - local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then - LogInstance(sHew.." Missing table builder",sTable); return nil end - local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then - LogInstance(sHew.." Missing table definition",sTable); return false end - local cmdTab = makTab:GetCommand(); if(not IsHere(cmdTab)) then - LogInstance(sHew.." Missing table command",sTable); return false end - local sSors = (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) - local fName = GetLibraryPath(sSors, fPref, defTab.Name) - local F = fileOpen(fName, "rb", "DATA"); if(not F) then - LogInstance(sHew.." Open fail: "..fName,sTable); return false end + local bFile, sLine, isEOF, F = fileExists(sTable), "", false + local sMoDB, makTab, defTab, cmdTab, sHew = GetOpVar("MODE_DATABASE") + if(bFile) then + LogInstance("Reading configuration: "..sTable) + else + sDelim = tostring(sDelim or "\t"):sub(1,1) + local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then + LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end + local tHew = GetOpVar("PATTEM_EXDSVHED") + sHew = tHew[2]:format(fPref, sTable, sDelim) + makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then + LogInstance(sHew.." Missing table builder",sTable); return nil end + defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then + LogInstance(sHew.." Missing table definition",sTable); return false end + cmdTab = makTab:GetCommand(); if(not IsHere(cmdTab)) then + LogInstance(sHew.." Missing table command",sTable); return false end + local sSors = (bExp and GetOpVar("DIRPATH_EXP") or GetOpVar("DIRPATH_DSV")) + local fName = GetLibraryPath(sSors, fPref, defTab.Name) + F = fileOpen(fName, "rb", "DATA"); if(not F) then + LogInstance(sHew.." Open fail: "..fName,sTable); return false end + end if(sMoDB == "SQL") then sqlQuery(cmdTab.BEGIN); LogInstance(sHew.." Begin",sTable) end while(not isEOF) do sLine, isEOF = GetStringFile(F) if((not IsBlank(sLine)) and (not IsDisable(sLine))) then @@ -4332,10 +4338,10 @@ function ExportTypeDSV(sType, sDelim) LogInstance("("..fPref..")("..fName..") Open fail"); return false end local A = fileOpen(aNam, "wb", "DATA"); if(not A) then LogInstance("("..fPref..")("..fName..") Open fail"); return false end - P:Write("#1 "..sFunc..":"..tHew[2]:format(fPref,defP.Nick,sDelim).." "..GetDateTime().." [ "..sMoDB.." ]\n") - P:Write("#2 "..defP.Nick..":("..makP:GetColumnList(sDelim)..")\n") - A:Write("#1 "..sFunc..":"..tHew[2]:format(fPref,defA.Nick,sDelim).." "..GetDateTime().." [ "..sMoDB.." ]\n") - A:Write("#2 "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") + P:Write("# "..sFunc..":"..tHew[2]:format(fPref,defP.Nick,sDelim).." "..GetDateTime().." [ "..sMoDB.." ]\n") + P:Write("# "..defP.Nick..":("..makP:GetColumnList(sDelim)..")\n") + A:Write("# "..sFunc..":"..tHew[2]:format(fPref,defA.Nick,sDelim).." "..GetDateTime().." [ "..sMoDB.." ]\n") + A:Write("# "..defA.Nick..":("..makA:GetColumnList(sDelim)..")\n") if(sMoDB == "SQL") then local qsNov = GetOpVar("MISS_NOAV") local qsKey = GetOpVar("FORM_KEYSTMT") @@ -4346,7 +4352,7 @@ function ExportTypeDSV(sType, sDelim) Q = makP:Select():Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qInxP):Get(qInxP, qType) end if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") Build statement failed",defP.Nick); return false end - P:Write("#3 Query:<"..Q..">\n") + P:Write("# Query:<"..Q..">\n") local qP = sqlQuery(Q); if(not qP and isbool(qP)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defP.Nick); return false end if(not IsHere(qP) or IsEmpty(qP)) then P:Flush(); P:Close(); A:Flush(); A:Close() @@ -4362,7 +4368,7 @@ function ExportTypeDSV(sType, sDelim) Q = makA:Select():Where(unpack(tQ.W)):Order(unpack(tW.O)):Store(qInxA):Get(qInxA, qrMo) end if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") Build statement failed",defA.Nick); return qsNov end - if(iP == 1) then A:Write("#3 Query:<"..Q..">\n") end + if(iP == 1) then A:Write("# Query:<"..Q..">\n") end local qA = sqlQuery(Q); if(not qA and isbool(qA)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") SQL exec error "..GetReport(sqlLastError(), Q), defA.Nick); return qsNov end if(not IsHere(qA) or IsEmpty(qA)) then From 70ae55906fe84e8362d10d29e9e7e7bb0a402896 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 27 Nov 2024 11:50:04 +0200 Subject: [PATCH 105/114] Added: Export DSV header configurations Added: Import DSV utilizes file header Fixed: Some spaced in the header logs --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 49 +++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 15 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index e2e9df34..1b70d311 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.813") +asmlib.SetOpVar("TOOL_VERSION","8.814") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index ba043a12..59d4a1fc 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -787,8 +787,8 @@ function InitBase(sName, sPurp) SetOpVar("PATTEX_TABLEDAD", "%s*local%s+myAdditions%s*=%s*") SetOpVar("PATTEX_VARADDON", "%s*local%s+myAddon%s*=%s*") SetOpVar("PATTEM_WORKSHID", "^%d+$") - SetOpVar("PATTEM_EXCATHED", {"@", "(%s@%d)", "^#.*ExportCategory.*%(.+%)", "%(.+@.+%)"}) - SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s@%s)"}) + SetOpVar("PATTEM_EXCATHED", {"@", "(%s@%d)" , "^#.*ExportCategory.*%(.+%)", "%(.+@.+%)"}) + SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s@%s)", "^#.*DSV.*%(.+%)" , "%(.+%)"}) SetOpVar("HOVER_TRIGGER" , {}) if(CLIENT) then SetOpVar("TABLE_IHEADER", {name = "", stage = 0, op = 0, icon = "", icon2 = ""}) @@ -3636,7 +3636,7 @@ function ExportCategory(vEq, tData, sPref, bExp) local tHew, sMoDB = GetOpVar("PATTEM_EXCATHED"), GetOpVar("MODE_DATABASE") local sHew, sFunc = tHew[2]:format(fPref, nEq), "ExportCategory" local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then - LogInstance(sHew.."Prefix empty"); return false end + LogInstance(sHew.." Prefix empty"); return false end if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled"); return true end if(IsGenericDB("CATEGORY")) then @@ -3677,12 +3677,12 @@ function ImportCategory(vEq, sPref, bExp) if(nEq == 0) then local iF = F:Tell() -- Store the initial file pointer local sLine, isEOF = GetStringFile(F) -- Read the file header local sPar = sLine:match(tHew[3]); if(not sPar) then - LogInstance(sHew.."Intern header missing"); return false end + LogInstance(sHew.." Intern header missing"); return false end local tPar = tHew[1]:Explode(sPar:match(tHew[4]):Trim():sub(2,-2):Trim()) nEq = mathMax(mathFloor(tonumber(tPar[2]) or 0), 0); if(nEq <= 0) then - LogInstance(sHew.."Marker length error "..GetReport(nEq,vEq)); return false end + LogInstance(sHew.." Marker length error "..GetReport(nEq,vEq)); return false end sHew = tHew[2]:format(fPref, nEq); F:Seek(iF) - LogInstance(sHew.."Intern success "..GetReport(nEq,vEq)) + LogInstance(sHew.." Intern success "..GetReport(sPar)) end local sEq, sLine, nLen = ("="):rep(nEq), "", (nEq+2) local cFr, cBk = "["..sEq.."[", "]"..sEq.."]" @@ -3706,14 +3706,14 @@ function ImportCategory(vEq, sPref, bExp) tCat[key].Cmp = CompileString("return ("..tCat[key].Txt..")",key) local bS, vO = pcall(tCat[key].Cmp) if(bS) then tCat[key].Cmp = vO else tCat[key].Cmp = nil - LogInstance(sHew.."Compilation fail "..GetReport(key, vO)) + LogInstance(sHew.." Compilation fail "..GetReport(key, vO)) end - else LogInstance(sHew.."Key skipped "..GetReport(key)) end - else LogInstance(sHew.."Function missing "..GetReport(key)) end - else LogInstance(sHew.."Name missing "..GetReport(txt)) end + else LogInstance(sHew.." Key skipped "..GetReport(key)) end + else LogInstance(sHew.." Function missing "..GetReport(key)) end + else LogInstance(sHew.." Name missing "..GetReport(txt)) end else sPar = sPar..sLine.."\n" end end - end; F:Close(); LogInstance(sHew.."Success"); return true + end; F:Close(); LogInstance(sHew.." Success"); return true end --[[ @@ -3790,14 +3790,35 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) local sTable = tostring(sTable or ""); if(IsBlank(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end local bFile, sLine, isEOF, F = fileExists(sTable), "", false - local sMoDB, makTab, defTab, cmdTab, sHew = GetOpVar("MODE_DATABASE") + local tHew, sHew = GetOpVar("PATTEM_EXDSVHED") + local sMoDB, makTab, defTab, cmdTab = GetOpVar("MODE_DATABASE") if(bFile) then - LogInstance("Reading configuration: "..sTable) + local tHew, fName = GetOpVar("PATTEM_EXDSVHED"), sTable + LogInstance("Reading configuration: "..fName) + F = fileOpen(fName, "rb", "DATA"); if(not F) then + LogInstance("Open fail: "..fName); return false end + local iF = F:Tell() -- Store the initial file pointer + local sLine, isEOF = GetStringFile(F) -- Read the file header + local sPar = sLine:match(tHew[3]); if(not sPar) then + LogInstance("Intern header missing"); return false end + local tPar = tHew[1]:Explode(sPar:match(tHew[4]):Trim():sub(2,-2):Trim()) + fPref, sTable = tPar[1]:Trim(), tPar[2]:Trim() + sDelim = tostring(tPar[3] or "\t"):sub(1,1) + sHew = tHew[2]:format(fPref, sTable, sDelim) + F:Seek(iF); sLine, isEOF = "", false + makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then + LogInstance(sHew.." Missing table builder",sTable); return nil end + defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then + LogInstance(sHew.." Missing table definition",sTable); return false end + cmdTab = makTab:GetCommand(); if(not IsHere(cmdTab)) then + LogInstance(sHew.." Missing table command",sTable); return false end + F = fileOpen(fName, "rb", "DATA"); if(not F) then + LogInstance(sHew.." Open fail: "..fName,sTable); return false end + LogInstance(sHew.." Intern success "..GetReport(sPar)) else sDelim = tostring(sDelim or "\t"):sub(1,1) local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end - local tHew = GetOpVar("PATTEM_EXDSVHED") sHew = tHew[2]:format(fPref, sTable, sDelim) makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder",sTable); return nil end From 62a14d76c3284c4028c7d03a4b94daeb3d6d1ea6 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 27 Nov 2024 14:38:48 +0200 Subject: [PATCH 106/114] Fixed: When less values are provided in the DSV do not trigger length error on import Updated: Category export header general format Updated: Utilize `debugGetinfo(1).name` instead of function name hard coding --- lua/autorun/trackassembly_init.lua | 2 +- lua/trackassembly/trackasmlib.lua | 36 ++++++++++++++++-------------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 1b70d311..ced08ffb 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.814") +asmlib.SetOpVar("TOOL_VERSION","8.815") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 59d4a1fc..86665805 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -787,7 +787,7 @@ function InitBase(sName, sPurp) SetOpVar("PATTEX_TABLEDAD", "%s*local%s+myAdditions%s*=%s*") SetOpVar("PATTEX_VARADDON", "%s*local%s+myAddon%s*=%s*") SetOpVar("PATTEM_WORKSHID", "^%d+$") - SetOpVar("PATTEM_EXCATHED", {"@", "(%s@%d)" , "^#.*ExportCategory.*%(.+%)", "%(.+@.+%)"}) + SetOpVar("PATTEM_EXCATHED", {"@", "(%s@%d)" , "^#.*ExportCategory.*%(.+%)", "%(.+%)"}) SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s@%s)", "^#.*DSV.*%(.+%)" , "%(.+%)"}) SetOpVar("HOVER_TRIGGER" , {}) if(CLIENT) then @@ -3167,7 +3167,8 @@ function NewTable(sTable,defTab,bDelete,bReload) end -- Uses the given array to create a record in the table function self:Record(arLine) - local qtDef, sMoDB, sFunc = self:GetDefinition(), GetOpVar("MODE_DATABASE"), "Record" + local qtDef = self:GetDefinition() + local sMoDB, sFunc = GetOpVar("MODE_DATABASE"), debugGetinfo(1).name if(not arLine) then LogInstance("Missing data table",tabDef.Nick); return false end if(not arLine[1]) then LogInstance("Missing PK",tabDef.Nick) for key, val in pairs(arLine) do @@ -3177,7 +3178,8 @@ function NewTable(sTable,defTab,bDelete,bReload) local fsLog = GetOpVar("FORM_LOGSOURCE") -- The actual format value local ssLog = "*"..fsLog:format(qtDef.Nick,sFunc,"%s") -- Call the trigger when provided - if(istable(qtDef.Trigs)) then local bS, sR = pcall(qtDef.Trigs[sFunc], arLine, ssLog:format("Trigs")) + if(istable(qtDef.Trigs)) then + local bS, sR = pcall(qtDef.Trigs[sFunc], arLine, ssLog:format("Trigs")) if(not bS) then LogInstance("Trigger manager "..sR,tabDef.Nick); return false end if(not sR) then LogInstance("Trigger routine fail",tabDef.Nick); return false end end -- Populate the data after the trigger does its thing @@ -3302,7 +3304,7 @@ function CacheQueryPiece(sModel) local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then LogInstance("Cache missing for "..GetReport(defTab.Name)); return nil end local sModel = makTab:Match(sModel,1,false,"",true,true) - local stData, sFunc = tCache[sModel], "CacheQueryPiece" + local stData, sFunc = tCache[sModel], debugGetinfo(1).name if(IsHere(stData) and IsHere(stData.Size)) then if(stData.Size <= 0) then stData = nil else stData = makTab:TimerRestart(sFunc, defTab.Name, sModel) end @@ -3350,7 +3352,7 @@ function CacheQueryAdditions(sModel) local tCache = libCache[defTab.Name]; if(not IsHere(tCache)) then LogInstance("Cache missing for "..GetReport(defTab.Name, sModel)); return nil end local sModel, qsKey = makTab:Match(sModel,1,false,"",true,true), GetOpVar("FORM_KEYSTMT") - local stData, sFunc = tCache[sModel], "CacheQueryAdditions" + local stData, sFunc = tCache[sModel], debugGetinfo(1).name if(IsHere(stData) and IsHere(stData.Size)) then if(stData.Size <= 0) then stData = nil else stData = makTab:TimerRestart(sFunc, defTab.Name, sModel) end @@ -3423,7 +3425,7 @@ function CacheQueryTree() LogInstance("Missing table definition"); return nil end if(not IsHere(libCache[defTab.Name])) then LogInstance("Missing cache allocated "..GetReport(defTab.Name)); return nil end - local keyPan , sFunc = GetOpVar("HASH_USER_PANEL"), "CacheQueryTree" + local keyPan , sFunc = GetOpVar("HASH_USER_PANEL"), debugGetinfo(1).name local stPan, qsKey = libCache[keyPan], GetOpVar("FORM_KEYSTMT") if(IsHere(stPan) and IsHere(stPan.Size)) then LogInstance("Retrieve") if(stPan.Size <= 0) then stPan = nil else @@ -3472,7 +3474,7 @@ function CacheQueryProperty(sType) LogInstance("Missing table definition"); return nil end local tCache = libCache[defTab.Name]; if(not tCache) then LogInstance("Cache missing for "..GetReport(defTab.Name)); return nil end - local sMoDB, sFunc = GetOpVar("MODE_DATABASE"), "CacheQueryProperty" + local sMoDB, sFunc = GetOpVar("MODE_DATABASE"), debugGetinfo(1).name local qsKey = GetOpVar("FORM_KEYSTMT") if(isstring(sType) and not IsBlank(sType)) then local sType = makTab:Match(sType,1,false,"",true,true) @@ -3576,7 +3578,7 @@ function ExportSyncDB(sDelim) local sDelim = tostring(sDelim or "\t"):sub(1,1) local sMiss, sTable = GetOpVar("MISS_NOAV"), "PIECES" local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(sMiss, sTable, sDelim), "ExportSyncDB" + local sHew, sFunc = tHew[2]:format(sMiss, sTable, sDelim), debugGetinfo(1).name local fName = GetLibraryPath(GetOpVar("DIRPATH_EXP"), GetOpVar("NAME_LIBRARY"), "_db") local makTab = GetBuilderNick(sTable); if(not IsHere(makTab)) then LogInstance(sHew.." Missing table builder"); return false end @@ -3634,7 +3636,7 @@ function ExportCategory(vEq, tData, sPref, bExp) local nEq = (tonumber(vEq) or 0); if(nEq <= 0) then LogInstance("Wrong equality "..GetReport(vEq)); return false end local tHew, sMoDB = GetOpVar("PATTEM_EXCATHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(fPref, nEq), "ExportCategory" + local sHew, sFunc = tHew[2]:format(fPref, nEq), debugGetinfo(1).name local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance(sHew.." Prefix empty"); return false end if(IsFlag("en_dsv_datalock")) then @@ -3732,7 +3734,7 @@ function ExportDSV(sTable, sPref, sDelim, bExp) local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), "ExportDSV" + local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), debugGetinfo(1).name if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then @@ -3834,7 +3836,7 @@ function ImportDSV(sTable, bComm, sPref, sDelim, bExp) if(sMoDB == "SQL") then sqlQuery(cmdTab.BEGIN); LogInstance(sHew.." Begin",sTable) end while(not isEOF) do sLine, isEOF = GetStringFile(F) if((not IsBlank(sLine)) and (not IsDisable(sLine))) then - local tData = sDelim:Explode(sLine); if((#tData-1) ~= defTab.Size) then + local tData = sDelim:Explode(sLine); if((#tData-1) > defTab.Size) then LogInstance(sHew.." Internal length mismatch "..GetReport(sLine),sTable); return false end local sSors = tableRemove(tData, 1); if(sSors ~= defTab.Name) then LogInstance(sHew.." Internal table mismatch "..GetReport(sLine),sTable); return false end @@ -3862,7 +3864,7 @@ function SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref),sTable); return false end local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), "SynchronizeDSV" + local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), debugGetinfo(1).name if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then @@ -3960,7 +3962,7 @@ function TranslateDSV(sTable, sPref, sDelim) local fPref = tostring(sPref or GetInstPref()); if(IsBlank(fPref)) then LogInstance("Prefix mismatch "..GetReport(fPref,sPref), sTable); return false end local tHew, sMoDB = GetOpVar("PATTEM_EXDSVHED"), GetOpVar("MODE_DATABASE") - local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), "TranslateDSV" + local sHew, sFunc = tHew[2]:format(fPref, sTable, sDelim), debugGetinfo(1).name if(IsFlag("en_dsv_datalock")) then LogInstance(sHew.." User disabled",sTable); return true end if(IsGenericDB(sTable)) then @@ -4119,7 +4121,7 @@ function SetAdditionsRun(sModel, makTab, qList) LogInstance("Table builder missing "..GetReport(qModel)); return false end local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then LogInstance("Table definition missing "); return false end - local sMoDB, sFunc, qData = GetOpVar("MODE_DATABASE"), "SetAdditionsRun" + local sMoDB, sFunc, qData = GetOpVar("MODE_DATABASE"), debugGetinfo(1).name if(sMoDB == "SQL") then local qsKey = GetOpVar("FORM_KEYSTMT") local qModel = makTab:Match(tostring(sModel or ""), 1, true) @@ -4164,7 +4166,7 @@ function ExportContentsRun(fF,qData,sName,sInd,qList) LogInstance("Missing table definition"); return false end local mgrTab = defTab.Cache; if(not IsHere(mgrTab)) then LogInstance("Cache manager missing"); return false end - local sFunc = "ExportContentsRun"; if(not IsHere(mgrTab[sFunc])) then + local sFunc = debugGetinfo(1).name; if(not IsHere(mgrTab[sFunc])) then LogInstance("Missing data handler"); return false end if(IsHere(qList) and istable(qList)) then if(IsHere(qList[keyBld])) then makAdd = qList[keyBld] else @@ -4223,7 +4225,7 @@ function ExportTypeRun(sType) if(IsBlank(sType)) then LogInstance("Track type blank"); return end local qPieces, qAdditions - local sFunc = "ExportTypeRun" + local sFunc = debugGetinfo(1).name local sBase = GetOpVar("DIRPATH_BAS") local noSQL = GetOpVar("MISS_NOSQL") local sTool = GetOpVar("TOOLNAME_NL") @@ -4351,7 +4353,7 @@ function ExportTypeDSV(sType, sDelim) LogInstance("("..fPref..") Missing additions builder"); return false end local defA = makA:GetDefinition(); if(not IsHere(defA)) then LogInstance("("..fPref..") Missing additions definition"); return nil end - local sMoDB, sFunc = GetOpVar("MODE_DATABASE"), "ExportTypeDSV" + local sMoDB, sFunc = GetOpVar("MODE_DATABASE"), debugGetinfo(1).name local sDelim, fMon = tostring(sDelim or "\t"):sub(1,1), "["..sMoDB:lower().."-dsv]" local pNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), fMon..fPref, defP.Name) local aNam = GetLibraryPath(GetOpVar("DIRPATH_EXP"), fMon..fPref, defA.Name) From 1ad0aa1061ad04dde97f8017efec27e3ea010e57 Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Wed, 27 Nov 2024 14:58:23 +0200 Subject: [PATCH 107/114] Updated: Category header internal pattern --- lua/trackassembly/trackasmlib.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 86665805..247b4890 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -787,8 +787,8 @@ function InitBase(sName, sPurp) SetOpVar("PATTEX_TABLEDAD", "%s*local%s+myAdditions%s*=%s*") SetOpVar("PATTEX_VARADDON", "%s*local%s+myAddon%s*=%s*") SetOpVar("PATTEM_WORKSHID", "^%d+$") - SetOpVar("PATTEM_EXCATHED", {"@", "(%s@%d)" , "^#.*ExportCategory.*%(.+%)", "%(.+%)"}) - SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s@%s)", "^#.*DSV.*%(.+%)" , "%(.+%)"}) + SetOpVar("PATTEM_EXCATHED", {"@", "(%s@%d)" , "^#.*Category.*%(.+%)", "%(.+%)"}) + SetOpVar("PATTEM_EXDSVHED", {"@", "(%s@%s@%s)", "^#.*DSV.*%(.+%)" , "%(.+%)"}) SetOpVar("HOVER_TRIGGER" , {}) if(CLIENT) then SetOpVar("TABLE_IHEADER", {name = "", stage = 0, op = 0, icon = "", icon2 = ""}) From e37f23aecc20a17efbad5585a172cf3d8af8162d Mon Sep 17 00:00:00 2001 From: Deyan Dobromirov Date: Thu, 28 Nov 2024 14:00:11 +0200 Subject: [PATCH 108/114] Removed: Some unused variables from `AttachAdditions` Removed: Reading default class and creating POA for every addition Renamed: Bodygroup apply to actual apply --- .../core/custom/trackasmlib_wire.lua | 2 +- lua/trackassembly/trackasmlib.lua | 84 ++++++++++--------- .../gmod_tool/stools/trackassembly.lua | 2 +- 3 files changed, 46 insertions(+), 42 deletions(-) diff --git a/lua/entities/gmod_wire_expression2/core/custom/trackasmlib_wire.lua b/lua/entities/gmod_wire_expression2/core/custom/trackasmlib_wire.lua index ea3b256e..1d7c4df0 100644 --- a/lua/entities/gmod_wire_expression2/core/custom/trackasmlib_wire.lua +++ b/lua/entities/gmod_wire_expression2/core/custom/trackasmlib_wire.lua @@ -376,7 +376,7 @@ __e2setcost(20) e2function number entity:trackasmlibAttachBodyGroups(string sBgpID) if(not (this and this:IsValid() and enFlag)) then return 0 end local stRec = asmlib.CacheQueryPiece(this:GetModel()); if(not stRec) then return 0 end - return asmlib.AttachBodyGroups(this, sBgpID) and anyTrue or anyFalse + return asmlib.ApplyBodyGroups(this, sBgpID) and anyTrue or anyFalse end __e2setcost(20) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 247b4890..db7334c1 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -4865,35 +4865,35 @@ end function AttachAdditions(ePiece) if(not (ePiece and ePiece:IsValid())) then LogInstance("Piece invalid"); return false end - local eAng, ePos, sMoc = ePiece:GetAngles(), ePiece:GetPos(), ePiece:GetModel() + local sMoc, dCass = ePiece:GetModel(), GetOpVar("ENTITY_DEFCLASS") local stData = CacheQueryAdditions(sMoc); if(not IsHere(stData)) then - LogInstance("Model skip "..GetReport(sMoc)); return true end + LogInstance("Skip attaching "..GetReport(sMoc)); return true end local makTab = GetBuilderNick("ADDITIONS"); if(not IsHere(makTab)) then LogInstance("Missing table definition"); return nil end - local sEoa = GetOpVar("OPSYM_ENTPOSANG"); LogInstance("PIECE:MODEL("..sMoc..")") - local coMB, coMA = makTab:GetColumnName(1), makTab:GetColumnName(2) + local ePos, eAng = ePiece:GetPos(), ePiece:GetAngles() + local coMA, oPOA = makTab:GetColumnName(2), NewPOA() local coEN, coLI = makTab:GetColumnName(3), makTab:GetColumnName(4) local coPO, coAN = makTab:GetColumnName(5), makTab:GetColumnName(6) local coMO, coPI = makTab:GetColumnName(7), makTab:GetColumnName(8) local coDR, coPM = makTab:GetColumnName(9), makTab:GetColumnName(10) local coPS, coSE = makTab:GetColumnName(11), makTab:GetColumnName(12) - for iCnt = 1, stData.Size do -- While additions are present keep adding them - local arRec = stData[iCnt]; LogInstance("PIECE:ADDITION("..iCnt..")") - local dCass, oPOA = GetOpVar("ENTITY_DEFCLASS"), NewPOA() + LogInstance("PIECE:MODEL("..sMoc..")") -- Start processing for the base model + for iA = 1, stData.Size do -- While additions are present keep adding them + local arRec = stData[iA]; LogInstance("PIECE:ADDITION("..iA..")") local sCass = GetEmpty(arRec[coEN], nil, dCass) local eBonus = entsCreate(sCass); LogInstance("ents.Create("..sCass..")") if(eBonus and eBonus:IsValid()) then local sMoa = tostring(arRec[coMA]); if(not IsModel(sMoa, true)) then - LogInstance("Invalid attachment "..GetReport(iCnt, sMoc, sMoa)); return false end + LogInstance("Invalid attachment "..GetReport(iA, sMoc, sMoa)); return false end eBonus:SetModel(sMoa) LogInstance("ENT:SetModel("..sMoa..")") local sPos = arRec[coPO]; if(not isstring(sPos)) then - LogInstance("Position mismatch "..GetReport(iCnt, sMoc, sPos)); return false end + LogInstance("Position mismatch "..GetReport(iA, sMoc, sPos)); return false end if(not GetEmpty(sPos)) then oPOA:Decode(sPos, eBonus, "Pos") local vPos = oPOA:Vector(); vPos:Set(ePiece:LocalToWorld(vPos)) eBonus:SetPos(vPos); LogInstance("ENT:SetPos(DB)") else eBonus:SetPos(ePos); LogInstance("ENT:SetPos(PIECE:POS)") end local sAng = arRec[coAN]; if(not isstring(sAng)) then - LogInstance("Angle mismatch "..GetReport(iCnt, sMoc, sAng)); return false end + LogInstance("Angle mismatch "..GetReport(iA, sMoc, sAng)); return false end if(not GetEmpty(sAng)) then oPOA:Decode(sAng, eBonus, "Ang") local aAng = oPOA:Angle(); aAng:Set(ePiece:LocalToWorldAngles(aAng)) eBonus:SetAngles(aAng); LogInstance("ENT:SetAngles(DB)") @@ -4924,7 +4924,7 @@ function AttachAdditions(ePiece) LogInstance("ENT:SetSolid("..tostring(nSo)..")") end else local mA, mC = arRec[coMA], arRec[coEN] - LogInstance("Entity invalid "..GetReport(iCnt, sMoc, mA, mC)); return false + LogInstance("Entity invalid "..GetReport(iA, sMoc, mA, mC)); return false end end; LogInstance("Success"); return true end @@ -4944,14 +4944,18 @@ function GetEntityOrTrace(oEnt) LogInstance("Success "..tostring(trEnt)); return trEnt end +--[[ + * Reads a skin code from a given entity + * oEnt > The entity to read to code from +]] function GetPropSkin(oEnt) - local skEnt = GetEntityOrTrace(oEnt); if(not IsHere(skEnt)) then + local oEnt = GetEntityOrTrace(oEnt); if(not IsHere(oEnt)) then LogInstance("Failed to gather entity"); return "" end - if(IsOther(skEnt)) then + if(IsOther(oEnt)) then LogInstance("Entity other type"); return "" end - local Skin = tonumber(skEnt:GetSkin()); if(not IsHere(Skin)) then + local nRes = tonumber(oEnt:GetSkin()); if(not IsHere(nRes)) then LogInstance("Skin number mismatch"); return "" end - LogInstance("Success "..tostring(skEn)); return tostring(Skin) + LogInstance("Success "..tostring(skEn)); return tostring(mathFloor(nRes)) end --[[ @@ -4959,38 +4963,38 @@ end * oEnt > The entity to read to code from ]] function GetPropBodyGroup(oEnt) - local bgEnt = GetEntityOrTrace(oEnt); if(not IsHere(bgEnt)) then + local oEnt = GetEntityOrTrace(oEnt); if(not IsHere(oEnt)) then LogInstance("Failed to gather entity"); return "" end - if(IsOther(bgEnt)) then + if(IsOther(oEnt)) then LogInstance("Entity other type"); return "" end - local tBG = bgEnt:GetBodyGroups(); if(not (tBG and tBG[1])) then + local tBG = oEnt:GetBodyGroups(); if(not (tBG and tBG[1])) then LogInstance("Bodygroup table empty"); return "" end - local sRez, iCnt, symSep = "", 1, GetOpVar("OPSYM_SEPARATOR") - while(tBG[iCnt]) do local iD = tBG[iCnt].id -- Read ID - local sD = bgEnt:GetBodygroup(iD) -- Read value by ID - sRez = sRez..symSep..tostring(sD or 0) -- Attach - LogInstance("GetBodygroup "..GetReport(iCnt, iD, sD)) - iCnt = iCnt + 1 -- Prepare to take the next value - end; sRez = sRez:sub(2, -1) -- Remove last separator - LogInstance("Success "..GetReport(sRez)); return sRez + local sRes, iB, sySep = "", 1, GetOpVar("OPSYM_SEPARATOR") + while(tBG[iB]) do local iD = tBG[iB].id -- Read ID + local sD = oEnt:GetBodygroup(iD) -- Read value by ID + sRes = sRes..sySep..tostring(sD or 0) -- Attach + LogInstance("GetBodygroup "..GetReport(iB, iD, sD)) + iB = iB + 1 -- Prepare to take the next value + end; sRes = sRes:sub(2, -1) -- Remove last separator + LogInstance("Success "..GetReport(sRes)); return sRes end --[[ - * Attach bodygroup code to a given entity + * Apply bodygroup code to a given entity * oEnt > The entity to attach the code for + * sBG > Bodygroup code to attach like 1,2,3,4 ]] -function AttachBodyGroups(ePiece,sBgID) - if(not (ePiece and ePiece:IsValid())) then +function ApplyBodyGroups(oEnt, sBG) + if(not (oEnt and oEnt:IsValid())) then LogInstance("Base entity invalid"); return false end - local sBgID = tostring(sBgID or "") - local iCnt, tBG = 1, ePiece:GetBodyGroups() - local IDs = GetOpVar("OPSYM_SEPARATOR"):Explode(sBgID) - while(tBG[iCnt] and IDs[iCnt]) do local vBG = tBG[iCnt] - local maxID = (ePiece:GetBodygroupCount(vBG.id) - 1) - local curID = mathClamp(mathFloor(tonumber(IDs[iCnt]) or 0), 0, maxID) - LogInstance("SetBodygroup "..GetReport(iCnt, vBG.id, maxID, curID)) - ePiece:SetBodygroup(vBG.id, curID); iCnt = iCnt + 1 - end; LogInstance("Success "..GetReport(sBgID)); return true + local sBG, tBG, iB = tostring(sBG or ""), oEnt:GetBodyGroups(), 1 + local tID = GetOpVar("OPSYM_SEPARATOR"):Explode(sBG) + while(tBG[iB] and tID[iB]) do local vBG = tBG[iB] + local mBG = (oEnt:GetBodygroupCount(vBG.id) - 1) + local cBG = mathClamp(mathFloor(tonumber(tID[iB]) or 0), 0, mBG) + LogInstance("SetBodygroup "..GetReport(iB, vBG.id, mBG, cBG)) + oEnt:SetBodygroup(vBG.id, cBG); iB = iB + 1 + end; LogInstance("Success "..GetReport(sBG)); return true end function SetPosBound(ePiece,vPos,oPly,sMode) @@ -5037,7 +5041,7 @@ function InSpawnMargin(oPly,oRec,vPos,aAng) else -- Otherwise create memory entry and sore the piece location oRec.Mpos, oRec.Mray = Vector(vPos), aAng:Forward() return false -- Store the last location the piece was spawned - end -- Otherwise wipe the current memoty when not provided + end -- Otherwise wipe the current memory when not provided else oRec.Mpos, oRec.Mray = nil, nil end; return false end @@ -5084,7 +5088,7 @@ function NewPiece(pPly,sModel,vPos,aAng,nMass,sBgSkIDs,clColor,sMode) if(nMass > 0) then pPiece:SetMass(nMass) end -- Mass equal zero use model mass local tBgSk = GetOpVar("OPSYM_DIRECTORY"):Explode(sBgSkIDs or "") ePiece:SetSkin(mathClamp(tonumber(tBgSk[2]) or 0, 0, ePiece:SkinCount()-1)) - if(not AttachBodyGroups(ePiece, tBgSk[1])) then ePiece:Remove() + if(not ApplyBodyGroups(ePiece, tBgSk[1])) then ePiece:Remove() LogInstance("Failed attaching bodygroups"); return nil end if(not AttachAdditions(ePiece)) then ePiece:Remove() LogInstance("Failed attaching additions"); return nil end diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 934973ee..30857a0c 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -1458,7 +1458,7 @@ function TOOL:LeftClick(stTrace) end else -- Visual local IDs = gsSymDir:Explode(bgskids) - if(not asmlib.AttachBodyGroups(trEnt,IDs[1] or "")) then + if(not asmlib.ApplyBodyGroups(trEnt,IDs[1] or "")) then asmlib.LogInstance(self:GetStatus(stTrace,"(Bodygroup/Skin) Failed",trEnt),gtLogs); return false end trEnt:SetSkin(mathClamp(tonumber(IDs[2]) or 0,0,trEnt:SkinCount()-1)) asmlib.LogInstance("(Bodygroup/Skin) Success",gtLogs) From cef3e071dd6ccd95d461a1be7a381457c9709760 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Fri, 29 Nov 2024 19:13:33 +0200 Subject: [PATCH 109/114] Fixed: Runtime error in `ImportDSV` relative to `DATA` --- lua/trackassembly/trackasmlib.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index db7334c1..c36a58a9 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3791,7 +3791,7 @@ end function ImportDSV(sTable, bComm, sPref, sDelim, bExp) local sTable = tostring(sTable or ""); if(IsBlank(sTable)) then LogInstance("Table mismatch "..GetReport(sTable)); return false end - local bFile, sLine, isEOF, F = fileExists(sTable), "", false + local bFile, sLine, isEOF, F = fileExists(sTable, "DATA"), "", false local tHew, sHew = GetOpVar("PATTEM_EXDSVHED") local sMoDB, makTab, defTab, cmdTab = GetOpVar("MODE_DATABASE") if(bFile) then From 94de9ac1efcf9aa3ab3e646a0186b65f40626860 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sat, 30 Nov 2024 09:59:18 +0200 Subject: [PATCH 110/114] Updated: Auto-run export function headers --- .../set/z_autorun_[trackassembly].txt | 24 +- .../set/z_autoset_[trackassembly].txt | 459 +++++++++--------- lua/autorun/z_autorun_[shinji85_s_rails].lua | 24 +- 3 files changed, 257 insertions(+), 250 deletions(-) diff --git a/data/trackassembly/set/z_autorun_[trackassembly].txt b/data/trackassembly/set/z_autorun_[trackassembly].txt index cb17dd84..667dcaad 100644 --- a/data/trackassembly/set/z_autorun_[trackassembly].txt +++ b/data/trackassembly/set/z_autorun_[trackassembly].txt @@ -78,7 +78,7 @@ end * This logic statement is needed for reporting the error * in the console if the process fails. * - @ bSuccess = SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) + @ bSuccess = trackasmlib.SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) * sTable > The table you want to sync * tData > A data table like the one described above * bRepl > If set to /true/, makes the API replace the repeating models with @@ -88,12 +88,12 @@ end * sPref > An export file custom prefix. For synchronizing it must be related to your addon * sDelim > The delimiter used by the server/client ( default is a tab symbol ) * - @ bSuccess = TranslateDSV(sTable, sPref, sDelim) + @ bSuccess = trackasmlib.TranslateDSV(sTable, sPref, sDelim) * sTable > The table you want to translate to Lua script * sPref > An export file custom prefix. For synchronizing it must be related to your addon * sDelim > The delimiter used by the server/client ( default is a tab symbol ) ]]-- -local function SyncTable(sName, tData, bRepl) +local function DoSynchronize(sName, tData, bRepl) local sRep = asmlib.GetReport(myPrefix, sName) -- Generate report if error is present if(not asmlib.IsEmpty(tData)) then -- Something to be processed. Do stuff when the table is not empty asmlib.LogInstance("Synchronization START "..sRep, mySource) -- Signal start synchronization @@ -114,13 +114,13 @@ end * (/garrysmod/data/trackassembly/set/trackasmlib_dsv.txt) * a.k.a the DATA folder of Garry's mod. * - * @bSuccess = RegisterDSV(sProg, sPref, sDelim) + * @bSuccess = trackasmlib.RegisterDSV(sProg, sPref, sDelim) * sProg > The program which registered the DSV * sPref > The external data prefix to be added ( default instance prefix ) * sDelim > The delimiter to be used for processing ( default tab ) * bSkip > Skip addition for the DSV prefix if exists ( default `false` ) ]]-- -local function RegisterDSV(bSkip) +local function DoRegister(bSkip) local sRep = asmlib.GetReport(myPrefix, bSkip) -- Generate report if error is present asmlib.LogInstance("Registration START "..sRep, mySource) if(bSkip) then -- Your DSV must be registered only once when loading for the first time @@ -137,13 +137,13 @@ end * This logic statement is needed for reporting the error in the console if the * process fails. * - @ bSuccess = ExportCategory(nInd, tData, sPref) + @ bSuccess = trackasmlib.ExportCategory(nInd, tData, sPref) * nInd > The index equal indent format to be stored with ( generally = 3 ) * tData > The category functional definition you want to use to divide your stuff with * sPref > An export file custom prefix. For synchronizing * it must be related to your addon ( default is instance prefix ) ]]-- -local function ExportCategory(tCatg) +local function DoCategory(tCatg) local sRep = asmlib.GetReport(myPrefix, bSkip) -- Generate report if error is present asmlib.LogInstance("Category export START "..sRep, mySource) if(CLIENT) then -- Category handling is client side only @@ -162,7 +162,7 @@ asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", asmlib.WorkshopID(myAddon, "287012681") -- Register the addon to the plugable DSV list -local bS, vO = pcall(RegisterDSV, myFlag) +local bS, vO = pcall(DoRegister, myFlag) if(not bS) then ThrowError("Registration error: "..vO) end --[[ @@ -194,7 +194,7 @@ local myCategory = { } -- Register the addon category to the plugable DSV list -local bS, vO = pcall(ExportCategory, myCategory) +local bS, vO = pcall(DoCategory, myCategory) if(not bS) then ThrowError("Category error: "..vO) end --[[ @@ -249,7 +249,7 @@ local myPieces = { } -- Register the addon PIECES to the plugable DSV list -local bS, vO = pcall(SyncTable, "PIECES", myPieces, true) +local bS, vO = pcall(DoSynchronize, "PIECES", myPieces, true) if(not bS) then ThrowError("PIECES error: "..vO) end --[[ @@ -287,7 +287,7 @@ if(not bS) then ThrowError("PIECES error: "..vO) end local myAdditions = {} -- Register the addon ADDITIONS to the plugable DSV list -local bS, vO = pcall(SyncTable, "ADDITIONS", myAdditions, true) +local bS, vO = pcall(DoSynchronize, "ADDITIONS", myAdditions, true) if(not bS) then ThrowError("ADDITIONS error: "..vO) end --[[ @@ -309,7 +309,7 @@ if(not bS) then ThrowError("ADDITIONS error: "..vO) end local myPhysproperties = {} -- Register the addon PHYSPROPERTIES to the plugable DSV list -local bS, vO = pcall(SyncTable, "PHYSPROPERTIES", myPhysproperties, true) +local bS, vO = pcall(DoSynchronize, "PHYSPROPERTIES", myPhysproperties, true) if(not bS) then ThrowError("PHYSPROPERTIES error: "..vO) end asmlib.LogInstance("<<< "..myScript, mySource) diff --git a/data/trackassembly/set/z_autoset_[trackassembly].txt b/data/trackassembly/set/z_autoset_[trackassembly].txt index 3255bf2e..2d91b0a0 100644 --- a/data/trackassembly/set/z_autoset_[trackassembly].txt +++ b/data/trackassembly/set/z_autoset_[trackassembly].txt @@ -9,7 +9,8 @@ ]]-- -- Local reference to the module. -local asmlib = trackasmlib +local asmlib = trackasmlib; if(not asmlib) then -- Module present + ErrorNoHaltWithStack("TOOL: Track assembly tool module fail!\n"); return end -- Change this to your addon name. local myAddon = "SligWolf's Minitrains" -- Your addon name goes here @@ -22,24 +23,16 @@ local myAddon = "SligWolf's Minitrains" -- Your addon name goes here ]]-- local myType = myAddon -- The type your addon resides in the tool with ---[[ - * For actually produce an error you can replace the /print/ - * statement with one of following API calls: - * https://wiki.facepunch.com/gmod/Global.print - * https://wiki.facepunch.com/gmod/Global.error - * https://wiki.facepunch.com/gmod/Global.Error - * https://wiki.facepunch.com/gmod/Global.ErrorNoHalt - * https://wiki.facepunch.com/gmod/Global.ErrorNoHaltWithStack -]] -local myError = ErrorNoHalt - -- This is used for addon relation prefix. Fingers away from it -local myPrefix = asmlib.GetInstPref() -- Addon prefix +local myPrefix = myAddon:gsub("[^%w]","_") -- Addon prefix -- This is the script path. It tells TA who wants to add these models -- Do not touch this also, it is used for debugging local myScript = tostring(debug.getinfo(1).source or "N/A") myScript = "@"..myScript:gsub("^%W+", ""):gsub("\\","/") + mySource = tostring(mySource or ""):gsub("^%W+", "") + mySource = (asmlib.IsBlank(mySource) and "DSV" or mySource) + --[[ * This function defines what happens when there is an error present * Usually you can tell Gmod that you want it to generate an error @@ -50,230 +43,244 @@ local myScript = tostring(debug.getinfo(1).source or "N/A") local function myThrowError(vMesg) local sMesg = tostring(vMesg) -- Make sure the message is string if(asmlib) then asmlib.LogInstance(sMesg) end -- Output the message into the logs - myError(myScript.." > ("..myAddon.."): "..sMesg) -- Generate an error in the console ( optional ) + ErrorNoHaltWithStack(myScript.." > ("..myAddon.."): "..sMesg) -- Generate an error in the console ( optional ) end -if(asmlib) then - -- Store a reference to disable symbol - local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") - local gsDirDSV = asmlib.GetOpVar("DIRPATH_DSV") - local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") - local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") - local gsModeDB = asmlib.GetOpVar("MODE_DATABASE") - - -- This is the path to your DSV - local myDsv = asmlib.GetLibraryPath(gsDirDSV, myPrefix, gsToolPF.."PIECES") +-- Store a reference to disable symbol +local gsMissDB = asmlib.GetOpVar("MISS_NOSQL") +local gsDirDSV = asmlib.GetOpVar("DIRPATH_DSV") +local gsToolPF = asmlib.GetOpVar("TOOLNAME_PU") +local gsSymOff = asmlib.GetOpVar("OPSYM_DISABLE") +local gsModeDB = asmlib.GetOpVar("MODE_DATABASE") +local gsPrfGen = asmlib.GetOpVar("DBEXP_PREFGEN") - -- Evaluated to TRUE when the global database is exported - local myFlag = file.Exists(myDsv, "DATA") +local myPath = { -- This contains the path to generic DSV + asmlib.GetLibraryPath(gsDirDSV, gsPrfGen, gsToolPF.."PIECES"), + asmlib.GetLibraryPath(gsDirDSV, gsPrfGen, gsToolPF.."CATEGORY"), + asmlib.GetLibraryPath(gsDirDSV, gsPrfGen, gsToolPF.."ADDITIONS"), + asmlib.GetLibraryPath(gsDirDSV, gsPrfGen, gsToolPF.."PHYSPROPERTIES") +} - -- Tell TA what custom script we just called don't touch it - asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}") +-- Tell TA what custom script we just called don't touch it +asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", "..myPrefix.."}", mySource) - if(not myFlag) then -- Check for exported global database +-- Check for exported generic database for PIECES +-- Evaluated to TRUE when the generic database is exported +if(not file.Exists(myPath[1], "DATA")) then - local PIECES = asmlib.GetBuilderNick("PIECES") + local PIECES = asmlib.GetBuilderNick("PIECES") + -- Check for exported generic database for CATEGORY + -- Evaluated to TRUE when the generic category is exported + if(not file.Exists(myPath[2], "DATA")) then asmlib.Categorize(myAddon, [[ function(m) - local function conv(x) return " "..x:sub(2,2):upper() end - local r = m:gsub("models/minitrains/",""):gsub("_","/") - local s = r:find("/") or r:find("%.") - r = (s and r:sub(1,s-1) or "other"); o = {r} - if(r == "sw") then o = {"buffer"} end; - for i = 1, #o do o[i] = ("_"..o[i]):gsub("_%w", conv):sub(2,-1) end; return o end - ]]) - - asmlib.WorkshopID(myAddon, 149759773) + local r = m:gsub("models/props_phx/construct/",""):gsub("_","/") + local s = r:find("/"); r = s and r:sub(1,s-1) or nil + local n = nil + if(r) then + if(r == "metal" ) then n = "My metal plate" end + if(r == "windows") then n = "My glass plate" end + end + r = r and r:gsub("^%l", string.upper) or nil + p = r and {r} or nil + return p, n + end + ]]) + end - if(gsModeDB == "SQL") then sqlBegin() end + asmlib.WorkshopID(myAddon, "287012681") - --[[ - * Create a table and populate it as shown below - * In the square brackets goes your MODEL, - * and then for every active point, you must have one array of - * strings, where the elements match the following data settings. - * You can use the disable event /#/ to make TA auto-fill - * the value provided and you can also add multiple track types myType[1-n]. - * If you need to use piece origin/angle with model attachment, you must use - * the attachment extraction event /!/. The model attachment format is - * /!/ and it depends what attachment name you gave it when you - * created the model. If you need TA to extract the origin/angle from an attachment named - * /test/ for example, you just need to put the string /!test/ in the origin/angle column for that model. - * {MODEL, TYPE, NAME, LINEID, POINT, ORIGIN, ANGLE, CLASS} - * TYPE > This string is the name of the type your stuff will reside in the panel. - * Disabling this, makes it use the value of the /DEFAULT_TYPE/ variable. - * If it is empty uses the string /TYPE/, so make sure you fill this. - * NAME > This is the name of your track piece. Put /#/ here to be auto-generated from - * the model ( from the last slash to the file extension ). - * LINEID > This is the ID of the point that can be selected for building. They must be - * sequential and mandatory. If provided, the ID must the same as the row index under - * a given model key. Disabling this, makes it use the the index of the current line. - * Use that to swap the active points around by only moving the desired row up or down. - * For the example table definition below, the line ID in the database will be the same. - * POINT > This is the local position vector that TA searches and selects the related - * ORIGIN for. An empty string is treated as taking the ORIGIN. - * Disabling this using the disable event makes it hidden when the active point is searched for - * ORIGIN > This is the origin relative to which the next track piece position is calculated - * An empty string is treated as {0,0,0}. Disabling this also makes it use {0,0,0} - * You can also fill it with attachment event /!/ followed by your attachment name. It's mandatory - * ANGLE > This is the angle relative to which the forward and up vectors are calculated. - * An empty string is treated as {0,0,0}. Disabling this also makes it use {0,0,0} - * You can also fill it with attachment event /!/ followed by your attachment name. It's mandatory - * CLASS > This string is populated up when your entity class is not /prop_physics/ but something else - * used by ents.Create of the gmod ents API library. Keep this empty if your stuff is a normal prop. - ]]-- - PIECES:Record({"models/minitrains/straight_16.mdl", "#", "#", 1, "", "0, -8.507, 1"}) - PIECES:Record({"models/minitrains/straight_16.mdl", "#", "#", 2, "", "-16, -8.507, 1", "0,-180,0"}) - PIECES:Record({"models/minitrains/straight_32.mdl", "#", "#", 1, "", "0, -8.507, 1"}) - PIECES:Record({"models/minitrains/straight_32.mdl", "#", "#", 2, "", "-32, -8.507, 1", "0,-180,0"}) - PIECES:Record({"models/minitrains/straight_64.mdl", "#", "#", 1, "", "0, -8.507, 1"}) - PIECES:Record({"models/minitrains/straight_64.mdl", "#", "#", 2, "", "-64, -8.507, 1", "0,-180,0"}) - PIECES:Record({"models/minitrains/straight_128.mdl", "#", "#", 1, "", "0, -8.507, 1"}) - PIECES:Record({"models/minitrains/straight_128.mdl", "#", "#", 2, "", "-128, -8.507, 1", "0,-180,0"}) - PIECES:Record({"models/minitrains/straight_256.mdl", "#", "#", 1, "", "0, -8.507, 1"}) - PIECES:Record({"models/minitrains/straight_256.mdl", "#", "#", 2, "", "-256, -8.507, 1", "0,-180,0"}) - PIECES:Record({"models/minitrains/straight_512.mdl", "#", "#", 1, "", "0, -8.507, 1"}) - PIECES:Record({"models/minitrains/straight_512.mdl", "#", "#", 2, "", "-512, -8.507, 1", "0,-180,0"}) - PIECES:Record({"models/minitrains/straight_1024.mdl", "#", "#", 1, "", "0, -8.507, 1"}) - PIECES:Record({"models/minitrains/straight_1024.mdl", "#", "#", 2, "", "-1024, -8.507, 1", "0,-180,0"}) - asmlib.ModelToNameRule("SET",nil,{"diagonal_","ramp_"},nil) - PIECES:Record({"models/minitrains/straight_diagonal_128.mdl", "#", "#", 1, "", "8, -8.508, 1"}) - PIECES:Record({"models/minitrains/straight_diagonal_128.mdl", "#", "#", 2, "", "-136, -8.506, 33", "0,-180,0"}) - PIECES:Record({"models/minitrains/straight_diagonal_256.mdl", "#", "#", 1, "", "8, -8.508, 1"}) - PIECES:Record({"models/minitrains/straight_diagonal_256.mdl", "#", "#", 2, "", "-264, -8.506, 33", "0,-180,0"}) - PIECES:Record({"models/minitrains/straight_diagonal_512.mdl", "#", "#", 1, "", "8, -8.508, 1"}) - PIECES:Record({"models/minitrains/straight_diagonal_512.mdl", "#", "#", 2, "", "-520, -8.506, 33", "0,-180,0"}) - asmlib.ModelToNameRule("CLR") - PIECES:Record({"models/minitrains/curve_1_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) - PIECES:Record({"models/minitrains/curve_1_90.mdl", "#", "#", 2, "", "-138.51, 130, 1", "0,90,0"}) - PIECES:Record({"models/minitrains/curve_2_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) - PIECES:Record({"models/minitrains/curve_2_90.mdl", "#", "#", 2, "", "-168.51, 160, 0.996", "0,90,0"}) - PIECES:Record({"models/minitrains/curve_3_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) - PIECES:Record({"models/minitrains/curve_3_90.mdl", "#", "#", 2, "", "-198.51, 190, 0.995", "0,90,0"}) - PIECES:Record({"models/minitrains/curve_4_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) - PIECES:Record({"models/minitrains/curve_4_90.mdl", "#", "#", 2, "", "-228.51, 220, 0.994", "0,90,0"}) - PIECES:Record({"models/minitrains/curve_5_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) - PIECES:Record({"models/minitrains/curve_5_90.mdl", "#", "#", 2, "", "-258.51, 250, 0.994", "0,90,0"}) - PIECES:Record({"models/minitrains/curve_6_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) - PIECES:Record({"models/minitrains/curve_6_90.mdl", "#", "#", 2, "", "-288.51, 280, 0.993", "0,90,0"}) - PIECES:Record({"models/minitrains/curve_1_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) - PIECES:Record({"models/minitrains/curve_1_45.mdl", "#", "#", 2, "", "-97.956, 32.044, 1", "0,135,0"}) - PIECES:Record({"models/minitrains/curve_2_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) - PIECES:Record({"models/minitrains/curve_2_45.mdl", "#", "#", 2, "", "-119.15, 40.853, 1", "0,135,0"}) - PIECES:Record({"models/minitrains/curve_3_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) - PIECES:Record({"models/minitrains/curve_3_45.mdl", "#", "#", 2, "", "-140.368, 49.631, 1", "0,135,0"}) - PIECES:Record({"models/minitrains/curve_4_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) - PIECES:Record({"models/minitrains/curve_4_45.mdl", "#", "#", 2, "", "-161.567, 58.434, 1", "0,135,0"}) - PIECES:Record({"models/minitrains/curve_5_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) - PIECES:Record({"models/minitrains/curve_5_45.mdl", "#", "#", 2, "", "-182.769, 67.232, 1", "0,135,0"}) - PIECES:Record({"models/minitrains/curve_6_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) - PIECES:Record({"models/minitrains/curve_6_45.mdl", "#", "#", 2, "", "-203.983, 76.019, 1", "0,135,0"}) - PIECES:Record({"models/minitrains/curve_1_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) - PIECES:Record({"models/minitrains/curve_1_22-5.mdl", "#", "#", 2, "", "-53.014, 2.013, 1", "0,157.5,0"}) - PIECES:Record({"models/minitrains/curve_2_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) - PIECES:Record({"models/minitrains/curve_2_22-5.mdl", "#", "#", 2, "", "-64.492, 4.307, 1", "0,157.5,0"}) - PIECES:Record({"models/minitrains/curve_3_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) - PIECES:Record({"models/minitrains/curve_3_22-5.mdl", "#", "#", 2, "", "-75.965, 6.599, 1", "0,157.5,0"}) - PIECES:Record({"models/minitrains/curve_4_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) - PIECES:Record({"models/minitrains/curve_4_22-5.mdl", "#", "#", 2, "", "-87.437, 8.904, 1", "0,157.5,0"}) - PIECES:Record({"models/minitrains/curve_5_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) - PIECES:Record({"models/minitrains/curve_5_22-5.mdl", "#", "#", 2, "", "-98.913, 11.205,1", "0,157.5,0"}) - PIECES:Record({"models/minitrains/curve_6_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) - PIECES:Record({"models/minitrains/curve_6_22-5.mdl", "#", "#", 2, "", "-110.405, 13.455, 1", "0,157.5,0"}) - PIECES:Record({"models/minitrains/curve_1_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) - PIECES:Record({"models/minitrains/curve_1_s_small.mdl", "#", "#", 2, "", "-105.994, 12.497, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_2_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) - PIECES:Record({"models/minitrains/curve_2_s_small.mdl", "#", "#", 2, "", "-128.994, 17.497, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_3_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) - PIECES:Record({"models/minitrains/curve_3_s_small.mdl", "#", "#", 2, "", "-151.994, 21.497, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_4_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) - PIECES:Record({"models/minitrains/curve_4_s_small.mdl", "#", "#", 2, "", "-174.994, 26.497, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_5_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) - PIECES:Record({"models/minitrains/curve_5_s_small.mdl", "#", "#", 2, "", "-197.994, 31.497, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_6_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) - PIECES:Record({"models/minitrains/curve_6_s_small.mdl", "#", "#", 2, "", "-220.994, 35.497, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_1_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_1_s_medium.mdl", "#", "#", 2, "", "-195.966, 72.51, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_2_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_2_s_medium.mdl", "#", "#", 2, "", "-237.966, 90.51, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_3_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_3_s_medium.mdl", "#", "#", 2, "", "-280.966, 107.51, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_4_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_4_s_medium.mdl", "#", "#", 2, "", "-322.966, 125.51, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_5_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_5_s_medium.mdl", "#", "#", 2, "", "-365.991, 142.507, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_6_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_6_s_medium.mdl", "#", "#", 2, "", "-407.99, 160.51, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_1_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_1_s_big.mdl", "#", "#", 2, "", "-277.01, 268.511, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_2_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_2_s_big.mdl", "#", "#", 2, "", "-336.99, 328.521, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_3_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_3_s_big.mdl", "#", "#", 2, "", "-397.033, 388.521, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_4_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_4_s_big.mdl", "#", "#", 2, "", "-456.991, 448.521, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_5_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_5_s_big.mdl", "#", "#", 2, "", "-516.985, 508.521, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/curve_6_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) - PIECES:Record({"models/minitrains/curve_6_s_big.mdl", "#", "#", 2, "", "-576.985, 568.521, 1", "0,180,0"}) - PIECES:Record({"models/minitrains/rerailer.mdl", "#", "Rerailer Double", 1, "", "190, 0, 1.01758"}) - PIECES:Record({"models/minitrains/rerailer.mdl", "#", "Rerailer Double", 2, "", "-190, 0, 1.01758", "0,180,0"}) - PIECES:Record({"models/minitrains/sw_buffer_stop.mdl", "#", "Buffer Stop", 1, "", "9.43, -8.011, -1", "0,-180,0"}) - PIECES:Record({"models/minitrains/switch.mdl", "#", "Switch Y", 1, "", "0, -8.509, 1", "", "gmod_sw_minitrain_switch"}) - PIECES:Record({"models/minitrains/switch.mdl", "#", "Switch Y", 2, "", "-128, 6.493, 1", "0,-180,0", "gmod_sw_minitrain_switch"}) - PIECES:Record({"models/minitrains/switch.mdl", "#", "Switch Y", 3, "", "-128, -23.512, 1", "0,-180,0","gmod_sw_minitrain_switch"}) - PIECES:Record({"models/minitrains/switch_double.mdl", "#", "#", 1, "", "16, 21.512, 1", "", "gmod_sw_minitrain_doubleswitch"}) - PIECES:Record({"models/minitrains/switch_double.mdl", "#", "#", 2, "", "-144, 21.513, 1", "0,-180,0", "gmod_sw_minitrain_doubleswitch"}) - PIECES:Record({"models/minitrains/switch_double.mdl", "#", "#", 3, "", "16, -8.515, 1", "", "gmod_sw_minitrain_doubleswitch"}) - PIECES:Record({"models/minitrains/switch_double.mdl", "#", "#", 4, "", "-144, -8.514, 1", "0,-180,0", "gmod_sw_minitrain_doubleswitch"}) - PIECES:Record({"models/minitrains/switch_w_1_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w1"}) - PIECES:Record({"models/minitrains/switch_w_1_128.mdl", "#", "#", 2, "", "-97.94826,32.05148,1", "0,135,0", "gmod_sw_minitrain_switch_w1"}) - PIECES:Record({"models/minitrains/switch_w_1_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w1"}) - PIECES:Record({"models/minitrains/switch_w_1_128.mdl", "#", "#", 4, "", "-97.94826,-49.05152,1", "0,-135,0", "gmod_sw_minitrain_switch_w1"}) - PIECES:Record({"models/minitrains/switch_w_2_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w2"}) - PIECES:Record({"models/minitrains/switch_w_2_128.mdl", "#", "#", 2, "", "-119.15060, 40.84935,1", "0, 135,0", "gmod_sw_minitrain_switch_w2"}) - PIECES:Record({"models/minitrains/switch_w_2_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,-180,0", "gmod_sw_minitrain_switch_w2"}) - PIECES:Record({"models/minitrains/switch_w_2_128.mdl", "#", "#", 4, "", "-119.15061,-57.84934,1", "0,-135,0", "gmod_sw_minitrain_switch_w2"}) - PIECES:Record({"models/minitrains/switch_w_3_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w3"}) - PIECES:Record({"models/minitrains/switch_w_3_128.mdl", "#", "#", 2, "", "-140.36781,49.63218,1", "0,135,0", "gmod_sw_minitrain_switch_w3"}) - PIECES:Record({"models/minitrains/switch_w_3_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w3"}) - PIECES:Record({"models/minitrains/switch_w_3_128.mdl", "#", "#", 4, "", "-140.36781,-66.63219,1", "0,-135,0", "gmod_sw_minitrain_switch_w3"}) - PIECES:Record({"models/minitrains/switch_w_4_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w4"}) - PIECES:Record({"models/minitrains/switch_w_4_128.mdl", "#", "#", 2, "", "-87.45033,8.87626,1", "0,157.5,0", "gmod_sw_minitrain_switch_w4"}) - PIECES:Record({"models/minitrains/switch_w_4_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w4"}) - PIECES:Record({"models/minitrains/switch_w_4_128.mdl", "#", "#", 4, "", "-87.45378,-25.86791,1", "0,-157.5,0", "gmod_sw_minitrain_switch_w4"}) - PIECES:Record({"models/minitrains/switch_w_5_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w5"}) - PIECES:Record({"models/minitrains/switch_w_5_128.mdl", "#", "#", 2, "", "-98.92384,11.17581,1", "0,157.5,0", "gmod_sw_minitrain_switch_w5"}) - PIECES:Record({"models/minitrains/switch_w_5_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w5"}) - PIECES:Record({"models/minitrains/switch_w_5_128.mdl", "#", "#", 4, "", "-98.92188,-28.17954,1", "0,-157.5,0", "gmod_sw_minitrain_switch_w5"}) - PIECES:Record({"models/minitrains/switch_w_6_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w6"}) - PIECES:Record({"models/minitrains/switch_w_6_128.mdl", "#", "#", 2, "", "-110.40305,13.45934,1", "0,157.5,0", "gmod_sw_minitrain_switch_w6"}) - PIECES:Record({"models/minitrains/switch_w_6_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w6"}) - PIECES:Record({"models/minitrains/switch_w_6_128.mdl", "#", "#", 4, "", "-110.40065,-30.46272,1", "0,-157.5,0", "gmod_sw_minitrain_switch_w6"}) - PIECES:Record({"models/minitrains/switch_y_1_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y1"}) - PIECES:Record({"models/minitrains/switch_y_1_128.mdl", "#", "#", 2, "", "-97.94826,32.05148,1", "0,135,0", "gmod_sw_minitrain_switch_y1"}) - PIECES:Record({"models/minitrains/switch_y_1_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y1"}) - PIECES:Record({"models/minitrains/switch_y_2_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y2"}) - PIECES:Record({"models/minitrains/switch_y_2_128.mdl", "#", "#", 2, "", "-119.15060, 40.84935,1", "0, 135,0", "gmod_sw_minitrain_switch_y2"}) - PIECES:Record({"models/minitrains/switch_y_2_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,-180,0", "gmod_sw_minitrain_switch_y2"}) - PIECES:Record({"models/minitrains/switch_y_3_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y3"}) - PIECES:Record({"models/minitrains/switch_y_3_128.mdl", "#", "#", 2, "", "-140.36781,49.63218,1", "0,135,0", "gmod_sw_minitrain_switch_y3"}) - PIECES:Record({"models/minitrains/switch_y_3_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y3"}) - PIECES:Record({"models/minitrains/switch_y_4_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y4"}) - PIECES:Record({"models/minitrains/switch_y_4_128.mdl", "#", "#", 2, "", "-87.45033,8.87626,1", "0,157.5,0", "gmod_sw_minitrain_switch_y4"}) - PIECES:Record({"models/minitrains/switch_y_4_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y4"}) - PIECES:Record({"models/minitrains/switch_y_5_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y5"}) - PIECES:Record({"models/minitrains/switch_y_5_128.mdl", "#", "#", 2, "", "-98.92384,11.17581,1", "0,157.5,0", "gmod_sw_minitrain_switch_y5"}) - PIECES:Record({"models/minitrains/switch_y_5_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y5"}) - PIECES:Record({"models/minitrains/switch_y_6_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y6"}) - PIECES:Record({"models/minitrains/switch_y_6_128.mdl", "#", "#", 2, "", "-110.40305,13.45934,1", "0,157.5,0", "gmod_sw_minitrain_switch_y6"}) - PIECES:Record({"models/minitrains/switch_y_6_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y6"}) + if(gsModeDB == "SQL") then sqlBegin() end - if(gsModeDB == "SQL") then sqlCommit() end - end + --[[ + * Create a table and populate it as shown below + * In the square brackets goes your MODEL, + * and then for every active point, you must have one array of + * strings, where the elements match the following data settings. + * You can use the disable event /#/ to make TA auto-fill + * the value provided and you can also add multiple track types myType[1-n]. + * If you need to use piece origin/angle with model attachment, you must use + * the attachment extraction event /!/. The model attachment format is + * /!/ and it depends what attachment name you gave it when you + * created the model. If you need TA to extract the origin/angle from an attachment named + * /test/ for example, you just need to put the string /!test/ in the origin/angle column for that model. + * {MODEL, TYPE, NAME, LINEID, POINT, ORIGIN, ANGLE, CLASS} + * MODEL > This string contains the path to your /*.mdl/ file. It is mandatory and + * taken in pairs with LINEID, it forms the unique identifier of every record. + * When used in /DSV/ mode ( like seen below ) it is used as a hash index. + * TYPE > This string is the name of the type your stuff will reside in the panel. + * Disabling this, makes it use the value of the /DEFAULT_TYPE/ variable. + * If it is empty uses the string /TYPE/, so make sure you fill this. + * NAME > This is the name of your track piece. Put /#/ here to be auto-generated from + * the model ( from the last slash to the file extension ). + * LINEID > This is the ID of the point that can be selected for building. They must be + * sequential and mandatory. If provided, the ID must the same as the row index under + * a given model key. Disabling this, makes it use the index of the current line. + * Use that to swap the active points around by only moving the desired row up or down. + * For the example table definition below, the line ID in the database will be the same. + * POINT > This is the location vector that TA searches and selects the related ORIGIN for. + * An empty string is treated as taking the ORIGIN when assuming player traces can hit the origin + * Disabling via /#/ makes it take the ORIGIN. Used to disable a point but keep original data + * You can also fill it with attachment event /!/ followed by your attachment name. + * ORIGIN > This is the origin relative to which the next track piece position is calculated + * An empty string is treated as {0,0,0}. Disabling via /#/ also makes it use {0,0,0} + * You can also fill it with attachment event /!/ followed by your attachment name. It's mandatory + * ANGLE > This is the angle relative to which the forward and up vectors are calculated. + * An empty string is treated as {0,0,0}. Disabling via /#/ also makes it use {0,0,0} + * You can also fill it with attachment event /!/ followed by your attachment name. It's mandatory + * CLASS > This string is populated up when your entity class is not /prop_physics/ but something else + * used by ents.Create of the gmod ents API library. Keep this empty if your stuff is a normal prop. + * Disabling via /#/ makes it take the NULL value. In this case the model is spawned as a prop + ]]-- + PIECES:Record({"models/minitrains/straight_16.mdl", "#", "#", 1, "", "0, -8.507, 1"}) + PIECES:Record({"models/minitrains/straight_16.mdl", "#", "#", 2, "", "-16, -8.507, 1", "0,-180,0"}) + PIECES:Record({"models/minitrains/straight_32.mdl", "#", "#", 1, "", "0, -8.507, 1"}) + PIECES:Record({"models/minitrains/straight_32.mdl", "#", "#", 2, "", "-32, -8.507, 1", "0,-180,0"}) + PIECES:Record({"models/minitrains/straight_64.mdl", "#", "#", 1, "", "0, -8.507, 1"}) + PIECES:Record({"models/minitrains/straight_64.mdl", "#", "#", 2, "", "-64, -8.507, 1", "0,-180,0"}) + PIECES:Record({"models/minitrains/straight_128.mdl", "#", "#", 1, "", "0, -8.507, 1"}) + PIECES:Record({"models/minitrains/straight_128.mdl", "#", "#", 2, "", "-128, -8.507, 1", "0,-180,0"}) + PIECES:Record({"models/minitrains/straight_256.mdl", "#", "#", 1, "", "0, -8.507, 1"}) + PIECES:Record({"models/minitrains/straight_256.mdl", "#", "#", 2, "", "-256, -8.507, 1", "0,-180,0"}) + PIECES:Record({"models/minitrains/straight_512.mdl", "#", "#", 1, "", "0, -8.507, 1"}) + PIECES:Record({"models/minitrains/straight_512.mdl", "#", "#", 2, "", "-512, -8.507, 1", "0,-180,0"}) + PIECES:Record({"models/minitrains/straight_1024.mdl", "#", "#", 1, "", "0, -8.507, 1"}) + PIECES:Record({"models/minitrains/straight_1024.mdl", "#", "#", 2, "", "-1024, -8.507, 1", "0,-180,0"}) + asmlib.ModelToNameRule("SET",nil,{"diagonal_","ramp_"},nil) + PIECES:Record({"models/minitrains/straight_diagonal_128.mdl", "#", "#", 1, "", "8, -8.508, 1"}) + PIECES:Record({"models/minitrains/straight_diagonal_128.mdl", "#", "#", 2, "", "-136, -8.506, 33", "0,-180,0"}) + PIECES:Record({"models/minitrains/straight_diagonal_256.mdl", "#", "#", 1, "", "8, -8.508, 1"}) + PIECES:Record({"models/minitrains/straight_diagonal_256.mdl", "#", "#", 2, "", "-264, -8.506, 33", "0,-180,0"}) + PIECES:Record({"models/minitrains/straight_diagonal_512.mdl", "#", "#", 1, "", "8, -8.508, 1"}) + PIECES:Record({"models/minitrains/straight_diagonal_512.mdl", "#", "#", 2, "", "-520, -8.506, 33", "0,-180,0"}) + asmlib.ModelToNameRule("CLR") + PIECES:Record({"models/minitrains/curve_1_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) + PIECES:Record({"models/minitrains/curve_1_90.mdl", "#", "#", 2, "", "-138.51, 130, 1", "0,90,0"}) + PIECES:Record({"models/minitrains/curve_2_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) + PIECES:Record({"models/minitrains/curve_2_90.mdl", "#", "#", 2, "", "-168.51, 160, 0.996", "0,90,0"}) + PIECES:Record({"models/minitrains/curve_3_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) + PIECES:Record({"models/minitrains/curve_3_90.mdl", "#", "#", 2, "", "-198.51, 190, 0.995", "0,90,0"}) + PIECES:Record({"models/minitrains/curve_4_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) + PIECES:Record({"models/minitrains/curve_4_90.mdl", "#", "#", 2, "", "-228.51, 220, 0.994", "0,90,0"}) + PIECES:Record({"models/minitrains/curve_5_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) + PIECES:Record({"models/minitrains/curve_5_90.mdl", "#", "#", 2, "", "-258.51, 250, 0.994", "0,90,0"}) + PIECES:Record({"models/minitrains/curve_6_90.mdl", "#", "#", 1, "", "-0.011, -8.5, 1"}) + PIECES:Record({"models/minitrains/curve_6_90.mdl", "#", "#", 2, "", "-288.51, 280, 0.993", "0,90,0"}) + PIECES:Record({"models/minitrains/curve_1_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) + PIECES:Record({"models/minitrains/curve_1_45.mdl", "#", "#", 2, "", "-97.956, 32.044, 1", "0,135,0"}) + PIECES:Record({"models/minitrains/curve_2_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) + PIECES:Record({"models/minitrains/curve_2_45.mdl", "#", "#", 2, "", "-119.15, 40.853, 1", "0,135,0"}) + PIECES:Record({"models/minitrains/curve_3_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) + PIECES:Record({"models/minitrains/curve_3_45.mdl", "#", "#", 2, "", "-140.368, 49.631, 1", "0,135,0"}) + PIECES:Record({"models/minitrains/curve_4_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) + PIECES:Record({"models/minitrains/curve_4_45.mdl", "#", "#", 2, "", "-161.567, 58.434, 1", "0,135,0"}) + PIECES:Record({"models/minitrains/curve_5_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) + PIECES:Record({"models/minitrains/curve_5_45.mdl", "#", "#", 2, "", "-182.769, 67.232, 1", "0,135,0"}) + PIECES:Record({"models/minitrains/curve_6_45.mdl", "#", "#", 1, "", "-0.004, -8.506, 1"}) + PIECES:Record({"models/minitrains/curve_6_45.mdl", "#", "#", 2, "", "-203.983, 76.019, 1", "0,135,0"}) + PIECES:Record({"models/minitrains/curve_1_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) + PIECES:Record({"models/minitrains/curve_1_22-5.mdl", "#", "#", 2, "", "-53.014, 2.013, 1", "0,157.5,0"}) + PIECES:Record({"models/minitrains/curve_2_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) + PIECES:Record({"models/minitrains/curve_2_22-5.mdl", "#", "#", 2, "", "-64.492, 4.307, 1", "0,157.5,0"}) + PIECES:Record({"models/minitrains/curve_3_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) + PIECES:Record({"models/minitrains/curve_3_22-5.mdl", "#", "#", 2, "", "-75.965, 6.599, 1", "0,157.5,0"}) + PIECES:Record({"models/minitrains/curve_4_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) + PIECES:Record({"models/minitrains/curve_4_22-5.mdl", "#", "#", 2, "", "-87.437, 8.904, 1", "0,157.5,0"}) + PIECES:Record({"models/minitrains/curve_5_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) + PIECES:Record({"models/minitrains/curve_5_22-5.mdl", "#", "#", 2, "", "-98.913, 11.205,1", "0,157.5,0"}) + PIECES:Record({"models/minitrains/curve_6_22-5.mdl", "#", "#", 1, "", "-0.005, -8.505, 1"}) + PIECES:Record({"models/minitrains/curve_6_22-5.mdl", "#", "#", 2, "", "-110.405, 13.455, 1", "0,157.5,0"}) + PIECES:Record({"models/minitrains/curve_1_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) + PIECES:Record({"models/minitrains/curve_1_s_small.mdl", "#", "#", 2, "", "-105.994, 12.497, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_2_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) + PIECES:Record({"models/minitrains/curve_2_s_small.mdl", "#", "#", 2, "", "-128.994, 17.497, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_3_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) + PIECES:Record({"models/minitrains/curve_3_s_small.mdl", "#", "#", 2, "", "-151.994, 21.497, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_4_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) + PIECES:Record({"models/minitrains/curve_4_s_small.mdl", "#", "#", 2, "", "-174.994, 26.497, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_5_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) + PIECES:Record({"models/minitrains/curve_5_s_small.mdl", "#", "#", 2, "", "-197.994, 31.497, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_6_s_small.mdl", "#", "#", 1, "", "-0.007, -8.507, 1"}) + PIECES:Record({"models/minitrains/curve_6_s_small.mdl", "#", "#", 2, "", "-220.994, 35.497, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_1_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_1_s_medium.mdl", "#", "#", 2, "", "-195.966, 72.51, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_2_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_2_s_medium.mdl", "#", "#", 2, "", "-237.966, 90.51, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_3_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_3_s_medium.mdl", "#", "#", 2, "", "-280.966, 107.51, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_4_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_4_s_medium.mdl", "#", "#", 2, "", "-322.966, 125.51, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_5_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_5_s_medium.mdl", "#", "#", 2, "", "-365.991, 142.507, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_6_s_medium.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_6_s_medium.mdl", "#", "#", 2, "", "-407.99, 160.51, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_1_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_1_s_big.mdl", "#", "#", 2, "", "-277.01, 268.511, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_2_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_2_s_big.mdl", "#", "#", 2, "", "-336.99, 328.521, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_3_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_3_s_big.mdl", "#", "#", 2, "", "-397.033, 388.521, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_4_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_4_s_big.mdl", "#", "#", 2, "", "-456.991, 448.521, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_5_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_5_s_big.mdl", "#", "#", 2, "", "-516.985, 508.521, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/curve_6_s_big.mdl", "#", "#", 1, "", "-0.007, -8.504, 1"}) + PIECES:Record({"models/minitrains/curve_6_s_big.mdl", "#", "#", 2, "", "-576.985, 568.521, 1", "0,180,0"}) + PIECES:Record({"models/minitrains/rerailer.mdl", "#", "Rerailer Double", 1, "", "190, 0, 1.01758"}) + PIECES:Record({"models/minitrains/rerailer.mdl", "#", "Rerailer Double", 2, "", "-190, 0, 1.01758", "0,180,0"}) + PIECES:Record({"models/minitrains/sw_buffer_stop.mdl", "#", "Buffer Stop", 1, "", "9.43, -8.011, -1", "0,-180,0"}) + PIECES:Record({"models/minitrains/switch.mdl", "#", "Switch Y", 1, "", "0, -8.509, 1", "", "gmod_sw_minitrain_switch"}) + PIECES:Record({"models/minitrains/switch.mdl", "#", "Switch Y", 2, "", "-128, 6.493, 1", "0,-180,0", "gmod_sw_minitrain_switch"}) + PIECES:Record({"models/minitrains/switch.mdl", "#", "Switch Y", 3, "", "-128, -23.512, 1", "0,-180,0","gmod_sw_minitrain_switch"}) + PIECES:Record({"models/minitrains/switch_double.mdl", "#", "#", 1, "", "16, 21.512, 1", "", "gmod_sw_minitrain_doubleswitch"}) + PIECES:Record({"models/minitrains/switch_double.mdl", "#", "#", 2, "", "-144, 21.513, 1", "0,-180,0", "gmod_sw_minitrain_doubleswitch"}) + PIECES:Record({"models/minitrains/switch_double.mdl", "#", "#", 3, "", "16, -8.515, 1", "", "gmod_sw_minitrain_doubleswitch"}) + PIECES:Record({"models/minitrains/switch_double.mdl", "#", "#", 4, "", "-144, -8.514, 1", "0,-180,0", "gmod_sw_minitrain_doubleswitch"}) + PIECES:Record({"models/minitrains/switch_w_1_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w1"}) + PIECES:Record({"models/minitrains/switch_w_1_128.mdl", "#", "#", 2, "", "-97.94826,32.05148,1", "0,135,0", "gmod_sw_minitrain_switch_w1"}) + PIECES:Record({"models/minitrains/switch_w_1_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w1"}) + PIECES:Record({"models/minitrains/switch_w_1_128.mdl", "#", "#", 4, "", "-97.94826,-49.05152,1", "0,-135,0", "gmod_sw_minitrain_switch_w1"}) + PIECES:Record({"models/minitrains/switch_w_2_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w2"}) + PIECES:Record({"models/minitrains/switch_w_2_128.mdl", "#", "#", 2, "", "-119.15060, 40.84935,1", "0, 135,0", "gmod_sw_minitrain_switch_w2"}) + PIECES:Record({"models/minitrains/switch_w_2_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,-180,0", "gmod_sw_minitrain_switch_w2"}) + PIECES:Record({"models/minitrains/switch_w_2_128.mdl", "#", "#", 4, "", "-119.15061,-57.84934,1", "0,-135,0", "gmod_sw_minitrain_switch_w2"}) + PIECES:Record({"models/minitrains/switch_w_3_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w3"}) + PIECES:Record({"models/minitrains/switch_w_3_128.mdl", "#", "#", 2, "", "-140.36781,49.63218,1", "0,135,0", "gmod_sw_minitrain_switch_w3"}) + PIECES:Record({"models/minitrains/switch_w_3_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w3"}) + PIECES:Record({"models/minitrains/switch_w_3_128.mdl", "#", "#", 4, "", "-140.36781,-66.63219,1", "0,-135,0", "gmod_sw_minitrain_switch_w3"}) + PIECES:Record({"models/minitrains/switch_w_4_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w4"}) + PIECES:Record({"models/minitrains/switch_w_4_128.mdl", "#", "#", 2, "", "-87.45033,8.87626,1", "0,157.5,0", "gmod_sw_minitrain_switch_w4"}) + PIECES:Record({"models/minitrains/switch_w_4_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w4"}) + PIECES:Record({"models/minitrains/switch_w_4_128.mdl", "#", "#", 4, "", "-87.45378,-25.86791,1", "0,-157.5,0", "gmod_sw_minitrain_switch_w4"}) + PIECES:Record({"models/minitrains/switch_w_5_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w5"}) + PIECES:Record({"models/minitrains/switch_w_5_128.mdl", "#", "#", 2, "", "-98.92384,11.17581,1", "0,157.5,0", "gmod_sw_minitrain_switch_w5"}) + PIECES:Record({"models/minitrains/switch_w_5_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w5"}) + PIECES:Record({"models/minitrains/switch_w_5_128.mdl", "#", "#", 4, "", "-98.92188,-28.17954,1", "0,-157.5,0", "gmod_sw_minitrain_switch_w5"}) + PIECES:Record({"models/minitrains/switch_w_6_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_w6"}) + PIECES:Record({"models/minitrains/switch_w_6_128.mdl", "#", "#", 2, "", "-110.40305,13.45934,1", "0,157.5,0", "gmod_sw_minitrain_switch_w6"}) + PIECES:Record({"models/minitrains/switch_w_6_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_w6"}) + PIECES:Record({"models/minitrains/switch_w_6_128.mdl", "#", "#", 4, "", "-110.40065,-30.46272,1", "0,-157.5,0", "gmod_sw_minitrain_switch_w6"}) + PIECES:Record({"models/minitrains/switch_y_1_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y1"}) + PIECES:Record({"models/minitrains/switch_y_1_128.mdl", "#", "#", 2, "", "-97.94826,32.05148,1", "0,135,0", "gmod_sw_minitrain_switch_y1"}) + PIECES:Record({"models/minitrains/switch_y_1_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y1"}) + PIECES:Record({"models/minitrains/switch_y_2_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y2"}) + PIECES:Record({"models/minitrains/switch_y_2_128.mdl", "#", "#", 2, "", "-119.15060, 40.84935,1", "0, 135,0", "gmod_sw_minitrain_switch_y2"}) + PIECES:Record({"models/minitrains/switch_y_2_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,-180,0", "gmod_sw_minitrain_switch_y2"}) + PIECES:Record({"models/minitrains/switch_y_3_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y3"}) + PIECES:Record({"models/minitrains/switch_y_3_128.mdl", "#", "#", 2, "", "-140.36781,49.63218,1", "0,135,0", "gmod_sw_minitrain_switch_y3"}) + PIECES:Record({"models/minitrains/switch_y_3_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y3"}) + PIECES:Record({"models/minitrains/switch_y_4_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y4"}) + PIECES:Record({"models/minitrains/switch_y_4_128.mdl", "#", "#", 2, "", "-87.45033,8.87626,1", "0,157.5,0", "gmod_sw_minitrain_switch_y4"}) + PIECES:Record({"models/minitrains/switch_y_4_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y4"}) + PIECES:Record({"models/minitrains/switch_y_5_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y5"}) + PIECES:Record({"models/minitrains/switch_y_5_128.mdl", "#", "#", 2, "", "-98.92384,11.17581,1", "0,157.5,0", "gmod_sw_minitrain_switch_y5"}) + PIECES:Record({"models/minitrains/switch_y_5_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y5"}) + PIECES:Record({"models/minitrains/switch_y_6_128.mdl", "#", "#", 1, "", "0,-8.5,1", "", "gmod_sw_minitrain_switch_y6"}) + PIECES:Record({"models/minitrains/switch_y_6_128.mdl", "#", "#", 2, "", "-110.40305,13.45934,1", "0,157.5,0", "gmod_sw_minitrain_switch_y6"}) + PIECES:Record({"models/minitrains/switch_y_6_128.mdl", "#", "#", 3, "", "-128,-8.5,1", "0,180,0", "gmod_sw_minitrain_switch_y6"}) - asmlib.LogInstance("<<< "..myScript) -else - myThrowError("Failed loading the required module") + if(gsModeDB == "SQL") then sqlCommit() end end + +asmlib.LogInstance("<<< "..myScript) diff --git a/lua/autorun/z_autorun_[shinji85_s_rails].lua b/lua/autorun/z_autorun_[shinji85_s_rails].lua index 30b9b077..4cafe437 100644 --- a/lua/autorun/z_autorun_[shinji85_s_rails].lua +++ b/lua/autorun/z_autorun_[shinji85_s_rails].lua @@ -78,7 +78,7 @@ end * This logic statement is needed for reporting the error * in the console if the process fails. * - @ bSuccess = SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) + @ bSuccess = trackasmlib.SynchronizeDSV(sTable, tData, bRepl, sPref, sDelim) * sTable > The table you want to sync * tData > A data table like the one described above * bRepl > If set to /true/, makes the API replace the repeating models with @@ -88,12 +88,12 @@ end * sPref > An export file custom prefix. For synchronizing it must be related to your addon * sDelim > The delimiter used by the server/client ( default is a tab symbol ) * - @ bSuccess = TranslateDSV(sTable, sPref, sDelim) + @ bSuccess = trackasmlib.TranslateDSV(sTable, sPref, sDelim) * sTable > The table you want to translate to Lua script * sPref > An export file custom prefix. For synchronizing it must be related to your addon * sDelim > The delimiter used by the server/client ( default is a tab symbol ) ]]-- -local function SyncTable(sName, tData, bRepl) +local function DoSynchronize(sName, tData, bRepl) local sRep = asmlib.GetReport(myPrefix, sName) -- Generate report if error is present if(not asmlib.IsEmpty(tData)) then -- Something to be processed. Do stuff when the table is not empty asmlib.LogInstance("Synchronization START "..sRep, mySource) -- Signal start synchronization @@ -114,13 +114,13 @@ end * (/garrysmod/data/trackassembly/set/trackasmlib_dsv.txt) * a.k.a the DATA folder of Garry's mod. * - * @bSuccess = RegisterDSV(sProg, sPref, sDelim) + * @bSuccess = trackasmlib.RegisterDSV(sProg, sPref, sDelim) * sProg > The program which registered the DSV * sPref > The external data prefix to be added ( default instance prefix ) * sDelim > The delimiter to be used for processing ( default tab ) * bSkip > Skip addition for the DSV prefix if exists ( default `false` ) ]]-- -local function RegisterDSV(bSkip) +local function DoRegister(bSkip) local sRep = asmlib.GetReport(myPrefix, bSkip) -- Generate report if error is present asmlib.LogInstance("Registration START "..sRep, mySource) if(bSkip) then -- Your DSV must be registered only once when loading for the first time @@ -137,13 +137,13 @@ end * This logic statement is needed for reporting the error in the console if the * process fails. * - @ bSuccess = ExportCategory(nInd, tData, sPref) + @ bSuccess = trackasmlib.ExportCategory(nInd, tData, sPref) * nInd > The index equal indent format to be stored with ( generally = 3 ) * tData > The category functional definition you want to use to divide your stuff with * sPref > An export file custom prefix. For synchronizing * it must be related to your addon ( default is instance prefix ) ]]-- -local function ExportCategory(tCatg) +local function DoCategory(tCatg) local sRep = asmlib.GetReport(myPrefix, bSkip) -- Generate report if error is present asmlib.LogInstance("Category export START "..sRep, mySource) if(CLIENT) then -- Category handling is client side only @@ -162,7 +162,7 @@ asmlib.LogInstance(">>> "..myScript.." ("..tostring(myFlag).."): {"..myAddon..", asmlib.WorkshopID(myAddon, "326640186") -- Register the addon to the plugable DSV list -local bS, vO = pcall(RegisterDSV, myFlag) +local bS, vO = pcall(DoRegister, myFlag) if(not bS) then ThrowError("Registration error: "..vO) end --[[ @@ -190,7 +190,7 @@ local myCategory = { } -- Register the addon category to the plugable DSV list -local bS, vO = pcall(ExportCategory, myCategory) +local bS, vO = pcall(DoCategory, myCategory) if(not bS) then ThrowError("Category error: "..vO) end --[[ @@ -340,7 +340,7 @@ local myPieces = { } -- Register the addon PIECES to the plugable DSV list -local bS, vO = pcall(SyncTable, "PIECES", myPieces, true) +local bS, vO = pcall(DoSynchronize, "PIECES", myPieces, true) if(not bS) then ThrowError("PIECES error: "..vO) end --[[ @@ -389,7 +389,7 @@ local myAdditions = { } -- Register the addon ADDITIONS to the plugable DSV list -local bS, vO = pcall(SyncTable, "ADDITIONS", myAdditions, true) +local bS, vO = pcall(DoSynchronize, "ADDITIONS", myAdditions, true) if(not bS) then ThrowError("ADDITIONS error: "..vO) end --[[ @@ -411,7 +411,7 @@ if(not bS) then ThrowError("ADDITIONS error: "..vO) end local myPhysproperties = {} -- Register the addon PHYSPROPERTIES to the plugable DSV list -local bS, vO = pcall(SyncTable, "PHYSPROPERTIES", myPhysproperties, true) +local bS, vO = pcall(DoSynchronize, "PHYSPROPERTIES", myPhysproperties, true) if(not bS) then ThrowError("PHYSPROPERTIES error: "..vO) end asmlib.LogInstance("<<< "..myScript, mySource) From 73553ebc672075a2d2a1de41d7990dd4c067c3bf Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Sun, 1 Dec 2024 01:24:18 +0200 Subject: [PATCH 111/114] Added: Some `Scene builder` but not being validated yet Added: Automatic generator for misaligned pipes new E2 style --- data/expression2/TA_Pipe_Generator.txt | 130 ++++++++++++++++++ lua/autorun/trackassembly_init.lua | 17 ++- .../gmod_tool/stools/trackassembly.lua | 6 +- 3 files changed, 148 insertions(+), 5 deletions(-) create mode 100644 data/expression2/TA_Pipe_Generator.txt diff --git a/data/expression2/TA_Pipe_Generator.txt b/data/expression2/TA_Pipe_Generator.txt new file mode 100644 index 00000000..8cfb5eb0 --- /dev/null +++ b/data/expression2/TA_Pipe_Generator.txt @@ -0,0 +1,130 @@ +@name TA Pipe Generator +@model models/sprops/cuboids/height06/size_1/cube_6x6x6.mdl +@persist [Scanner Pipe]:entity [F U R,C MP]:vector [TU TD TL TR]:ftrace +@persist [Delta Iter]:number [ScanCenter SizeCenter]:vector2 MA:angle +@outputs + +if(first() || dupefinished()) +{ + # Scan size. Most rails are more wider than higher + # For PHX two bean rails W > H + ScanR = 500 # Scan radius must be bigger then pipe radius + + # Amount of iterations to lower delta + Iter = 15 + + # Align center to prop center + ScanCenter = vec2(0, 0) + SizeCenter = vec2(3, 3) + + # How fast it will scan the piece edge + Delta = 1 + + # Local oriantation vectors + F = vec(1,0,0) + U = vec(0,0,1) + + # Automatic stuff + Scanner = entity() + Pipe = noentity() + R = F:cross(U) + MP = Scanner:pos() + MA = Scanner:angles() + C = U * ScanCenter:y() + R * ScanCenter:x() + + holoCreate(1), holoColor(1,vec(255,0,0)), holoScale(1,0.1*vec(1,1,1)) holoModel(1,"cone") + holoCreate(2), holoColor(2,vec(0,0,255)), holoScale(2,0.1*vec(1,1,1)) holoModel(2,"cone") + holoCreate(3), holoColor(3,vec(255,255,0)), holoScale(3,0.1*vec(1,1,1)) holoModel(3,"cone") + holoCreate(4), holoColor(4,vec(0,255,255)), holoScale(4,0.1*vec(1,1,1)) holoModel(4,"cone") + holoCreate(5), holoColor(5,vec(0,255,0)), holoScale(5,0.1*vec(1,1,1)) holoModel(5,"cube") + holoCreate(6), holoColor(6,vec(255,0,255)), holoScale(6,0.1*vec(1,1,1)) holoModel(6,"cube") + + TU = Scanner:setFTrace(C + SizeCenter:x() * U, U, ScanR):useArray():putArray(Scanner) + TD = Scanner:setFTrace(C - SizeCenter:x() * U, U, -ScanR):useArray():putArray(Scanner) + TR = Scanner:setFTrace(C + SizeCenter:y() * R, R, ScanR):useArray():putArray(Scanner) + TL = Scanner:setFTrace(C - SizeCenter:y() * R, R, -ScanR):useArray():putArray(Scanner) +} + +function drawFTrace(T:ftrace, N:number) +{ + P = T:getPosWorld() + D = T:getDirWorld() + A = D:toAngle() + A = A:rotateAroundAxis(A:right(), -90) + holoPos(N, P) + holoAng(N, A) +} + +event tick() +{ + holoPos(5, Scanner:toWorld(C)) + drawFTrace(TU:smpLocal(), 1) + drawFTrace(TD:smpLocal(), 2) + drawFTrace(TR:smpLocal(), 3) + drawFTrace(TL:smpLocal(), 4) + + if(Scanner != noentity()) + { + if(TU:isHit() && TD:isHit() && TR:isHit() && TL:isHit()) + { + VU = (TU:getFractionLen() - TD:getFractionLen()) + VR = (TR:getFractionLen() - TL:getFractionLen()) + DL = U * VU + R * VR + + MP = (TU:getPosWorld() + TD:getPosWorld() + + TR:getPosWorld() + TL:getPosWorld()) / 4 + + #print("Move:", DL) + + holoPos(6, MP) + + if(Pipe == noentity()) + { + Pipe = TU:getEntity() + print("Pipe:", Pipe) + } + + C = C + F * Delta + TU:rayMove(F + DL, Delta) + TD:rayMove(F + DL, Delta) + TR:rayMove(F + DL, Delta) + TL:rayMove(F + DL, Delta) + } + else + { + print("Iteration:", Iter) + if(Iter <= 0) + { + Scanner = noentity() + } + C = C - F * Delta + TU:rayMove(F, -Delta) + TD:rayMove(F, -Delta) + TR:rayMove(F, -Delta) + TL:rayMove(F, -Delta) + Delta = Delta / 2 + Iter = Iter - 1 + } + } + else + { + if(Pipe != noentity()) + { + print("Origin:", Pipe:toLocal(MP)) + print("Angle:" , Pipe:toLocal(MA)) + Pipe = noentity() + } + } +} + + + + + + + + + + + + diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index ced08ffb..5845801a 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -2101,7 +2101,7 @@ else if(gsMoDB == "SQL") then sqlBegin() end asmlib.LogInstance("DB PIECES from LUA",gtInitLogs) local PIECES = asmlib.GetBuilderNick("PIECES"); asmlib.ModelToNameRule("CLR") - if(asmlib.GetAsmConvar("devmode" ,"BUL")) then +-- if(asmlib.GetAsmConvar("devmode" ,"BUL")) then asmlib.Categorize("Develop Sprops") PIECES:Record({"models/sprops/cuboids/height06/size_1/cube_6x6x6.mdl" , "#", "x1", 1}) PIECES:Record({"models/sprops/cuboids/height12/size_1/cube_12x12x12.mdl", "#", "x2", 1}) @@ -2117,7 +2117,7 @@ else asmlib.Categorize("Develop Test") PIECES:Record({"models/props_c17/furniturewashingmachine001a.mdl", "#", "#", 1, "#", "-0.05,0.006, 21.934", "-90, 0,180"}) PIECES:Record({"models/props_c17/furniturewashingmachine001a.mdl", "#", "#", 2, "", "-0.05,0.006,-21.922", "90,180,180"}) - end + -- end asmlib.Categorize("PHX Monorail") PIECES:Record({"models/props_phx/trains/monorail1.mdl", "#", "Straight Short", 1, "", "229.885559,0.23999,13.87915"}) PIECES:Record({"models/props_phx/trains/monorail1.mdl", "#", "Straight Short", 2, "", "-228.885254,0.239726,13.87915", "0,-180,0"}) @@ -4826,8 +4826,21 @@ else PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_ent.mdl", "#", "#", 2, "", "0,-59,-20", "0,-90,0"}) PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_ent_gate.mdl", "#", "#", 1, "", "0, 59,-16", "0, 90,0"}) PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_ent_gate.mdl", "#", "#", 2, "", "0,-59,-20", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_short.mdl", "#", "#", 1, "", "0, 31,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_short.mdl", "#", "#", 2, "", "0,-31,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_mid.mdl", "#", "#", 1, "", "0, 63,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_mid.mdl", "#", "#", 2, "", "0,-63,0", "0,-90,0"}) PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_long.mdl", "#", "#", 1, "", "0, 115,0", "0,90,0"}) PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_long.mdl", "#", "#", 2, "", "0,-115,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_2sec.mdl", "#", "#", 1, "", "91,25,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_2sec.mdl", "#", "#", 2, "", "-24,-91,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_bend.mdl", "#", "#", 1, "", "91,25,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_bend.mdl", "#", "#", 2, "", "-24,-91,0", "0,-90,0"}) + + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 1, "", " 112,24,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 2, "", "-3.5,-90,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 3, "", "-112,24,0", "0,-180,0"}) + if(gsMoDB == "SQL") then sqlCommit() end end diff --git a/lua/weapons/gmod_tool/stools/trackassembly.lua b/lua/weapons/gmod_tool/stools/trackassembly.lua index 30857a0c..f5aa45eb 100644 --- a/lua/weapons/gmod_tool/stools/trackassembly.lua +++ b/lua/weapons/gmod_tool/stools/trackassembly.lua @@ -2333,7 +2333,7 @@ function TOOL:DrawToolScreen(w, h) local actrad = self:GetActiveRadius() local pointid, pnextid = self:GetPointID() local workmode, workname = self:GetWorkingMode() - local trMaxCN, trModel, trOID, trRLen + local trMID, trModel, trOID, trRLen if(trEnt and trEnt:IsValid()) then if(asmlib.IsOther(trEnt)) then return end trModel = trEnt:GetModel() @@ -2349,7 +2349,7 @@ function TOOL:DrawToolScreen(w, h) trRLen = mathRound(stSpawn.RLen,2) end if(asmlib.IsHere(trRec)) then - trMaxCN = trRec.Size + trMID = trRec.Size trModel = stringGetFileName(trModel) else trModel = "["..gsNoMD.."]"..stringGetFileName(trModel) end end @@ -2358,7 +2358,7 @@ function TOOL:DrawToolScreen(w, h) maxrad = asmlib.GetAsmConvar("maxactrad", "FLT") scrTool:DrawText("TM: " ..(trModel or gsNoAV),"y") scrTool:DrawText("HM: " ..(model or gsNoAV),"m") - scrTool:DrawText("ID: ["..(trMaxCN or gsNoID) + scrTool:DrawText("ID: ["..(trMID or gsNoID) .."] " ..(trOID or gsNoID) .." >> "..(pointid or gsNoID) .. " (" ..(pnextid or gsNoID) From 1dc51288278299d8d1b7551d0996e2598a7d3f0a Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Fri, 27 Dec 2024 16:45:14 +0200 Subject: [PATCH 112/114] Fixed: Runtime errors in `ExportSyncDB` and `ExportTypeDSV` for SQL mode Fixed: `XQM Ball Rails` category triggering a silent error due to mismatch Added: The rest of the items for `Scene Builder` Added: More fail-safe handling for size/used cache parameter Updated: Pipe E2 Export generator Updated: Export synchronization file independent from DEV mode --- data/expression2/TA_Pipe_Generator.txt | 44 +++++++----- lua/autorun/trackassembly_init.lua | 98 +++++++++++++++++++++----- lua/trackassembly/trackasmlib.lua | 24 +++---- 3 files changed, 119 insertions(+), 47 deletions(-) diff --git a/data/expression2/TA_Pipe_Generator.txt b/data/expression2/TA_Pipe_Generator.txt index 8cfb5eb0..9e383ca4 100644 --- a/data/expression2/TA_Pipe_Generator.txt +++ b/data/expression2/TA_Pipe_Generator.txt @@ -1,7 +1,7 @@ @name TA Pipe Generator -@model models/sprops/cuboids/height06/size_1/cube_6x6x6.mdl +@model models/props_lab/huladoll.mdl @persist [Scanner Pipe]:entity [F U R,C MP]:vector [TU TD TL TR]:ftrace -@persist [Delta Iter]:number [ScanCenter SizeCenter]:vector2 MA:angle +@persist [Delta Iter Raun]:number [ScanCenter SizeCenter]:vector2 MA:angle @outputs if(first() || dupefinished()) @@ -11,10 +11,13 @@ if(first() || dupefinished()) ScanR = 500 # Scan radius must be bigger then pipe radius # Amount of iterations to lower delta - Iter = 15 + Iter = 10 + + # Rouding + Raun = 4 # Align center to prop center - ScanCenter = vec2(0, 0) + ScanCenter = vec2(0, 3) SizeCenter = vec2(3, 3) # How fast it will scan the piece edge @@ -27,6 +30,7 @@ if(first() || dupefinished()) # Automatic stuff Scanner = entity() Pipe = noentity() + U = U:normalized() R = F:cross(U) MP = Scanner:pos() MA = Scanner:angles() @@ -92,7 +96,7 @@ event tick() } else { - print("Iteration:", Iter) + # print("Iteration:", Iter) if(Iter <= 0) { Scanner = noentity() @@ -110,21 +114,23 @@ event tick() { if(Pipe != noentity()) { - print("Origin:", Pipe:toLocal(MP)) - print("Angle:" , Pipe:toLocal(MA)) + Mo = Pipe:model() + Or = Pipe:toLocal(MP) + OrX = toString(round(Or:x(), Raun)) + OrY = toString(round(Or:y(), Raun)) + OrZ = toString(round(Or:z(), Raun)) + OrS = OrX+","+OrY+","+OrZ + An = Pipe:toLocal(MA) + AnP = toString(round(An:pitch(), Raun)) + AnY = toString(round(An:yaw(), Raun)) + AnR = toString(round(An:roll(), Raun)) + AnS = AnP+","+AnY+","+AnR + + if(OrS == "0,0,0") { OrS = "" } + if(AnS == "0,0,0") { AnS = "" } else { AnS = ", \""+AnS+"\"" } + + print("PIECES:Record({\""+Mo+"\", \"#\", \"#\", 0, \"\", \""+OrS+"\""+AnS+"})") Pipe = noentity() } } } - - - - - - - - - - - - diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 5845801a..8c1c0569 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.815") +asmlib.SetOpVar("TOOL_VERSION","8.816") ------------ CONFIGURE GLOBAL INIT OPVARS ------------ @@ -1274,7 +1274,7 @@ if(CLIENT) then asmlib.LogInstance("Click "..asmlib.GetReport(pnSelf:GetText()), sLog..".Button") if(asmlib.GetAsmConvar("exportdb", "BUL")) then asmlib.SetAsmConvar(oPly, "exportdb", 0) - if(inputIsKeyDown(KEY_LSHIFT) and asmlib.GetAsmConvar("devmode" ,"BUL")) then + if(inputIsKeyDown(KEY_LSHIFT)) then if(not asmlib.ExportSyncDB()) then asmlib.LogInstance("Export invalid", sLog..".Button"); return nil end else @@ -1801,12 +1801,12 @@ asmlib.NewTable("PIECES",{ local defTab = makTab:GetDefinition() local stData = tCache[snPK]; if(not stData) then tCache[snPK] = {}; stData = tCache[snPK] end - if(not asmlib.IsHere(stData.Type)) then stData.Type = arLine[2] end - if(not asmlib.IsHere(stData.Name)) then stData.Name = arLine[3] end - if(not asmlib.IsHere(stData.Unit)) then stData.Unit = arLine[8] end if(not asmlib.IsHere(stData.Size)) then stData.Size = 0 end if(not asmlib.IsHere(stData.Used)) then stData.Used = 0 end if(not asmlib.IsHere(stData.Slot)) then stData.Slot = snPK end + if(not asmlib.IsHere(stData.Type)) then stData.Type = arLine[2] end + if(not asmlib.IsHere(stData.Name)) then stData.Name = arLine[3] end + if(not asmlib.IsHere(stData.Unit)) then stData.Unit = arLine[8] end local nOffsID = makTab:Match(arLine[4],4); if(not asmlib.IsHere(nOffsID)) then asmlib.LogInstance("Cannot match "..asmlib.GetReport(4,arLine[4],snPK),vSrc); return false end if(nOffsID ~= (stData.Size + 1)) then @@ -2101,7 +2101,7 @@ else if(gsMoDB == "SQL") then sqlBegin() end asmlib.LogInstance("DB PIECES from LUA",gtInitLogs) local PIECES = asmlib.GetBuilderNick("PIECES"); asmlib.ModelToNameRule("CLR") --- if(asmlib.GetAsmConvar("devmode" ,"BUL")) then + if(asmlib.GetAsmConvar("devmode" ,"BUL")) then asmlib.Categorize("Develop Sprops") PIECES:Record({"models/sprops/cuboids/height06/size_1/cube_6x6x6.mdl" , "#", "x1", 1}) PIECES:Record({"models/sprops/cuboids/height12/size_1/cube_12x12x12.mdl", "#", "x2", 1}) @@ -2117,7 +2117,7 @@ else asmlib.Categorize("Develop Test") PIECES:Record({"models/props_c17/furniturewashingmachine001a.mdl", "#", "#", 1, "#", "-0.05,0.006, 21.934", "-90, 0,180"}) PIECES:Record({"models/props_c17/furniturewashingmachine001a.mdl", "#", "#", 2, "", "-0.05,0.006,-21.922", "90,180,180"}) - -- end + end asmlib.Categorize("PHX Monorail") PIECES:Record({"models/props_phx/trains/monorail1.mdl", "#", "Straight Short", 1, "", "229.885559,0.23999,13.87915"}) PIECES:Record({"models/props_phx/trains/monorail1.mdl", "#", "Straight Short", 2, "", "-228.885254,0.239726,13.87915", "0,-180,0"}) @@ -2495,7 +2495,8 @@ else PIECES:Record({"models/props_phx/misc/iron_beam4.mdl", "#", "#", 2, "", "-201.413, 0.001, 5.002", "0,180,0"}) asmlib.Categorize("XQM Ball Rails",[[function(m) local g = m:gsub("models/xqm/rails/",""):gsub("/","_") - local r = g:match(".-_"):sub(1, -2); g = g:gsub(r.."_", "") + local r = g:match(".-_"); if(not r) then return end + r = r:sub(1, -2); g = g:gsub(r.."_", "") local t, n = g:match(".-_"), g:gsub("%.mdl","") if(t) then t = t:sub(1, -2); g = g:gsub(r.."_", "") if(r:find(t)) then n = n:gsub(t.."_", "") @@ -4832,15 +4833,80 @@ else PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_mid.mdl", "#", "#", 2, "", "0,-63,0", "0,-90,0"}) PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_long.mdl", "#", "#", 1, "", "0, 115,0", "0,90,0"}) PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_long.mdl", "#", "#", 2, "", "0,-115,0", "0,-90,0"}) - PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_2sec.mdl", "#", "#", 1, "", "91,25,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_2sec.mdl", "#", "#", 1, "", "91,24.5,0"}) PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_2sec.mdl", "#", "#", 2, "", "-24,-91,0", "0,-90,0"}) - PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_bend.mdl", "#", "#", 1, "", "91,25,0"}) - PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_bend.mdl", "#", "#", 2, "", "-24,-91,0", "0,-90,0"}) - - PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 1, "", " 112,24,0"}) - PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 2, "", "-3.5,-90,0", "0,-90,0"}) - PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 3, "", "-112,24,0", "0,-180,0"}) - + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_bend.mdl", "#", "#", 1, "", "91,27.015,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_bend.mdl", "#", "#", 2, "", "-27,-91,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 1, "", "112,24.4982,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 2, "", "-2.80149,-90,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_3sec.mdl", "#", "#", 3, "", "-112,24.362,0", "0,-180,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_bend_half.mdl", "#", "#", 1, "", "24.6314,19.6809,0", "0,45,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_pipe_bend_half.mdl", "#", "#", 2, "", "-6.55228,-65.1073,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_straight.mdl", "#", "#", 1, "", "0, 95,0", "0,90,0"}) + PIECES:Record({"models/scene_building/sewer_system/tunnel_straight.mdl", "#", "#", 2, "", "0,-95,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door.mdl", "#", "#", 1, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door_side.mdl", "#", "#", 1, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door_side.mdl", "#", "#", 2, "", "-43,0,0", "0,180,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door_side.mdl", "#", "#", 3, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door_sml.mdl", "#", "#", 1, "", "0,5,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_1door_sml.mdl", "#", "#", 2, "", "0,-5,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_l.mdl", "#", "#", 1, "", "43,-4,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_l.mdl", "#", "#", 2, "", "0, 47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_l.mdl", "#", "#", 3, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_opp.mdl", "#", "#", 1, "", "0, 47,0", "0, 90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_opp.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_opp_small.mdl", "#", "#", 1, "", "0, 31,0", "0, 90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_opp_small.mdl", "#", "#", 2, "", "0,-31,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_r.mdl", "#", "#", 1, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_r.mdl", "#", "#", 2, "", "-43,-4,0", "0,180,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_r.mdl", "#", "#", 3, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_side.mdl", "#", "#", 1, "", "43,0,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_side.mdl", "#", "#", 2, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_side.mdl", "#", "#", 3, "", "-43,0,0", "0,180,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_2door_side.mdl", "#", "#", 4, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_3door.mdl", "#", "#", 1, "", "43,-4,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_3door.mdl", "#", "#", 2, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_3door.mdl", "#", "#", 3, "", "-43,-4,0","0,180,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_3door.mdl", "#", "#", 4, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector.mdl", "#", "#", 1, "", "0, 47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector.mdl", "#", "#", 2, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_3way.mdl", "#", "#", 1, "", "2,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_3way.mdl", "#", "#", 2, "", "-45,0,0", "0,-180,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_3way.mdl", "#", "#", 3, "", "2,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_4way.mdl", "#", "#", 1, "", "47,0,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_4way.mdl", "#", "#", 2, "", "0,47,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_4way.mdl", "#", "#", 3, "", "-47,0,0", "0,-180,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_4way.mdl", "#", "#", 4, "", "0,-47,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_corner.mdl", "#", "#", 1, "", "-45,2,0", "0,180,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_corner.mdl", "#", "#", 2, "", "2,-45,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_hallways/hall_connector_deadend.mdl", "#", "#", 1, "", "0,-45,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/1door.mdl", "#", "#", 1, "", "0,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/1door_l.mdl", "#", "#", 1, "", "-64,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/1door_r.mdl", "#", "#", 1, "", "64,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp.mdl", "#", "#", 1, "", "-64,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp.mdl", "#", "#", 2, "", "-64,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp_l.mdl", "#", "#", 1, "", "-64,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp_l.mdl", "#", "#", 2, "", "64,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp_ml.mdl", "#", "#", 1, "", "-64,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp_ml.mdl", "#", "#", 2, "", "0,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp_mr.mdl", "#", "#", 1, "", "64,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp_mr.mdl", "#", "#", 2, "", "0,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp_r.mdl", "#", "#", 1, "", "64,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opp_r.mdl", "#", "#", 2, "", "-64,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opposites.mdl", "#", "#", 1, "", "0,123,0", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_opposites.mdl", "#", "#", 2, "", "0,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_sides.mdl", "#", "#", 1, "", "123,0,0"}) + PIECES:Record({"models/scene_building/small_rooms/2door_sides.mdl", "#", "#", 2, "", "0,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/3door.mdl", "#", "#", 1, "", "123,0,0"}) + PIECES:Record({"models/scene_building/small_rooms/3door.mdl", "#", "#", 2, "", "0, 123,0", "0, 90,0"}) + PIECES:Record({"models/scene_building/small_rooms/3door.mdl", "#", "#", 3, "", "0,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/4door.mdl", "#", "#", 1, "", "123,0,0"}) + PIECES:Record({"models/scene_building/small_rooms/4door.mdl", "#", "#", 2, "", "0, 123,0", "0, 90,0"}) + PIECES:Record({"models/scene_building/small_rooms/4door.mdl", "#", "#", 3, "", "-123,0,0", "0,180,0"}) + PIECES:Record({"models/scene_building/small_rooms/4door.mdl", "#", "#", 4, "", "0,-123,0", "0,-90,0"}) + PIECES:Record({"models/scene_building/small_rooms/stairs_straight.mdl", "#", "#", 1, "", "0,163,64", "0,90,0"}) + PIECES:Record({"models/scene_building/small_rooms/stairs_straight.mdl", "#", "#", 2, "", "0,-163,-64", "0,-90,0"}) if(gsMoDB == "SQL") then sqlCommit() end end diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index c36a58a9..20ff534c 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -1857,7 +1857,7 @@ function GetFrequentPieces(iCnt) local oRec = tSort[iD] -- Index arranged record ID if(oRec) then oRec = oRec.Rec -- Jump over to the record if(not oRec.Post) then -- Initialized. Not yet picked - local nT = (tmNow - oRec.Used) -- Time to display + local nT = (tmNow - (tonumber(oRec.Used) or 0)) local tD = {oRec.Slot, oRec.Type, oRec.Name, oRec.Size} frUsed.Size = (frUsed.Size + 1) -- Increment size tableInsert(frUsed, {Time = nT, Data = tD}) @@ -2278,20 +2278,19 @@ end ]] function LocatePOA(oRec, ivPoID) if(not oRec) then LogInstance("Missing record"); return nil end - local sMo = oRec.Slot - local tOffs = oRec.Offs; if(not tOffs) then + local sMo, tOffs = oRec.Slot, oRec.Offs; if(not tOffs) then LogInstance("Missing offsets for "..GetReport(oRec.Slot)); return nil end local iPoID = tonumber(ivPoID); if(iPoID) then iPoID = mathFloor(iPoID) else LogInstance("ID mismatch "..GetReport(ivPoID)); return nil end local stPOA = tOffs[iPoID]; if(not IsHere(stPOA)) then LogInstance("Missing ID "..GetReport(iPoID, oRec.Slot)); return nil end if(oRec.Post) then oRec.Post = nil -- Transforming has started - for ID = 1, oRec.Size do - local tPOA = tOffs[ID] - local oP, oO, oA = tPOA.P, tPOA.O, tPOA.A - local sP, sO, sA = oP:Raw(), oO:Raw(), oA:Raw() - if(sO) then tPOA.O:Decode(sO, sM, "Pos") end - if(sA) then tPOA.A:Decode(sA, sM, "Ang") end + for ID = 1, oRec.Size do -- Loop trough all the points and process DB spawn + local tPOA = tOffs[ID] -- Extract current offset and localize raw values + local oP, oO, oA = tPOA.P, tPOA.O, tPOA.A -- POA object pointers + local sP, sO, sA = oP:Raw(), oO:Raw(), oA:Raw() -- POA raw values + if(sO) then tPOA.O:Decode(sO, sM, "Pos") end -- Process origin + if(sA) then tPOA.A:Decode(sA, sM, "Ang") end -- Process angle if(sP) then tPOA.P:Decode(sP, sM, "Pos", tPOA.O:Get()) end LogInstance("Spawn "..GetReport(ID, tPOA.P:String(), tPOA.O:String(), tPOA.A:String())) end -- Loop and transform all the POA configuration at once. Game model slot will be taken @@ -2313,6 +2312,7 @@ function RegisterPOA(stData, ivID, sP, sO, sA) if(not stData.Offs) then if(iID ~= 1) then LogInstance("Mismatch ID "..GetReport(iID, stData.Slot)); return nil end stData.Offs = {}; stData.Post = true -- Mark post-process on spawn + if(not IsHere(stData.Used)) then stData.Used = 0 end end local tOffs = stData.Offs; if(tOffs[iID]) then LogInstance("Exists ID "..GetReport(iID)); return tOffs @@ -3598,8 +3598,8 @@ function ExportSyncDB(sDelim) LogInstance(sHew.." SQL exec error "..GetReport(sqlLastError(), Q)); return false end if(not IsHere(qData) or IsEmpty(qData)) then F:Flush(); F:Close() LogInstance(sHew.." No data found "..GetReport(Q)); return false end - stPan.Size = #qData; F:Write("# Query("..stPan.Size.."):<"..Q..">\n") - local coTy, cT = makTab:GetColumnName(2), nil + F:Write("# Query("..#qData.."):<"..Q..">\n") + local coTy, cT = makTab:GetColumnName(2), nil for iD = 1, #qData do local vRow = qData[iD] if(not cT or cT ~= vRow[coTy]) then cT = vRow[coTy] local sW = tostring(WorkshopID(cT) or sMiss) @@ -4388,7 +4388,7 @@ function ExportTypeDSV(sType, sDelim) if(sCP == coLI and (tonumber(vCP) or 0) == 1) then local qrMo = makP:Match(rwM, 1, true) local Q = makA:Get(qInxA, qrMo); if(not IsHere(Q)) then local tQ = defA.Query[sFunc] - Q = makA:Select():Where(unpack(tQ.W)):Order(unpack(tW.O)):Store(qInxA):Get(qInxA, qrMo) end + Q = makA:Select():Where(unpack(tQ.W)):Order(unpack(tQ.O)):Store(qInxA):Get(qInxA, qrMo) end if(not IsHere(Q)) then P:Flush(); P:Close(); A:Flush(); A:Close() LogInstance("("..fPref..") Build statement failed",defA.Nick); return qsNov end if(iP == 1) then A:Write("# Query:<"..Q..">\n") end From 26712c78a2a86a8a51479c8d22716d7c10663c9e Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Fri, 27 Dec 2024 17:04:44 +0200 Subject: [PATCH 113/114] Fixed: Wire-mod extension tester Fixed: Translation not showing database mode --- data/expression2/TA_Wire_Test.txt | 4 ++-- lua/trackassembly/trackasmlib.lua | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/data/expression2/TA_Wire_Test.txt b/data/expression2/TA_Wire_Test.txt index 2752946a..4f1e0d7c 100644 --- a/data/expression2/TA_Wire_Test.txt +++ b/data/expression2/TA_Wire_Test.txt @@ -57,10 +57,10 @@ if(first() || dupefinished()) }else{ error("Additions line fail "+M) } P1 = trackasmlibGetProperty() - if(P1[3,string] == "Metal") + if(P1[3,string] == "Liquid") { P2 = trackasmlibGetProperty(P1[3,string]) - if(P2[5, string] == "crowbar") + if(P2[1, string] == "slime") { print("Property type OK <"+P2[5, string]+">") }else{ error("Property type fail <"+P2[5, string]+">")} diff --git a/lua/trackassembly/trackasmlib.lua b/lua/trackassembly/trackasmlib.lua index 20ff534c..6cb38711 100644 --- a/lua/trackassembly/trackasmlib.lua +++ b/lua/trackassembly/trackasmlib.lua @@ -3972,7 +3972,7 @@ function TranslateDSV(sTable, sPref, sDelim) local defTab = makTab:GetDefinition(); if(not IsHere(defTab)) then LogInstance(sHew.." Missing table definition",sTable); return false end local sDSV = GetLibraryPath(GetOpVar("DIRPATH_DSV"), fPref, defTab.Name) - local sEXP = GetLibraryPath(GetOpVar("DIRPATH_EXP"), "[tr]"..fPref, defTab.Name) + local sEXP = GetLibraryPath(GetOpVar("DIRPATH_EXP"), "["..sMoDB.."-tr]"..fPref, defTab.Name) local D = fileOpen(sDSV, "rb", "DATA"); if(not D) then LogInstance(sHew.." Open fail: "..sDSV,sTable); return false end local I = fileOpen(sEXP, "wb", "DATA"); if(not I) then From fedd0b055682ea63c9dfd6b3d13bd9e63109a547 Mon Sep 17 00:00:00 2001 From: dvdvideo1234 Date: Fri, 27 Dec 2024 17:10:24 +0200 Subject: [PATCH 114/114] Equalize and mark the version --- lua/autorun/trackassembly_init.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/autorun/trackassembly_init.lua b/lua/autorun/trackassembly_init.lua index 8c1c0569..66fb1545 100644 --- a/lua/autorun/trackassembly_init.lua +++ b/lua/autorun/trackassembly_init.lua @@ -87,7 +87,7 @@ local asmlib = trackasmlib; if(not asmlib) then -- Module present ------------ CONFIGURE ASMLIB ------------ asmlib.InitBase("track","assembly") -asmlib.SetOpVar("TOOL_VERSION","8.816") +asmlib.SetOpVar("TOOL_VERSION","9.765") ------------ CONFIGURE GLOBAL INIT OPVARS ------------