Beispiel #1
0
    private void OnDeath_UCE_LootRules()
    {
        lootRules.deathTime = NetworkTime.time;

        // ---------------------------------------------------------------------- Equipment

        for (int i = 0; i < equipment.slots.Count; ++i)
        {
            int      idx      = i;
            ItemSlot itemSlot = equipment.slots[i];

            if (itemSlot.amount > 0 && Random.value <= itemSlot.item.data.dropChance + lootRules.equipmentDropModifier)
            {
                Vector3 position = UCE_Tools.ReachableRandomUnitCircleOnNavMesh(transform.position, lootRules.radiusMultiplier, lootRules.dropSolverAttempts);

                GameObject drop = Instantiate(itemSlot.item.data.dropPrefab.gameObject, position, Quaternion.identity);

                drop.GetComponent <UCE_ItemDrop>().itemData = itemSlot.item.data;
                drop.GetComponent <UCE_ItemDrop>().amount   = itemSlot.amount;
                drop.GetComponent <UCE_ItemDrop>().item     = new Item(itemSlot.item.data);

#if _iMMOLOOTRULES && _iMMOITEMDROP
                drop.GetComponent <UCE_ItemDrop>().LiftRulesAfter  = lootRules.LiftRulesAfter;
                drop.GetComponent <UCE_ItemDrop>().LootVictorParty = lootRules.LootVictorParty;
                drop.GetComponent <UCE_ItemDrop>().LootVictorGuild = lootRules.LootVictorGuild;
#if _iMMOPVP
                drop.GetComponent <UCE_ItemDrop>().LootVictorRealm = lootRules.LootVictorRealm;
                drop.GetComponent <UCE_ItemDrop>().hashRealm       = hashRealm;
                drop.GetComponent <UCE_ItemDrop>().hashAlly        = hashAlly;
#endif
                drop.GetComponent <UCE_ItemDrop>().LootEverybody = lootRules.LootEverybody;

                drop.GetComponent <UCE_ItemDrop>().lastAggressor = this.lastAggressor;
                drop.GetComponent <UCE_ItemDrop>().owner         = this;
#endif

                itemSlot.amount      = 0;
                equipment.slots[idx] = itemSlot;

                NetworkServer.Spawn(drop);
            }
        }

        // ---------------------------------------------------------------------- Gold
        if (lootRules.goldDropPrefab != null && gold > 0)
        {
            Vector3 position = UCE_Tools.ReachableRandomUnitCircleOnNavMesh(transform.position, lootRules.radiusMultiplier, lootRules.dropSolverAttempts);

            GameObject drop = Instantiate(lootRules.goldDropPrefab.gameObject, position, Quaternion.identity);

            drop.GetComponent <UCE_ItemDrop>().amount = 0;
            int droppedGold = (int)(gold * lootRules.goldPercentage);
            drop.GetComponent <UCE_ItemDrop>().gold = droppedGold;
            gold -= droppedGold;

#if _iMMOLOOTRULES && _iMMOITEMDROP
            drop.GetComponent <UCE_ItemDrop>().LiftRulesAfter  = lootRules.LiftRulesAfter;
            drop.GetComponent <UCE_ItemDrop>().LootVictorParty = lootRules.LootVictorParty;
            drop.GetComponent <UCE_ItemDrop>().LootVictorGuild = lootRules.LootVictorGuild;
#if _iMMOPVP
            drop.GetComponent <UCE_ItemDrop>().LootVictorRealm = lootRules.LootVictorRealm;
            drop.GetComponent <UCE_ItemDrop>().hashRealm       = hashRealm;
            drop.GetComponent <UCE_ItemDrop>().hashAlly        = hashAlly;
#endif
            drop.GetComponent <UCE_ItemDrop>().LootEverybody = lootRules.LootEverybody;
            drop.GetComponent <UCE_ItemDrop>().lastAggressor = this.lastAggressor;
            drop.GetComponent <UCE_ItemDrop>().owner         = this;
#endif
            NetworkServer.Spawn(drop);
        }
        else if (lootRules.goldDropPrefab == null && gold > 0)
        {
            Debug.LogWarning("You forgot to assign a gold drop to: " + this.name);
        }

        // ---------------------------------------------------------------------- Inventory

        for (int i = 0; i < inventory.slots.Count; ++i)
        {
            int      idx      = i;
            ItemSlot itemSlot = inventory.slots[i];

            if (itemSlot.amount > 0 && Random.value <= itemSlot.item.data.dropChance + lootRules.inventoryDropModifier)
            {
                if (itemSlot.item.data.dropPrefab == null)
                {
                    Debug.LogWarning("You forgot to assign a item drop to: " + itemSlot.item.name);
                    continue;
                }

                Vector3 position = UCE_Tools.ReachableRandomUnitCircleOnNavMesh(transform.position, lootRules.radiusMultiplier, lootRules.dropSolverAttempts);

                GameObject drop = Instantiate(itemSlot.item.data.dropPrefab.gameObject, position, Quaternion.identity);

                drop.GetComponent <UCE_ItemDrop>().itemData = itemSlot.item.data;
                drop.GetComponent <UCE_ItemDrop>().amount   = itemSlot.amount;
                drop.GetComponent <UCE_ItemDrop>().item     = new Item(itemSlot.item.data);

#if _iMMOLOOTRULES && _iMMOITEMDROP
                drop.GetComponent <UCE_ItemDrop>().LiftRulesAfter  = lootRules.LiftRulesAfter;
                drop.GetComponent <UCE_ItemDrop>().LootVictorParty = lootRules.LootVictorParty;
                drop.GetComponent <UCE_ItemDrop>().LootVictorGuild = lootRules.LootVictorGuild;
#if _iMMOPVP
                drop.GetComponent <UCE_ItemDrop>().LootVictorRealm = lootRules.LootVictorRealm;
                drop.GetComponent <UCE_ItemDrop>().hashRealm       = hashRealm;
                drop.GetComponent <UCE_ItemDrop>().hashAlly        = hashAlly;
#endif
                drop.GetComponent <UCE_ItemDrop>().LootEverybody = lootRules.LootEverybody;

                drop.GetComponent <UCE_ItemDrop>().lastAggressor = this.lastAggressor;
                drop.GetComponent <UCE_ItemDrop>().owner         = this;
#endif

                itemSlot.amount      = 0;
                inventory.slots[idx] = itemSlot;

                NetworkServer.Spawn(drop);
            }
        }
    }
    // -----------------------------------------------------------------------------------
    // Refresh
    // -----------------------------------------------------------------------------------
    public void Refresh()
    {
        Player player = Player.localPlayer;

        if (!player)
        {
            return;
        }

        if (panel.activeSelf &&
            instance != null &&
            UCE_Tools.UCE_CheckSelectionHandling(instance)
            )
        {
            int rcount  = getRecipeCount();
            int t_index = -1;
            int r_index = 0;

            UIUtils.BalancePrefabs(slotPrefab.gameObject, rcount, content);

            for (int i = 0; i < recipes.Count; ++i)
            {
                if (canCraft(i))
                {
                    r_index = i;
                    t_index++;

                    UCE_Tmpl_Recipe recipe = recipes[r_index];

                    UCE_Slot_Crafting slot = content.GetChild(t_index).GetComponent <UCE_Slot_Crafting>();

                    slot.Show(recipe, player.UCE_Crafting_CanBoost(recipe, slot.amount));

                    if (player.UCE_Crafting_CraftValidation(recipe, slot.amount, slot.boost) && !player.UCE_Crafting_isBusy())
                    {
                        slot.actionButton.interactable = true;
                    }
                    else
                    {
                        slot.actionButton.interactable = false;
                    }

                    slot.unlearnButton.interactable = true;
                    slot.unlearnButton.onClick.SetListener(() =>
                    {
                        unlearnPanel.Show(recipe);
                    });

                    slot.actionButton.onClick.SetListener(() =>
                    {
                        player.UCE_Crafting_startCrafting(recipe, slot.amount, slot.boost);
                        panel.SetActive(false);
                    });
                }
            }
        }
        else
        {
            currentCategory = "";
            panel.SetActive(false); // hide
        }
    }
