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 } }
// ----------------------------------------------------------------------------------- // 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); } }