using System; using System.Collections.Generic; using Oxide.Core.Plugins; using UnityEngine; namespace Oxide.Plugins { [Info("WorkbenchUpdater", "Thortazo", "1.0.0")] [Description("Actualiza todos los workbenches para añadir la entidad crate_tools si falta.")] public class WorkbenchUpdater : RustPlugin { private const string ChildPrefab = "assets/bundled/prefabs/radtown/crate_tools.prefab"; // Este método se llama cuando el servidor se inicializa private void OnServerInitialized() { UpdateAllWorkbenches(); } // Este método se llama cuando se guarda un nuevo mapa private void OnNewSave() { UpdateAllWorkbenches(); } // Este método se llama cada vez que se genera una nueva entidad en el juego private void OnEntitySpawned(BaseNetworkable entity) { if (entity is Workbench workbench) { AddCrateToolsIfMissing(workbench); } } private void UpdateAllWorkbenches() { // Obtener todos los workbenches en el servidor var workbenches = UnityEngine.Object.FindObjectsOfType(); foreach (var workbench in workbenches) { AddCrateToolsIfMissing(workbench); } } private void AddCrateToolsIfMissing(Workbench workbench) { // Comprobar si el workbench ya tiene la entidad crate_tools como hijo foreach (var child in workbench.children) { if (child != null && child.PrefabName == ChildPrefab) { // Ya tiene crate_tools, no hacer nada return; } } // Crear la entidad crate_tools y añadirla al workbench BaseEntity childEntity = GameManager.server.CreateEntity(ChildPrefab, workbench.transform.position); if (childEntity != null) { childEntity.SetParent(workbench, worldPositionStays: true); if (workbench.PrefabName.Contains("workbench1")) { childEntity.transform.localPosition = new Vector3(0.28f, 0.8f, -0.1f); childEntity.transform.localRotation = Quaternion.Euler(0f, 0f, 0f); } else if (workbench.PrefabName.Contains("workbench2")) { childEntity.transform.localPosition = new Vector3(0.28f, 0.8f, -0.1f); childEntity.transform.localRotation = Quaternion.Euler(0f, 0f, 0f); } else if (workbench.PrefabName.Contains("workbench3")) { childEntity.transform.localPosition = new Vector3(0.35f, 0.7f, -0.15f); childEntity.transform.localRotation = Quaternion.Euler(0f, 0f, 0f); } childEntity.Spawn(); } } } }