Beispiel #3
0
    // -----------------------------------------------------------------------------------
    // LateUpdate
    // -----------------------------------------------------------------------------------
    private void LateUpdate()
    {
        if (!target)
        {
            return;
        }

        Vector3 targetPos = target.position + offset;

        // rotation and zoom should only happen if not in a UI right now
        if (!Utils.IsCursorOverUserInterface())
        {
            // right mouse rotation if we have a mouse
            if (Input.mousePresent)
            {
                //Down Event (MobileControls)
                if (!camDrag)                                       //Start (MobileControls)
                {
                    camDrag = (Input.GetMouseButtonDown(mouseButton) && !Utils.IsCursorOverUserInterface());
                }

                //Drag Event (Mobile Controls)
                if (Input.GetMouseButton(mouseButton) && camDrag)
                {
                    // initialize the base rotation if not initialized yet.
                    // (only after first mouse click and not in Awake because
                    //  we might rotate the camera inbetween, e.g. during
                    //  character selection. this would cause a sudden jump to
                    //  the original rotation from Awake otherwise.)
                    if (!rotationInitialized)
                    {
                        rotation            = transform.eulerAngles;
                        rotationInitialized = true;
                    }

                    // note: mouse x is for y rotation and vice versa
                    rotation.y        += Input.GetAxis("Mouse X") * rotationSpeed;
                    rotation.x        -= Input.GetAxis("Mouse Y") * rotationSpeed;
                    rotation.x         = Mathf.Clamp(rotation.x, xMinAngle, xMaxAngle);
                    transform.rotation = Quaternion.Euler(rotation.x, rotation.y, 0);
                }

                //Up Event (Mobile Controls)
                if (Input.GetMouseButtonUp(mouseButton))    // (MobileControls)
                {
                    camDrag = false;                        // (MobileControls)
                }
            }
            else
            {
#if _iMMOMOBILECONTROLS
                rotation = MobileControls.Get1FingerRotation(transform, rotation, xMinAngle, xMaxAngle, rotationSpeedTouch);
#else
                // forced 45 degree if there is no mouse to rotate (for mobile)
                transform.rotation = Quaternion.Euler(new Vector3(45, 0, 0));
#endif
            }

            if (rotation != rotOld)
            {
                UCE_Tools.pointerDown = false;
            }
            rotOld = rotation;

            // zoom
            float speed = Input.mousePresent ? zoomSpeedMouse : zoomSpeedTouch;
            float step  = UCE_Tools.GetZoomUniversal() * speed;
            distance = Mathf.Clamp(distance - step, minDistance, maxDistance);
        }

        // -- target auto follow
        Vector3 newPos = targetPos - (transform.rotation * Vector3.forward * distance);

        if (autoFollowSpeed > 0)
        {
            transform.position = Vector3.MoveTowards(transform.position, newPos, Time.deltaTime * autoFollowSpeed);
        }
        else
        {
            transform.position = newPos;
        }

        // avoid view blocking (disabled, see comment at the top)
        if (Physics.Linecast(targetPos, transform.position, out RaycastHit hit, viewBlockingLayers))
        {
            // calculate a better distance (with some space between it)
            float d = Vector3.Distance(targetPos, hit.point) - 0.1f;

            // set the final cam position
            transform.position = targetPos - (transform.rotation * Vector3.forward * d);
        }
    }