Good afternoon - could you tell me how to spawn these buildings? If I have UNITY and models of all parts of the house - just tell me how
Attachments
-
1.8 MB Views: 17
Right. The Python version was buggy because I screwed It, but the JS version works perfectly.There used to be a plugin I think by Dretax in which you could copy and past buildings, in which it can be modified with the files you currently have with the buildings, and be pasted in game. Unfortunately I could not find it, so I guess it got taken down. But it might be on Pluton, otherwise Dretax may have it.
var prefabs = [
["SingleBed", ";deploy_singlebed"],
["MetalCeiling", ";struct_metal_ceiling"],
["MetalDoorFrame", ";struct_metal_doorframe"],
["MetalFoundation", ";struct_metal_foundation"],
["MetalPillar", ";struct_metal_pillar"],
["MetalRamp", ";struct_metal_ramp"],
["MetalStairs", ";struct_metal_stairs"],
["MetalWall", ";struct_metal_wall"],
["MetalWindowFrame", ";struct_metal_windowframe"],
["WoodCeiling", ";struct_wood_ceiling"],
["WoodDoorFrame", ";struct_wood_doorway"],
["WoodFoundation", ";struct_wood_foundation"],
["WoodPillar", ";struct_wood_pillar"],
["WoodRamp", ";struct_wood_ramp"],
["WoodStairs", ";struct_wood_stairs"],
["WoodWall", ";struct_wood_wall"],
["WoodWindowFrame", ";struct_wood_windowframe"],
["Campfire", ";deploy_camp_bonfire"],
["ExplosiveCharge", ";explosive_charge"],
["Furnace", ";deploy_furnace"],
["LargeWoodSpikeWall", ";deploy_largewoodspikewall"],
["WoodBoxLarge", ";deploy_wood_storage_large"],
["MetalDoor", ";deploy_metal_door"],
["MetalBarsWindow", ";deploy_metalwindowbars"],
["RepairBench", ";deploy_repairbench"],
["SleepingBagA", ";deploy_camp_sleepingbag"],
["SmallStash", ";deploy_small_stash"],
["WoodSpikeWall", ";deploy_woodspikewall"],
["Barricade_Fence_Deployable", ";deploy_wood_barricade"],
["WoodGate", ";deploy_woodgate"],
["WoodGateway", ";deploy_woodgateway"],
["Wood_Shelter", ";deploy_wood_shelter"],
["WoodBox", ";deploy_wood_box"],
["WoodenDoor", ";deploy_wood_door"],
["Workbench", ";deploy_workbench"]
];
function On_Command(Player, cmd, args)
{
switch(cmd)
{
case 'record':
var state = DataStore.Get('Recorder', Player.SteamID);
var name = args[0];
if (state == true) {
Player.Message('Building Recorder : Already Recording!');
break;
}
DataStore.Add('Recorder', Player.SteamID, true);
DataStore.Add('Recorder_Name', Player.SteamID, name);
Player.Message("Recording " + name + ".ini (/stop to finish!)");
break;
case 'spawn':
var file = Plugin.GetIni("Buildings\\" + args[0]);
if (file == null)
{
Player.Message('Building not found !');
break;
}
DataStore.Flush('SpawnedData' + Player.SteamID);
DataStore.Remove('RecorderSMs', Player.SteamID);
var playerFront = Util.Infront(Player, 10);
playerFront.y = World.GetGround(playerFront.x, playerFront.z);
var cpt = file.Count();
for (var i = 0; i < cpt; i++)
{
var entPos = Util.CreateVector(file.GetSetting('Part' + i, 'PosX'), file.GetSetting('Part' + i, 'PosY'), file.GetSetting('Part' + i, 'PosZ'));
var spawnPos = Util.CreateVector(entPos.x + playerFront.x, entPos.y + playerFront.y, entPos.z + playerFront.z);
var spawnRot = Util.CreateQuat(file.GetSetting('Part' + i, 'RotX'), file.GetSetting('Part' + i, 'RotY'), file.GetSetting('Part' + i, 'RotZ'), file.GetSetting('Part' + i, 'RotW'));
var sm = DataStore.Get('RecorderSMs', Player.SteamID);
if (sm == null)
{
sm = World.CreateSM(Player, spawnPos.x, spawnPos.y, spawnPos.z, spawnRot);
DataStore.Add('RecorderSMs', Player.SteamID, sm);
}
var go = World.Spawn(file.GetSetting('Part' + i, 'Prefab'), spawnPos.x, spawnPos.y, spawnPos.z, spawnRot);
if (go.IsDeployableObject())
{
go.ChangeOwner(Player);
DataStore.Add('SpawnedData' + Player.SteamID, 'Part' + i, go.Object.gameObject);
if (args.Length == 2 && args[1] == "protect")
World.Protect(go);
}
else if (go.IsStructure())
{
sm.AddStructureComponent(go.Object);
DataStore.Add('SpawnedData' + Player.SteamID, 'Part' + i, go.Object.gameObject);
Player.Message("Added!");
}
else
DataStore.Add('SpawnedData' + Player.SteamID, 'Part' + i, go);
}
Player.Message(args[0] + " was spawned !");
break;
case 'cancel':
var cpt = DataStore.Count('SpawnedData' + Player.SteamID);
for (var i = 0; i < cpt; i++)
{
var ent = DataStore.Get('SpawnedData' + Player.SteamID, 'Part' + i);
Util.DestroyObject(ent);
}
DataStore.Add('Recorder', Player.SteamID, false);
DataStore.Flush('RecordedData' + Player.SteamID);
DataStore.Flush('SpawnedData' + Player.SteamID);
DataStore.Remove('RecorderInit', Player.SteamID);
DataStore.Remove('RecorderSMs', Player.SteamID);
DataStore.Flush('SpawnedData' + Player.SteamID);
Player.Message("Cancelled recording");
break;
case 'stop':
var name = DataStore.Get("Recorder_Name", Player.SteamID);
var file = Plugin.GetIni("Buildings\\" + name);
if (file != null)
{
var num = Math.floor((Math.random()*100)+1);
Player.Message(name + ".ini already exists ! renaming..");
name = DataStore.Get("Recorder_Name", Player.SteamID) + num;
}
file = Plugin.CreateIni("Buildings\\" + name);
var loc = DataStore.Get('RecorderInit', Player.SteamID);
loc.y = World.GetGround(loc.x, loc.z);
var cpt = DataStore.Count('RecordedData' + Player.SteamID);
for (var i = 0; i < cpt; i++)
{
var ent = DataStore.Get('RecordedData' + Player.SteamID, 'Part' + i);
var entPos = Util.CreateVector((ent.X - loc.x), (ent.Y - loc.y), (ent.Z - loc.z));
var spawnRot = ent.Object.transform.rotation;
file.AddSetting('Part' + i, 'Prefab', GetPrefabName(ent.Name));
file.AddSetting('Part' + i, 'PosX', entPos.x);
file.AddSetting('Part' + i, 'PosY', entPos.y);
file.AddSetting('Part' + i, 'PosZ', entPos.z);
file.AddSetting('Part' + i, 'RotX', spawnRot.x);
file.AddSetting('Part' + i, 'RotY', spawnRot.y);
file.AddSetting('Part' + i, 'RotZ', spawnRot.z);
file.AddSetting('Part' + i, 'RotW', spawnRot.w);
}
DataStore.Add('Recorder', Player.SteamID, false);
DataStore.Flush('RecordedData' + Player.SteamID);
DataStore.Flush('SpawnedData' + Player.SteamID);
DataStore.Remove('RecorderInit', Player.SteamID);
DataStore.Remove('RecorderSMs', Player.SteamID);
DataStore.Flush('SpawnedData' + Player.SteamID);
file.Save();
Player.Message(name + ".ini was saved !");
break;
}
}
function On_EntityDeployed(Player, e)
{
var state = DataStore.Get('Recorder', Player.SteamID);
if (state != null)
{
if (state)
{
var cpt = DataStore.Count('RecordedData' + Player.SteamID);
if (cpt == 0)
DataStore.Add('RecorderInit', Player.SteamID, Util.CreateVector(e.X, e.Y, e.Z));
DataStore.Add('RecordedData' + Player.SteamID, 'Part' + cpt, e);
}
}
}
function GetPrefabName(name)
{
for(var i = 0; i < prefabs.length; i++)
{
if(prefabs[i][0] == name)
{
Util.Log(prefabs[i][1]);
return prefabs[i][1];
}
}
}
Is this in the original game? I don't actually think that rust has a prefab prepared for this.Good afternoon - could you tell me how to spawn these buildings? If I have UNITY and models of all parts of the house - just tell me how
it's an old prefab in the game - just rotated and positioned as calculated in oxide - you need to understand how to fougerite to doRight. The Python version was buggy because I screwed It, but the JS version works perfectly.
Is this in the original game? I don't actually think that rust has a prefab prepared for this.JavaScript:var prefabs = [ ["SingleBed", ";deploy_singlebed"], ["MetalCeiling", ";struct_metal_ceiling"], ["MetalDoorFrame", ";struct_metal_doorframe"], ["MetalFoundation", ";struct_metal_foundation"], ["MetalPillar", ";struct_metal_pillar"], ["MetalRamp", ";struct_metal_ramp"], ["MetalStairs", ";struct_metal_stairs"], ["MetalWall", ";struct_metal_wall"], ["MetalWindowFrame", ";struct_metal_windowframe"], ["WoodCeiling", ";struct_wood_ceiling"], ["WoodDoorFrame", ";struct_wood_doorway"], ["WoodFoundation", ";struct_wood_foundation"], ["WoodPillar", ";struct_wood_pillar"], ["WoodRamp", ";struct_wood_ramp"], ["WoodStairs", ";struct_wood_stairs"], ["WoodWall", ";struct_wood_wall"], ["WoodWindowFrame", ";struct_wood_windowframe"], ["Campfire", ";deploy_camp_bonfire"], ["ExplosiveCharge", ";explosive_charge"], ["Furnace", ";deploy_furnace"], ["LargeWoodSpikeWall", ";deploy_largewoodspikewall"], ["WoodBoxLarge", ";deploy_wood_storage_large"], ["MetalDoor", ";deploy_metal_door"], ["MetalBarsWindow", ";deploy_metalwindowbars"], ["RepairBench", ";deploy_repairbench"], ["SleepingBagA", ";deploy_camp_sleepingbag"], ["SmallStash", ";deploy_small_stash"], ["WoodSpikeWall", ";deploy_woodspikewall"], ["Barricade_Fence_Deployable", ";deploy_wood_barricade"], ["WoodGate", ";deploy_woodgate"], ["WoodGateway", ";deploy_woodgateway"], ["Wood_Shelter", ";deploy_wood_shelter"], ["WoodBox", ";deploy_wood_box"], ["WoodenDoor", ";deploy_wood_door"], ["Workbench", ";deploy_workbench"] ]; function On_Command(Player, cmd, args) { switch(cmd) { case 'record': var state = DataStore.Get('Recorder', Player.SteamID); var name = args[0]; if (state == true) { Player.Message('Building Recorder : Already Recording!'); break; } DataStore.Add('Recorder', Player.SteamID, true); DataStore.Add('Recorder_Name', Player.SteamID, name); Player.Message("Recording " + name + ".ini (/stop to finish!)"); break; case 'spawn': var file = Plugin.GetIni("Buildings\\" + args[0]); if (file == null) { Player.Message('Building not found !'); break; } DataStore.Flush('SpawnedData' + Player.SteamID); DataStore.Remove('RecorderSMs', Player.SteamID); var playerFront = Util.Infront(Player, 10); playerFront.y = World.GetGround(playerFront.x, playerFront.z); var cpt = file.Count(); for (var i = 0; i < cpt; i++) { var entPos = Util.CreateVector(file.GetSetting('Part' + i, 'PosX'), file.GetSetting('Part' + i, 'PosY'), file.GetSetting('Part' + i, 'PosZ')); var spawnPos = Util.CreateVector(entPos.x + playerFront.x, entPos.y + playerFront.y, entPos.z + playerFront.z); var spawnRot = Util.CreateQuat(file.GetSetting('Part' + i, 'RotX'), file.GetSetting('Part' + i, 'RotY'), file.GetSetting('Part' + i, 'RotZ'), file.GetSetting('Part' + i, 'RotW')); var sm = DataStore.Get('RecorderSMs', Player.SteamID); if (sm == null) { sm = World.CreateSM(Player, spawnPos.x, spawnPos.y, spawnPos.z, spawnRot); DataStore.Add('RecorderSMs', Player.SteamID, sm); } var go = World.Spawn(file.GetSetting('Part' + i, 'Prefab'), spawnPos.x, spawnPos.y, spawnPos.z, spawnRot); if (go.IsDeployableObject()) { go.ChangeOwner(Player); DataStore.Add('SpawnedData' + Player.SteamID, 'Part' + i, go.Object.gameObject); if (args.Length == 2 && args[1] == "protect") World.Protect(go); } else if (go.IsStructure()) { sm.AddStructureComponent(go.Object); DataStore.Add('SpawnedData' + Player.SteamID, 'Part' + i, go.Object.gameObject); Player.Message("Added!"); } else DataStore.Add('SpawnedData' + Player.SteamID, 'Part' + i, go); } Player.Message(args[0] + " was spawned !"); break; case 'cancel': var cpt = DataStore.Count('SpawnedData' + Player.SteamID); for (var i = 0; i < cpt; i++) { var ent = DataStore.Get('SpawnedData' + Player.SteamID, 'Part' + i); Util.DestroyObject(ent); } DataStore.Add('Recorder', Player.SteamID, false); DataStore.Flush('RecordedData' + Player.SteamID); DataStore.Flush('SpawnedData' + Player.SteamID); DataStore.Remove('RecorderInit', Player.SteamID); DataStore.Remove('RecorderSMs', Player.SteamID); DataStore.Flush('SpawnedData' + Player.SteamID); Player.Message("Cancelled recording"); break; case 'stop': var name = DataStore.Get("Recorder_Name", Player.SteamID); var file = Plugin.GetIni("Buildings\\" + name); if (file != null) { var num = Math.floor((Math.random()*100)+1); Player.Message(name + ".ini already exists ! renaming.."); name = DataStore.Get("Recorder_Name", Player.SteamID) + num; } file = Plugin.CreateIni("Buildings\\" + name); var loc = DataStore.Get('RecorderInit', Player.SteamID); loc.y = World.GetGround(loc.x, loc.z); var cpt = DataStore.Count('RecordedData' + Player.SteamID); for (var i = 0; i < cpt; i++) { var ent = DataStore.Get('RecordedData' + Player.SteamID, 'Part' + i); var entPos = Util.CreateVector((ent.X - loc.x), (ent.Y - loc.y), (ent.Z - loc.z)); var spawnRot = ent.Object.transform.rotation; file.AddSetting('Part' + i, 'Prefab', GetPrefabName(ent.Name)); file.AddSetting('Part' + i, 'PosX', entPos.x); file.AddSetting('Part' + i, 'PosY', entPos.y); file.AddSetting('Part' + i, 'PosZ', entPos.z); file.AddSetting('Part' + i, 'RotX', spawnRot.x); file.AddSetting('Part' + i, 'RotY', spawnRot.y); file.AddSetting('Part' + i, 'RotZ', spawnRot.z); file.AddSetting('Part' + i, 'RotW', spawnRot.w); } DataStore.Add('Recorder', Player.SteamID, false); DataStore.Flush('RecordedData' + Player.SteamID); DataStore.Flush('SpawnedData' + Player.SteamID); DataStore.Remove('RecorderInit', Player.SteamID); DataStore.Remove('RecorderSMs', Player.SteamID); DataStore.Flush('SpawnedData' + Player.SteamID); file.Save(); Player.Message(name + ".ini was saved !"); break; } } function On_EntityDeployed(Player, e) { var state = DataStore.Get('Recorder', Player.SteamID); if (state != null) { if (state) { var cpt = DataStore.Count('RecordedData' + Player.SteamID); if (cpt == 0) DataStore.Add('RecorderInit', Player.SteamID, Util.CreateVector(e.X, e.Y, e.Z)); DataStore.Add('RecordedData' + Player.SteamID, 'Part' + cpt, e); } } } function GetPrefabName(name) { for(var i = 0; i < prefabs.length; i++) { if(prefabs[i][0] == name) { Util.Log(prefabs[i][1]); return prefabs[i][1]; } } }