Exemple #1
0
        // 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);
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        // 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);
        }