spawn

Pilatus9

Member
Trusted Member
Member
Dec 23, 2016
32
1
8
35
I think he spawns the prefabs and rotate they to make something like that, but i would like too
 

Sturt

Plugin Developer
Plugin Developer
Jan 4, 2015
71
38
8
46
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.
 

DreTaX

Probably knows the answer...
Administrator
Jun 29, 2014
4,093
4,784
113
At your house.
github.com
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.
Right. The Python version was buggy because I screwed It, but the JS version works perfectly.
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];
        }
    }
}

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
Is this in the original game? I don't actually think that rust has a prefab prepared for this.
 

DFM Москва 101.2

Member
Member
Aug 23, 2016
66
-2
6
28
Parts Unknown
Right. The Python version was buggy because I screwed It, but the JS version works perfectly.
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];
        }
    }
}
Is this in the original game? I don't actually think that rust has a prefab prepared for this.
it's an old prefab in the game - just rotated and positioned as calculated in oxide - you need to understand how to fougerite to do