spawn

DFM Москва 101.2

Member
Member
Aug 23, 2016
66
-2
6
28
Parts Unknown
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

  • Безымянный.png
    Безымянный.png
    1.8 MB · Views: 17
I think he spawns the prefabs and rotate they to make something like that, but i would like too
 
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.
 
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.
 
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