// Return value: // - null = continue with default behaviour of hammer hit // - anything else: prevent default behaviour. private object HandleDowngradeRequest(BasePlayer player, Crafter crafter) { float lastRequest = lastHammerHit[player]; if (Time.time - lastRequest > Constants.HammerConfirmTime) // Confirm the downgrade { string message = Lang.Translate(player, "hp-message", crafter.Recycler.Health(), crafter.Recycler.MaxHealth()); message += "\n\n" + Lang.Translate(player, "hammer-confirm-downgrade"); lastHammerHit[player] = Time.time; player.ShowScreenMessage(message, Constants.HammerConfirmTime); return(true); } lastHammerHit[player] = 0; // Reset time CrafterManager.DestroyCrafter(crafter, true, false); FxManager.PlayFx(crafter.Position, Constants.UpgradeMetalFxPrefab); player.HideScreenMessage(); foreach (var itemAmount in UpgradeCost) { player.GiveItem(ItemManager.CreateByItemID(itemAmount.itemid, (int)itemAmount.amount)); } // Refund codelock if one is attached if (crafter.CodeLock != null) { var item = ItemManager.Create(ItemManager.FindItemDefinition("lock.code")); player.GiveItem(item); } return(true); }
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); } } }
// Return value: // - null = continue with default behaviour of hammer hit // - anything else: prevent default behaviour. private object HandleUpgradeRequest(BasePlayer player, ResearchTable researchTable) { if (UpgradeCost.Count > 0) { if (!player.CanCraft(UpgradeCost)) { StringBuilder builder = new StringBuilder(); foreach (var ingredient in UpgradeCost) { builder.AppendLine("- x" + ingredient.amount.ToString("0") + " " + ingredient.itemDef.displayName.english); } string ingredientsStr = builder.ToString(); player.ShowScreenMessage(Lang.Translate(player, "ingredients-missing-youneed") + "\n" + ingredientsStr, 10, TextAnchor.MiddleLeft); return(true); } } float lastHit = lastHammerHit[player]; if (Time.time - lastHit > Constants.HammerConfirmTime) // Confirm the upgrade { lastHammerHit[player] = Time.time; player.ShowScreenMessage(Lang.Translate(player, "hammer-confirm-upgrade"), Constants.HammerConfirmTime); return(true); } lastHammerHit[player] = 0; // Reset time foreach (var ingredient in UpgradeCost) { List <Item> takenItems = new List <Item>(); player.inventory.Take(takenItems, ingredient.itemid, (int)ingredient.amount); } CrafterManager.CreateCrafter(researchTable); FxManager.PlayFx(researchTable.ServerPosition, Constants.UpgradeTopTierFxPrefab); player.HideScreenMessage(); return(true); }