void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info) { float newHealth = entity.Health() - info.damageTypes.Total(); // Empty recycler inventory if it's about to be killed to avoid dropping hidden items. if (newHealth <= 0) { var recycler = entity as Recycler; if (!(entity is Recycler)) { return; } var crafter = CrafterManager.GetCrafter(recycler); if (crafter == null) { return; } recycler.inventory.Clear(); recycler.inventory.itemList.Clear(); } }
void OnEntityKill(BaseNetworkable entity) { if (!serverInitialized) // Check if server is initialized. This hook tends to call on startup before OnServerInitialized has been called. { return; } var researchTable = entity as ResearchTable; if (researchTable != null) { upgradeableEntities.Remove(researchTable); } var recycler = entity as Recycler; if (recycler == null) { return; } var crafter = CrafterManager.GetCrafter(recycler); if (crafter == null) { return; } CrafterManager.DestroyCrafter(crafter, false, false); }
object OnRecyclerToggle(Recycler recycler, BasePlayer player) { var crafter = CrafterManager.GetCrafter(recycler); if (crafter == null) { return(null); } if (!crafter.PlayerCanAccess(player)) { crafter.PlayLockedSound(); return(true); } return(null); }
void OnPlayerInput(BasePlayer player, InputState input) { if (input.WasJustPressed(BUTTON.FIRE_PRIMARY)) { var activeItem = player.GetActiveItem(); if (activeItem?.info.itemid != -975723312) // Codelock { return; } var ray = player.eyes.HeadRay(); RaycastHit hit; if (!Physics.Raycast(ray, out hit, 2.2f, 1 << (int)Layer.Deployed)) { return; } var recycler = hit.transform.GetComponentInParent <Recycler>(); if (recycler == null) { return; } if (player.IsBuildingBlocked(recycler.ServerPosition, recycler.ServerRotation, recycler.bounds)) { return; } var crafter = CrafterManager.GetCrafter(recycler); if (crafter == null) { return; } if (crafter.AddCodeLock()) { activeItem.UseItem(); FxManager.PlayFx(crafter.CodeLock.ServerPosition, Constants.CodelockPlaceSoundPrefab); } } }
void OnEntityGroundMissing(BaseEntity entity) { var recycler = entity as Recycler; if (recycler == null) { return; } var crafter = CrafterManager.GetCrafter(recycler); if (crafter == null) { return; } // Empty recycler, otherwise the hidden items inside it will drop into the world. recycler.inventory.Clear(); recycler.inventory.itemList.Clear(); }
private void OnLootEntity(BasePlayer player, BaseEntity entity) { var recycler = entity as Recycler; if (recycler == null) { return; } var crafter = CrafterManager.GetCrafter(recycler); if (crafter == null) { return; } // Open the output container instead of the recycler ui. NextFrame(() => { if (!crafter.PlayerCanAccess(player)) { crafter.PlayLockedSound(); player.CloseInventory(); return; } player.inventory.loot.Clear(); player.inventory.loot.StartLootingEntity(crafter.Output); player.inventory.loot.AddContainer(crafter.OutputInventory); player.inventory.loot.SendImmediate(); player.ClientRPCPlayer(null, player, "RPC_OpenLootPanel", crafter.Output.lootPanelName); if (crafter.IsLocked()) { crafter.PlayAccessSound(); } }); }
private object OnHammerHit(BasePlayer player, HitInfo info) { var entity = info.HitEntity as BaseCombatEntity; var recycler = entity as Recycler; var researchTable = entity as ResearchTable; if (entity == null || (recycler == null && researchTable == null)) { return(null); } Func <string> hpMessage = () => { return(Lang.Translate(player, "hp-message", entity.Health(), entity.MaxHealth())); }; // Don't allow upgrading/downgrading/repairing if there's less than 8 seconds since the entity was attacked. if (entity.SecondsSinceAttacked < 8) { if (recycler != null && CrafterManager.ContainsRecycler(recycler)) { // Show hp info if repairing is blocked. player.ShowScreenMessage(hpMessage(), 2); } return(null); } if (!lastHammerHit.ContainsKey(player)) { lastHammerHit[player] = 0; } ((DecayEntity)entity).DecayTouch(); // Reset decay // Make sure entity is full health, otherwise repair. if (entity.Health() < entity.MaxHealth()) { if (recycler == null) { return(null); } if (!CrafterManager.ContainsRecycler(recycler)) { return(null); } if (Time.time - lastHammerHit[player] > Constants.HammerConfirmTime) { player.ShowScreenMessage(hpMessage() + "\n\n" + Lang.Translate(player, "hit-again-to-repair"), Constants.HammerConfirmTime); lastHammerHit[player] = Time.time; return(true); } lastHammerHit[player] = Time.time; player.HideScreenMessage(); entity.DoRepair(player); player.ShowScreenMessage(hpMessage(), 2); // Reset last hammer hit so that the player won't accidentally downgrade/upgrade with the next hammer hit. if (entity.Health() >= entity.MaxHealth()) { lastHammerHit[player] = 0; } return(true); } // Only allow upgrading/downgrading if we have building permission. if (player.IsBuildingBlocked(entity.ServerPosition, entity.ServerRotation, entity.bounds)) { if (recycler != null && CrafterManager.ContainsRecycler(recycler)) // Only show hp info if this is a crafter { // Show hp info if building blocked. player.ShowScreenMessage(hpMessage(), 2); } return(null); } // Check permission and if the entity owner is the current player. if (!permission.UserHasPermission(player.UserIDString, Constants.UsePermission) || entity.OwnerID != player.userID) { if (recycler != null && CrafterManager.ContainsRecycler(recycler)) { player.ShowScreenMessage(hpMessage(), 2); } return(null); } if (researchTable != null) // Upgrade to crafter (if less than 10 minutes since placement) { if (!upgradeableEntities.Contains(researchTable)) { return(null); } return(HandleUpgradeRequest(player, researchTable)); } var crafter = CrafterManager.GetCrafter(recycler); if (crafter == null) { return(null); } if (DateTime.UtcNow - crafter.CreationTime > TimeSpan.FromSeconds(Constants.TimeToUpgrade)) { player.ShowScreenMessage(hpMessage(), 2); return(null); } // Check if player has authed on potential codelock. if (!crafter.PlayerCanAccess(player)) { crafter.PlayLockedSound(); return(true); } return(HandleDowngradeRequest(player, crafter)); }