public override void UseHotkey(int hotkeyIndex) { if (hotkeyIndex < 0 || hotkeyIndex >= PlayerCharacterEntity.Hotkeys.Count) { return; } CancelBuild(); buildingItemIndex = -1; currentBuildingEntity = null; var hotkey = PlayerCharacterEntity.Hotkeys[hotkeyIndex]; var skill = hotkey.GetSkill(); if (skill != null) { var skillIndex = PlayerCharacterEntity.IndexOfSkill(skill.DataId); if (skillIndex >= 0) { BaseCharacterEntity attackingCharacter; if (TryGetAttackingCharacter(out attackingCharacter)) { // If attacking any character, will use skill later queueUsingSkill = new UsingSkillData(null, skill.DataId); } else if (PlayerCharacterEntity.Skills[skillIndex].CanUse(PlayerCharacterEntity)) { // If not attacking any character, use skill immediately if (skill.IsAttack() && IsLockTarget()) { // If attacking any character, will use skill later queueUsingSkill = new UsingSkillData(null, skill.DataId); if (selectedTarget != null && selectedTarget is BaseCharacterEntity) { // Attacking selected target PlayerCharacterEntity.SetTargetEntity(selectedTarget); } else { // Attacking nearest target var nearestTarget = PlayerCharacterEntity.FindNearestAliveCharacter <BaseCharacterEntity>(PlayerCharacterEntity.GetSkillAttackDistance(skill) + lockAttackTargetDistance, false, true, false); if (nearestTarget != null) { PlayerCharacterEntity.SetTargetEntity(nearestTarget); } } } else { destination = null; PlayerCharacterEntity.StopMove(); RequestUseSkill(CharacterTransform.position, skill.DataId); } } } } var item = hotkey.GetItem(); if (item != null) { var itemIndex = PlayerCharacterEntity.IndexOfNonEquipItem(item.DataId); if (itemIndex >= 0) { if (item.IsEquipment()) { RequestEquipItem((ushort)itemIndex); } else if (item.IsPotion() || item.IsPet()) { RequestUseItem((ushort)itemIndex); } else if (item.IsBuilding()) { destination = null; PlayerCharacterEntity.StopMove(); buildingItemIndex = itemIndex; currentBuildingEntity = Instantiate(item.buildingEntity); currentBuildingEntity.SetupAsBuildMode(); currentBuildingEntity.CacheTransform.parent = null; FindAndSetBuildingAreaFromCharacterDirection(); } } } }