Example #1
0
        /// <summary>
        /// This will be called at server to order character to unequip equipments
        /// </summary>
        /// <param name="fromEquipPosition"></param>
        protected virtual void NetFuncUnEquipItem(byte byteInventoryType, short index)
        {
            if (!CanDoActions())
            {
                return;
            }

            EquipWeapons  tempEquipWeapons = EquipWeapons;
            CharacterItem unEquipItem      = CharacterItem.Empty;

            switch ((InventoryType)byteInventoryType)
            {
            case InventoryType.EquipWeaponRight:
                unEquipItem = tempEquipWeapons.rightHand;
                tempEquipWeapons.rightHand = CharacterItem.Empty;
                EquipWeapons = tempEquipWeapons;
                break;

            case InventoryType.EquipWeaponLeft:
                unEquipItem = tempEquipWeapons.leftHand;
                tempEquipWeapons.leftHand = CharacterItem.Empty;
                EquipWeapons = tempEquipWeapons;
                break;

            case InventoryType.EquipItems:
                unEquipItem = equipItems[index];
                equipItems.RemoveAt(index);
                UpdateEquipItemIndexes();
                break;
            }
            if (unEquipItem.NotEmptySlot())
            {
                nonEquipItems.Add(unEquipItem);
            }
        }
Example #2
0
 protected virtual void OnSelectCharacterClass(BaseCharacter baseCharacter)
 {
     eventOnSelectCharacterClass.Invoke(baseCharacter);
     PlayerCharacterByDataId.TryGetValue(baseCharacter.DataId, out selectedPlayerCharacter);
     if (SelectedPlayerCharacter != null)
     {
         // Set creating player character data
         SelectedDataId = baseCharacter.DataId;
         // Prepare equip items
         List <CharacterItem> equipItems = new List <CharacterItem>();
         foreach (Item armorItem in SelectedPlayerCharacter.armorItems)
         {
             if (armorItem == null)
             {
                 continue;
             }
             equipItems.Add(CharacterItem.Create(armorItem));
         }
         // Set model equip items
         SelectedModel.SetEquipItems(equipItems);
         // Prepare equip weapons
         EquipWeapons equipWeapons = new EquipWeapons();
         if (SelectedPlayerCharacter.rightHandEquipItem != null)
         {
             equipWeapons.rightHand = CharacterItem.Create(SelectedPlayerCharacter.rightHandEquipItem);
         }
         if (SelectedPlayerCharacter.leftHandEquipItem != null)
         {
             equipWeapons.leftHand = CharacterItem.Create(SelectedPlayerCharacter.leftHandEquipItem);
         }
         // Set model equip weapons
         SelectedModel.SetEquipWeapons(equipWeapons);
     }
 }
        protected void SetClipBasedOnWeapon(EquipWeapons equipWeapons)
        {
            Item weaponItem = GameInstance.Singleton.DefaultWeaponItem;

            if (equipWeapons.rightHand.NotEmptySlot() && equipWeapons.rightHand.GetWeaponItem() != null)
            {
                weaponItem = equipWeapons.rightHand.GetWeaponItem();
            }
            WeaponAnimations weaponAnimations = default(WeaponAnimations);

            CacheWeaponAnimations.TryGetValue(weaponItem.WeaponType.DataId, out weaponAnimations);
            // Set override animator clips
            CacheAnimatorController[CLIP_IDLE]                = weaponAnimations.idleClip != null ? weaponAnimations.idleClip : defaultAnimations.idleClip;
            CacheAnimatorController[CLIP_MOVE]                = weaponAnimations.moveClip != null ? weaponAnimations.moveClip : defaultAnimations.moveClip;
            CacheAnimatorController[CLIP_MOVE_BACKWARD]       = weaponAnimations.moveBackwardClip != null ? weaponAnimations.moveBackwardClip : defaultAnimations.moveBackwardClip;
            CacheAnimatorController[CLIP_MOVE_LEFT]           = weaponAnimations.moveLeftClip != null ? weaponAnimations.moveLeftClip : defaultAnimations.moveLeftClip;
            CacheAnimatorController[CLIP_MOVE_RIGHT]          = weaponAnimations.moveRightClip != null ? weaponAnimations.moveRightClip : defaultAnimations.moveRightClip;
            CacheAnimatorController[CLIP_MOVE_FORWARD_LEFT]   = weaponAnimations.moveForwardLeftClip != null ? weaponAnimations.moveForwardLeftClip : defaultAnimations.moveForwardLeftClip;
            CacheAnimatorController[CLIP_MOVE_FORWARD_RIGHT]  = weaponAnimations.moveForwardRightClip != null ? weaponAnimations.moveForwardRightClip : defaultAnimations.moveForwardRightClip;
            CacheAnimatorController[CLIP_MOVE_BACKWARD_LEFT]  = weaponAnimations.moveBackwardLeftClip != null ? weaponAnimations.moveBackwardLeftClip : defaultAnimations.moveBackwardLeftClip;
            CacheAnimatorController[CLIP_MOVE_BACKWARD_RIGHT] = weaponAnimations.moveBackwardRightClip != null ? weaponAnimations.moveBackwardRightClip : defaultAnimations.moveBackwardRightClip;
            CacheAnimatorController[CLIP_JUMP]                = weaponAnimations.jumpClip != null ? weaponAnimations.jumpClip : defaultAnimations.jumpClip;
            CacheAnimatorController[CLIP_FALL]                = weaponAnimations.fallClip != null ? weaponAnimations.fallClip : defaultAnimations.fallClip;
            CacheAnimatorController[CLIP_HURT]                = weaponAnimations.hurtClip != null ? weaponAnimations.hurtClip : defaultAnimations.hurtClip;
            CacheAnimatorController[CLIP_DEAD]                = weaponAnimations.deadClip != null ? weaponAnimations.deadClip : defaultAnimations.deadClip;
        }
Example #4
0
        public EquipWeapons ReadCharacterEquipWeapons(string characterId)
        {
            EquipWeapons result = new EquipWeapons();
            // Right hand weapon
            SQLiteRowsReader reader = ExecuteReader("SELECT * FROM characteritem WHERE characterId=@characterId AND inventoryType=@inventoryType LIMIT 1",
                                                    new SqliteParameter("@characterId", characterId),
                                                    new SqliteParameter("@inventoryType", (byte)InventoryType.EquipWeaponRight));
            CharacterItem rightWeapon;

            if (ReadCharacterItem(reader, out rightWeapon))
            {
                result.rightHand = rightWeapon;
            }
            // Left hand weapon
            reader = ExecuteReader("SELECT * FROM characteritem WHERE characterId=@characterId AND inventoryType=@inventoryType LIMIT 1",
                                   new SqliteParameter("@characterId", characterId),
                                   new SqliteParameter("@inventoryType", (byte)InventoryType.EquipWeaponLeft));
            CharacterItem leftWeapon;

            if (ReadCharacterItem(reader, out leftWeapon))
            {
                result.leftHand = leftWeapon;
            }
            return(result);
        }
        private void DecreaseEquipShieldsDurability(BaseCharacterEntity entity, float decreaseDurability)
        {
            bool          tempDestroy  = false;
            EquipWeapons  equipWeapons = entity.EquipWeapons;
            CharacterItem rightHand    = equipWeapons.rightHand;
            CharacterItem leftHand     = equipWeapons.leftHand;

            if (rightHand.GetShieldItem() != null && rightHand.GetMaxDurability() > 0)
            {
                rightHand = DecreaseDurability(rightHand, decreaseDurability, out tempDestroy);
                if (tempDestroy)
                {
                    equipWeapons.rightHand = CharacterItem.Empty;
                }
                else
                {
                    equipWeapons.rightHand = rightHand;
                }
            }
            if (leftHand.GetShieldItem() != null && leftHand.GetMaxDurability() > 0)
            {
                leftHand = DecreaseDurability(leftHand, decreaseDurability, out tempDestroy);
                if (tempDestroy)
                {
                    equipWeapons.leftHand = CharacterItem.Empty;
                }
                else
                {
                    equipWeapons.leftHand = leftHand;
                }
            }
            entity.EquipWeapons = equipWeapons;
        }
Example #6
0
        protected void SetupEquipWeapons(EquipWeapons equipWeapons)
        {
            mustReleaseFireKey      = false;
            currentCrosshairSetting = PlayerCharacterEntity.GetCrosshairSetting();

            rightHandWeapon = equipWeapons.rightHand.GetWeaponItem();
            leftHandWeapon  = equipWeapons.leftHand.GetWeaponItem();
            // Weapon ability will be able to use when equip weapon at main-hand only
            if (rightHandWeapon != null && leftHandWeapon == null)
            {
                if (rightHandWeapon.weaponAbility != weaponAbility)
                {
                    if (weaponAbility != null)
                    {
                        weaponAbility.ForceDeactivated();
                    }
                    weaponAbility = rightHandWeapon.weaponAbility;
                    weaponAbility.Setup(this);
                    weaponAbilityState = WeaponAbilityState.Deactivated;
                }
            }
            else
            {
                if (weaponAbility != null)
                {
                    weaponAbility.ForceDeactivated();
                }
                weaponAbility      = null;
                weaponAbilityState = WeaponAbilityState.Deactivated;
            }
        }
Example #7
0
        /// <summary>
        /// This will be called at server to order character to equip equipments
        /// </summary>
        /// <param name="nonEquipIndex"></param>
        /// <param name="equipPosition"></param>
        protected virtual void NetFuncEquipItem(short nonEquipIndex, byte byteInventoryType, short oldEquipIndex)
        {
            if (!CanDoActions() ||
                nonEquipIndex >= nonEquipItems.Count)
            {
                return;
            }

            CharacterItem equippingItem = nonEquipItems[nonEquipIndex];

            GameMessage.Type gameMessageType;
            bool             shouldUnequipRightHand;
            bool             shouldUnequipLeftHand;

            if (!CanEquipItem(equippingItem, (InventoryType)byteInventoryType, oldEquipIndex, out gameMessageType, out shouldUnequipRightHand, out shouldUnequipLeftHand))
            {
                gameManager.SendServerGameMessage(ConnectionId, gameMessageType);
                return;
            }
            // Unequip equipped item that already equipped
            if (shouldUnequipRightHand)
            {
                NetFuncUnEquipItem((byte)InventoryType.EquipWeaponRight, 0);
            }
            if (shouldUnequipLeftHand)
            {
                NetFuncUnEquipItem((byte)InventoryType.EquipWeaponLeft, 0);
            }
            // Equipping items
            EquipWeapons tempEquipWeapons = EquipWeapons;

            switch ((InventoryType)byteInventoryType)
            {
            case InventoryType.EquipWeaponRight:
                tempEquipWeapons.rightHand = equippingItem;
                EquipWeapons = tempEquipWeapons;
                break;

            case InventoryType.EquipWeaponLeft:
                tempEquipWeapons.leftHand = equippingItem;
                EquipWeapons = tempEquipWeapons;
                break;

            case InventoryType.EquipItems:
                if (oldEquipIndex < 0)
                {
                    oldEquipIndex = (short)this.IndexOfEquipItem(equippingItem.GetArmorItem().EquipPosition);
                }
                if (oldEquipIndex >= 0)
                {
                    NetFuncUnEquipItem((byte)InventoryType.EquipItems, oldEquipIndex);
                }
                equipItems.Add(equippingItem);
                equipItemIndexes.Add(equippingItem.GetArmorItem().EquipPosition, equipItems.Count - 1);
                break;
            }
            nonEquipItems.RemoveAt(nonEquipIndex);
            this.FillEmptySlots();
        }
Example #8
0
 protected void OnEquipWeaponsChange(EquipWeapons equipWeapons)
 {
     if (CharacterEntity.IsOwnerClient && CacheUISceneGameplay != null)
     {
         CacheUISceneGameplay.UpdateCharacter();
         CacheUISceneGameplay.UpdateEquipItems();
     }
 }
        public void UpdateData(ICharacterData character)
        {
            this.character = character;
            // Clear slots data
            foreach (UICharacterItem slot in CacheEquipItemSlots.Values)
            {
                slot.Setup(GetEmptyUIData(slot.InventoryType), character, -1);
                slot.Show();
            }

            if (character == null)
            {
                return;
            }

            string                tempPosition;
            UICharacterItem       tempSlot;
            IList <CharacterItem> equipItems = character.EquipItems;

            for (int i = 0; i < equipItems.Count; ++i)
            {
                CharacterItem equipItem = equipItems[i];
                Item          armorItem = equipItem.GetArmorItem();
                if (armorItem == null)
                {
                    continue;
                }

                tempPosition = armorItem.EquipPosition;
                if (CacheEquipItemSlots.TryGetValue(tempPosition, out tempSlot))
                {
                    tempSlot.Setup(new CharacterItemTuple(equipItem, equipItem.level, InventoryType.EquipItems), character, i);
                }
            }

            EquipWeapons  equipWeapons       = character.EquipWeapons;
            CharacterItem rightHand          = equipWeapons.rightHand;
            CharacterItem leftHand           = equipWeapons.leftHand;
            Item          rightHandEquipment = rightHand.GetEquipmentItem();
            Item          leftHandEquipment  = leftHand.GetEquipmentItem();

            tempPosition = GameDataConst.EQUIP_POSITION_RIGHT_HAND;
            if (CacheEquipItemSlots.TryGetValue(tempPosition, out tempSlot))
            {
                if (rightHandEquipment != null)
                {
                    tempSlot.Setup(new CharacterItemTuple(rightHand, rightHand.level, InventoryType.EquipWeaponRight), character, 0);
                }
            }
            tempPosition = GameDataConst.EQUIP_POSITION_LEFT_HAND;
            if (CacheEquipItemSlots.TryGetValue(tempPosition, out tempSlot))
            {
                if (leftHandEquipment != null)
                {
                    tempSlot.Setup(new CharacterItemTuple(leftHand, leftHand.level, InventoryType.EquipWeaponLeft), character, 0);
                }
            }
        }
Example #10
0
 public static void RepairLeftHandItem(IPlayerCharacterData character, out GameMessage.Type gameMessageType)
 {
     RepairItem(character, character.EquipWeapons.leftHand, (repairedItem) =>
     {
         EquipWeapons equipWeapon = character.EquipWeapons;
         equipWeapon.leftHand     = repairedItem;
         character.EquipWeapons   = equipWeapon;
     }, out gameMessageType);
 }
 public static void EnhanceSocketRightHandItem(IPlayerCharacterData character, int enhancerId, out GameMessage.Type gameMessageType)
 {
     EnhanceSocketItem(character, character.EquipWeapons.rightHand, enhancerId, (enhancedSocketItem) =>
     {
         EquipWeapons equipWeapon = character.EquipWeapons;
         equipWeapon.rightHand    = enhancedSocketItem;
         character.EquipWeapons   = equipWeapon;
     }, out gameMessageType);
 }
Example #12
0
        /// <summary>
        /// Override this to do stuffs when equip weapons changes
        /// </summary>
        /// <param name="equipWeapons"></param>
        protected virtual void OnEquipWeaponsChange(bool isInitial, EquipWeapons equipWeapons)
        {
            if (CharacterModel != null)
            {
                CharacterModel.SetEquipWeapons(equipWeapons);
            }

            if (onEquipWeaponsChange != null)
            {
                onEquipWeaponsChange.Invoke(equipWeapons);
            }
        }
Example #13
0
 public static void RefineRightHandItem(IPlayerCharacterData character, out GameMessage.Type gameMessageType)
 {
     RefineItem(character, character.EquipWeapons.rightHand, (refinedItem) =>
     {
         EquipWeapons equipWeapon = character.EquipWeapons;
         equipWeapon.rightHand    = refinedItem;
         character.EquipWeapons   = equipWeapon;
     }, () =>
     {
         EquipWeapons equipWeapon = character.EquipWeapons;
         equipWeapon.rightHand    = CharacterItem.Empty;
         character.EquipWeapons   = equipWeapon;
     }, out gameMessageType);
 }
        /// <summary>
        /// Unequips weapon items from the character and drops them to the loot bag according to the rules set.
        /// </summary>
        protected void DropWeaponItems()
        {
            for (int i = SelectableWeaponSets.Count - 1; i >= 0; i--)
            {
                EquipWeapons set = SelectableWeaponSets[i];

                var leftHandWeapon  = set.leftHand;
                var rightHandWeapon = set.rightHand;

                if (!leftHandWeapon.IsEmptySlot())
                {
                    if (playerDB.maxLootItems > 0 && lootBagItems.Count >= playerDB.maxLootItems)
                    {
                        return;
                    }

                    if (ShouldDrop(leftHandWeapon))
                    {
                        CharacterItem unEquipItem = leftHandWeapon;
                        set.leftHand = CharacterItem.Empty;
                        this.AddOrSetNonEquipItems(unEquipItem);
                        this.FillEmptySlots();

                        DropInventoryItem(unEquipItem);
                    }
                }

                if (!rightHandWeapon.IsEmptySlot())
                {
                    if (playerDB.maxLootItems > 0 && lootBagItems.Count >= playerDB.maxLootItems)
                    {
                        return;
                    }

                    if (ShouldDrop(rightHandWeapon))
                    {
                        CharacterItem unEquipItem = rightHandWeapon;
                        set.rightHand = CharacterItem.Empty;
                        this.AddOrSetNonEquipItems(unEquipItem);
                        this.FillEmptySlots();

                        DropInventoryItem(unEquipItem);
                    }
                }
            }

            this.FillEmptySlots();
        }
        public void ReduceAmmo(CharacterItem weapon, bool isLeftHand, out Dictionary <DamageElement, MinMaxFloat> increaseDamges)
        {
            increaseDamges = null;
            // Avoid null data
            if (weapon == null)
            {
                return;
            }

            Item weaponItem = weapon.GetWeaponItem();

            if (weaponItem.ammoCapacity <= 0)
            {
                // Ammo capacity is 0 so reduce ammo from inventory
                Dictionary <CharacterItem, short> decreaseAmmoItems;
                if (this.DecreaseAmmos(weaponItem.WeaponType.requireAmmoType, 1, out decreaseAmmoItems))
                {
                    KeyValuePair <CharacterItem, short> firstEntry = decreaseAmmoItems.FirstOrDefault();
                    CharacterItem ammoCharacterItem = firstEntry.Key;
                    Item          ammoItem          = ammoCharacterItem.GetItem();
                    if (ammoItem != null && firstEntry.Value > 0)
                    {
                        // Ammo level always 1 and its bonus rate always 1
                        increaseDamges = ammoItem.GetIncreaseDamages(1, 1f);
                    }
                }
            }
            else
            {
                // Ammo capacity more than 0 reduce loaded ammo
                if (weapon.ammo > 0)
                {
                    weapon.ammo--;
                    EquipWeapons equipWeapons = EquipWeapons;
                    if (isLeftHand)
                    {
                        equipWeapons.leftHand = weapon;
                    }
                    else
                    {
                        equipWeapons.rightHand = weapon;
                    }
                    EquipWeapons = equipWeapons;
                }
            }
        }
    public static CharacterStats GetEquipmentStats(this ICharacterData data)
    {
        if (data == null)
        {
            return(new CharacterStats());
        }
        CharacterStats result = new CharacterStats();
        // Armors
        IList <CharacterItem> equipItems = data.EquipItems;

        foreach (CharacterItem equipItem in equipItems)
        {
            if (equipItem.IsEmpty())
            {
                continue;
            }
            result += equipItem.GetIncreaseStats();
            result += equipItem.GetSocketsIncreaseStats();
            result += GameDataHelpers.GetStatsFromAttributes(equipItem.GetIncreaseAttributes());
            result += GameDataHelpers.GetStatsFromAttributes(equipItem.GetSocketsIncreaseAttributes());
        }
        // Weapons
        EquipWeapons equipWeapons = data.EquipWeapons;

        if (equipWeapons != null)
        {
            // Right hand equipment
            if (!equipWeapons.rightHand.IsEmpty())
            {
                result += equipWeapons.rightHand.GetIncreaseStats();
                result += equipWeapons.rightHand.GetSocketsIncreaseStats();
                result += GameDataHelpers.GetStatsFromAttributes(equipWeapons.rightHand.GetIncreaseAttributes());
                result += GameDataHelpers.GetStatsFromAttributes(equipWeapons.rightHand.GetSocketsIncreaseAttributes());
            }
            // Left hand equipment
            if (!equipWeapons.leftHand.IsEmpty())
            {
                result += equipWeapons.leftHand.GetIncreaseStats();
                result += equipWeapons.leftHand.GetSocketsIncreaseStats();
                result += GameDataHelpers.GetStatsFromAttributes(equipWeapons.leftHand.GetIncreaseAttributes());
                result += GameDataHelpers.GetStatsFromAttributes(equipWeapons.leftHand.GetSocketsIncreaseAttributes());
            }
        }
        return(result);
    }
Example #17
0
    public void SetEquipWeapons(EquipWeapons equipWeapons)
    {
        var rightHandWeapon = equipWeapons.rightHand.GetWeaponItem();
        var leftHandWeapon  = equipWeapons.leftHand.GetWeaponItem();
        var leftHandShield  = equipWeapons.leftHand.GetShieldItem();

        // Clear equipped item models
        var keepingKeys = new List <string>();

        if (rightHandWeapon != null)
        {
            keepingKeys.Add(GameDataConst.EQUIP_POSITION_RIGHT_HAND);
        }
        if (leftHandWeapon != null || leftHandShield != null)
        {
            keepingKeys.Add(GameDataConst.EQUIP_POSITION_LEFT_HAND);
        }

        var keys = new List <string>(cacheModels.Keys);

        foreach (var key in keys)
        {
            if (!keepingKeys.Contains(key) &&
                (key.Equals(GameDataConst.EQUIP_POSITION_RIGHT_HAND) ||
                 key.Equals(GameDataConst.EQUIP_POSITION_LEFT_HAND)))
            {
                DestroyCacheModel(key);
            }
        }

        if (rightHandWeapon != null)
        {
            InstantiateEquipModel(GameDataConst.EQUIP_POSITION_RIGHT_HAND, rightHandWeapon.equipmentModels);
        }
        if (leftHandWeapon != null)
        {
            InstantiateEquipModel(GameDataConst.EQUIP_POSITION_LEFT_HAND, leftHandWeapon.subEquipmentModels);
        }
        if (leftHandShield != null)
        {
            InstantiateEquipModel(GameDataConst.EQUIP_POSITION_LEFT_HAND, leftHandShield.equipmentModels);
        }
    }
        public virtual void SetEquipWeapons(EquipWeapons equipWeapons)
        {
            Item rightHandWeapon = equipWeapons.rightHand.GetWeaponItem();
            Item leftHandWeapon  = equipWeapons.leftHand.GetWeaponItem();
            Item leftHandShield  = equipWeapons.leftHand.GetShieldItem();

            // Clear equipped item models
            tempAddingKeys.Clear();
            if (rightHandWeapon != null)
            {
                tempAddingKeys.Add(GameDataConst.EQUIP_POSITION_RIGHT_HAND);
            }
            if (leftHandWeapon != null || leftHandShield != null)
            {
                tempAddingKeys.Add(GameDataConst.EQUIP_POSITION_LEFT_HAND);
            }

            tempCachedKeys.Clear();
            tempCachedKeys.AddRange(cacheModels.Keys);
            foreach (string key in tempCachedKeys)
            {
                if (!tempAddingKeys.Contains(key) &&
                    (key.Equals(GameDataConst.EQUIP_POSITION_RIGHT_HAND) ||
                     key.Equals(GameDataConst.EQUIP_POSITION_LEFT_HAND)))
                {
                    DestroyCacheModel(key);
                }
            }

            if (rightHandWeapon != null)
            {
                InstantiateEquipModel(GameDataConst.EQUIP_POSITION_RIGHT_HAND, rightHandWeapon.equipmentModels, equipWeapons.rightHand.level, out rightHandEquipmentEntity);
            }
            if (leftHandWeapon != null)
            {
                InstantiateEquipModel(GameDataConst.EQUIP_POSITION_LEFT_HAND, leftHandWeapon.subEquipmentModels, equipWeapons.leftHand.level, out leftHandEquipmentEntity);
            }
            if (leftHandShield != null)
            {
                InstantiateEquipModel(GameDataConst.EQUIP_POSITION_LEFT_HAND, leftHandShield.equipmentModels, equipWeapons.leftHand.level, out leftHandEquipmentEntity);
            }
        }
    public static Dictionary <DamageElement, MinMaxFloat> GetEquipmentIncreaseDamages(this ICharacterData data)
    {
        if (data == null)
        {
            return(new Dictionary <DamageElement, MinMaxFloat>());
        }
        Dictionary <DamageElement, MinMaxFloat> result = new Dictionary <DamageElement, MinMaxFloat>();
        // Armors
        IList <CharacterItem> equipItems = data.EquipItems;

        foreach (CharacterItem equipItem in equipItems)
        {
            if (equipItem.IsEmpty())
            {
                continue;
            }
            result = GameDataHelpers.CombineDamages(result, equipItem.GetIncreaseDamages());
            result = GameDataHelpers.CombineDamages(result, equipItem.GetSocketsIncreaseDamages());
        }
        // Weapons
        EquipWeapons equipWeapons = data.EquipWeapons;

        if (equipWeapons != null)
        {
            // Right hand equipment
            if (equipWeapons.rightHand.IsEmpty())
            {
                result = GameDataHelpers.CombineDamages(result, equipWeapons.rightHand.GetIncreaseDamages());
                result = GameDataHelpers.CombineDamages(result, equipWeapons.rightHand.GetSocketsIncreaseDamages());
            }
            // Left hand equipment
            if (equipWeapons.leftHand.IsEmpty())
            {
                result = GameDataHelpers.CombineDamages(result, equipWeapons.leftHand.GetIncreaseDamages());
                result = GameDataHelpers.CombineDamages(result, equipWeapons.leftHand.GetSocketsIncreaseDamages());
            }
        }
        return(result);
    }
        private IEnumerator ReloadRoutine(
            AnimActionType animActionType,
            int weaponTypeDataId,
            float triggerDuration,
            float totalDuration,
            bool isLeftHand,
            CharacterItem weapon,
            short reloadingAmount)
        {
            // Play animation on clients
            RequestPlayActionAnimation(animActionType, weaponTypeDataId, 0);

            yield return(new WaitForSecondsRealtime(triggerDuration));

            // Prepare data
            EquipWeapons equipWeapons = EquipWeapons;
            Item         weaponItem   = weapon.GetWeaponItem();
            Dictionary <CharacterItem, short> decreaseItems;

            if (this.DecreaseAmmos(weaponItem.WeaponType.requireAmmoType, reloadingAmount, out decreaseItems))
            {
                weapon.ammo += reloadingAmount;
                if (isLeftHand)
                {
                    equipWeapons.leftHand = weapon;
                }
                else
                {
                    equipWeapons.rightHand = weapon;
                }
                EquipWeapons = equipWeapons;
            }

            yield return(new WaitForSecondsRealtime(totalDuration - triggerDuration));

            isAttackingOrUsingSkill = false;
        }
        public override void SetEquipWeapons(EquipWeapons equipWeapons)
        {
            tempEquipWeapons = equipWeapons;
            SetClipBasedOnWeapon(equipWeapons);

            if (!IsUmaCharacterCreated)
            {
                return;
            }

            ClearObjectsAndSlots(equipWeaponUsedSlots, equipWeaponObjects);

            if (CacheUmaAvatar.activeRace == null ||
                CacheUmaAvatar.activeRace.racedata == null ||
                equipWeapons == null)
            {
                return;
            }

            string raceName = CacheUmaAvatar.activeRace.racedata.raceName;
            Item   tempEquipmentItem;

            UMATextRecipe[] receipes;
            // Setup right hand weapon
            if (equipWeapons.rightHand != null)
            {
                tempEquipmentItem = equipWeapons.rightHand.GetWeaponItem();
                if (tempEquipmentItem != null)
                {
                    SetEquipmentObject(equipWeaponObjects, tempEquipmentItem.equipmentModels, equipWeapons.rightHand.level, out rightHandEquipmentEntity);
                    if (tempEquipmentItem.CacheUmaRecipeSlot.TryGetValue(raceName, out receipes))
                    {
                        SetSlot(equipWeaponUsedSlots, receipes);
                    }
                }
            }
            // Setup left hand weapon
            if (equipWeapons.leftHand != null)
            {
                // Weapon
                tempEquipmentItem = equipWeapons.leftHand.GetWeaponItem();
                if (tempEquipmentItem != null)
                {
                    SetEquipmentObject(equipWeaponObjects, tempEquipmentItem.subEquipmentModels, equipWeapons.leftHand.level, out leftHandEquipmentEntity);
                    if (tempEquipmentItem.CacheUmaRecipeSlot.TryGetValue(raceName, out receipes))
                    {
                        SetSlot(equipWeaponUsedSlots, receipes);
                    }
                }
                // Shield
                tempEquipmentItem = equipWeapons.leftHand.GetShieldItem();
                if (tempEquipmentItem != null)
                {
                    SetEquipmentObject(equipWeaponObjects, tempEquipmentItem.equipmentModels, equipWeapons.leftHand.level, out leftHandEquipmentEntity);
                    if (tempEquipmentItem.CacheUmaRecipeSlot.TryGetValue(raceName, out receipes))
                    {
                        SetSlot(equipWeaponUsedSlots, receipes);
                    }
                }
            }
            // Update avatar
            CacheUmaAvatar.BuildCharacter(true);
            CacheUmaAvatar.ForceUpdate(true, true, true);
        }
Example #22
0
 public async UniTask CreateCharacterEquipWeapons(MySqlConnection connection, MySqlTransaction transaction, byte equipWeaponSet, string characterId, EquipWeapons equipWeapons)
 {
     await CreateCharacterItem(connection, transaction, equipWeaponSet, characterId, InventoryType.EquipWeaponRight, equipWeapons.rightHand);
     await CreateCharacterItem(connection, transaction, equipWeaponSet, characterId, InventoryType.EquipWeaponLeft, equipWeapons.leftHand);
 }
Example #23
0
 public void CreateCharacterEquipWeapons(string characterId, EquipWeapons equipWeapons)
 {
     CreateCharacterItem(0, characterId, InventoryType.EquipWeaponRight, equipWeapons.rightHand);
     CreateCharacterItem(0, characterId, InventoryType.EquipWeaponLeft, equipWeapons.leftHand);
 }
Example #24
0
    public static T ValidateCharacterData <T>(this T character) where T : IPlayerCharacterData
    {
        GameInstance    gameInstance = GameInstance.Singleton;
        PlayerCharacter database;

        if (!GameInstance.PlayerCharacters.TryGetValue(character.DataId, out database))
        {
            return(character);
        }
        // Validating character attributes
        short         returningStatPoint = 0;
        HashSet <int> validAttributeIds  = new HashSet <int>();
        IList <CharacterAttribute> characterAttributes = character.Attributes;

        for (int i = characterAttributes.Count - 1; i >= 0; --i)
        {
            CharacterAttribute characterAttribute = characterAttributes[i];
            int attributeDataId = characterAttribute.dataId;
            // If attribute is invalid
            if (characterAttribute.GetAttribute() == null ||
                validAttributeIds.Contains(attributeDataId))
            {
                returningStatPoint += characterAttribute.amount;
                character.Attributes.RemoveAt(i);
            }
            else
            {
                validAttributeIds.Add(attributeDataId);
            }
        }
        character.StatPoint += returningStatPoint;
        // Add character's attributes
        foreach (Attribute attribute in GameInstance.Attributes.Values)
        {
            // This attribute is valid, so not have to add it
            if (validAttributeIds.Contains(attribute.DataId))
            {
                continue;
            }
            CharacterAttribute characterAttribute = new CharacterAttribute();
            characterAttribute.dataId = attribute.DataId;
            characterAttribute.amount = 0;
            character.Attributes.Add(characterAttribute);
        }
        // Validating character skills
        short                  returningSkillPoint = 0;
        HashSet <int>          validSkillIds       = new HashSet <int>();
        IList <CharacterSkill> characterSkills     = character.Skills;

        for (int i = characterSkills.Count - 1; i >= 0; --i)
        {
            CharacterSkill characterSkill = characterSkills[i];
            Skill          skill          = characterSkill.GetSkill();
            // If skill is invalid or this character database does not have skill
            if (characterSkill.GetSkill() == null ||
                !database.CacheSkillLevels.ContainsKey(skill) ||
                validSkillIds.Contains(skill.DataId))
            {
                returningSkillPoint += characterSkill.level;
                character.Skills.RemoveAt(i);
            }
            else
            {
                validSkillIds.Add(skill.DataId);
            }
        }
        character.SkillPoint += returningSkillPoint;
        // Add character's skills
        Dictionary <Skill, short> skillLevels = database.CacheSkillLevels;

        foreach (KeyValuePair <Skill, short> skillLevel in skillLevels)
        {
            Skill skill = skillLevel.Key;
            // This skill is valid, so not have to add it
            if (validSkillIds.Contains(skill.DataId))
            {
                continue;
            }
            CharacterSkill characterSkill = new CharacterSkill();
            characterSkill.dataId = skill.DataId;
            characterSkill.level  = skillLevel.Value;
            character.Skills.Add(characterSkill);
        }
        // Validating character equip weapons
        List <CharacterItem> returningItems = new List <CharacterItem>();
        EquipWeapons         equipWeapons   = character.EquipWeapons;
        CharacterItem        rightHand      = equipWeapons.rightHand;
        CharacterItem        leftHand       = equipWeapons.leftHand;

        if (rightHand.GetEquipmentItem() == null)
        {
            if (rightHand.NotEmptySlot())
            {
                returningItems.Add(rightHand);
            }
            equipWeapons.rightHand = CharacterItem.Empty;
        }
        if (leftHand.GetEquipmentItem() == null)
        {
            if (leftHand.NotEmptySlot())
            {
                returningItems.Add(leftHand);
            }
            equipWeapons.leftHand = CharacterItem.Empty;
        }
        // Validating character equip items
        IList <CharacterItem> equipItems = character.EquipItems;

        for (int i = equipItems.Count - 1; i >= 0; --i)
        {
            CharacterItem equipItem = equipItems[i];
            // If equipment is invalid
            if (equipItem.GetEquipmentItem() == null)
            {
                if (equipItem.NotEmptySlot())
                {
                    returningItems.Add(equipItem);
                }
                character.EquipItems.RemoveAt(i);
            }
        }
        // Return items to non equip items
        foreach (CharacterItem returningItem in returningItems)
        {
            character.NonEquipItems.Add(returningItem);
        }
        character.FillEmptySlots();
        DevExtUtils.InvokeStaticDevExtMethods(ClassType, "ValidateCharacterData", character);
        return(character);
    }
 public override void SetEquipWeapons(EquipWeapons equipWeapons)
 {
     base.SetEquipWeapons(equipWeapons);
     SetupComponent();
     SetClipBasedOnWeapon(equipWeapons);
 }
Example #26
0
 public void CreateCharacterEquipWeapons(SqliteTransaction transaction, byte equipWeaponSet, string characterId, EquipWeapons equipWeapons)
 {
     CreateCharacterItem(transaction, equipWeaponSet, characterId, InventoryType.EquipWeaponRight, equipWeapons.rightHand);
     CreateCharacterItem(transaction, equipWeaponSet, characterId, InventoryType.EquipWeaponLeft, equipWeapons.leftHand);
 }
Example #27
0
    public static T SetNewPlayerCharacterData <T>(this T character, string characterName, int dataId, int entityId) where T : IPlayerCharacterData
    {
        var             gameInstance = GameInstance.Singleton;
        PlayerCharacter database;

        if (!GameInstance.PlayerCharacters.TryGetValue(dataId, out database))
        {
            return(character);
        }
        // Player character database
        var playerCharacter = database as PlayerCharacter;
        // Attributes
        var attributes = GameInstance.Attributes.Values;

        foreach (var attribute in attributes)
        {
            var characterAttribute = new CharacterAttribute();
            characterAttribute.dataId = attribute.DataId;
            characterAttribute.amount = 0;
            character.Attributes.Add(characterAttribute);
        }
        var skillLevels = playerCharacter.CacheSkillLevels;

        foreach (var skillLevel in skillLevels)
        {
            var characterSkill = new CharacterSkill();
            characterSkill.dataId = skillLevel.Key.DataId;
            characterSkill.level  = skillLevel.Value;
            character.Skills.Add(characterSkill);
        }
        // Right hand & left hand items
        var rightHandEquipItem = playerCharacter.rightHandEquipItem;
        var leftHandEquipItem  = playerCharacter.leftHandEquipItem;
        var equipWeapons       = new EquipWeapons();

        // Right hand equipped item
        if (rightHandEquipItem != null)
        {
            var newItem = CharacterItem.Create(rightHandEquipItem);
            equipWeapons.rightHand = newItem;
        }
        // Left hand equipped item
        if (leftHandEquipItem != null)
        {
            var newItem = CharacterItem.Create(leftHandEquipItem);
            equipWeapons.leftHand = newItem;
        }
        character.EquipWeapons = equipWeapons;
        // Armors
        var armorItems = playerCharacter.armorItems;

        foreach (var armorItem in armorItems)
        {
            if (armorItem == null)
            {
                continue;
            }
            var newItem = CharacterItem.Create(armorItem);
            character.EquipItems.Add(newItem);
        }
        // General data
        character.DataId        = dataId;
        character.EntityId      = entityId;
        character.CharacterName = characterName;
        character.Level         = 1;
        var stats = character.GetStats();

        character.CurrentHp      = (int)stats.hp;
        character.CurrentMp      = (int)stats.mp;
        character.CurrentStamina = (int)stats.stamina;
        character.CurrentFood    = (int)stats.food;
        character.CurrentWater   = (int)stats.water;
        character.Gold           = gameInstance.startGold;
        // Inventory
        var startItems = gameInstance.startItems;

        foreach (var startItem in startItems)
        {
            if (startItem.item == null || startItem.amount <= 0)
            {
                continue;
            }
            var amount = startItem.amount;
            if (amount > startItem.item.maxStack)
            {
                amount = startItem.item.maxStack;
            }
            var newItem = CharacterItem.Create(startItem.item, 1, amount);
            character.NonEquipItems.Add(newItem);
        }
        // Position
        var startMap = playerCharacter.StartMap;

        character.CurrentMapName  = startMap.scene.SceneName;
        character.RespawnMapName  = startMap.scene.SceneName;
        character.CurrentPosition = startMap.startPosition;
        character.RespawnPosition = startMap.startPosition;
        DevExtUtils.InvokeStaticDevExtMethods(ClassType, "SetNewCharacterData", character, characterName, dataId, entityId);
        return(character);
    }
Example #28
0
    public static T DeserializeCharacterData <T>(this T characterData, NetDataReader reader) where T : IPlayerCharacterData
    {
        var tempCharacterData = new PlayerCharacterData();

        tempCharacterData.Id              = reader.GetString();
        tempCharacterData.DataId          = reader.GetInt();
        tempCharacterData.EntityId        = reader.GetInt();
        tempCharacterData.CharacterName   = reader.GetString();
        tempCharacterData.Level           = reader.GetShort();
        tempCharacterData.Exp             = reader.GetInt();
        tempCharacterData.CurrentHp       = reader.GetInt();
        tempCharacterData.CurrentMp       = reader.GetInt();
        tempCharacterData.CurrentStamina  = reader.GetInt();
        tempCharacterData.CurrentFood     = reader.GetInt();
        tempCharacterData.CurrentWater    = reader.GetInt();
        tempCharacterData.StatPoint       = reader.GetShort();
        tempCharacterData.SkillPoint      = reader.GetShort();
        tempCharacterData.Gold            = reader.GetInt();
        tempCharacterData.PartyId         = reader.GetInt();
        tempCharacterData.GuildId         = reader.GetInt();
        tempCharacterData.GuildRole       = reader.GetByte();
        tempCharacterData.SharedGuildExp  = reader.GetInt();
        tempCharacterData.CurrentMapName  = reader.GetString();
        tempCharacterData.CurrentPosition = new Vector3(reader.GetFloat(), reader.GetFloat(), reader.GetFloat());
        tempCharacterData.RespawnMapName  = reader.GetString();
        tempCharacterData.RespawnPosition = new Vector3(reader.GetFloat(), reader.GetFloat(), reader.GetFloat());
        tempCharacterData.LastUpdate      = reader.GetInt();
        int count = 0;

        count = reader.GetByte();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterAttribute();
            entry.Deserialize(reader);
            tempCharacterData.Attributes.Add(entry);
        }
        count = reader.GetByte();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterBuff();
            entry.Deserialize(reader);
            tempCharacterData.Buffs.Add(entry);
        }
        count = reader.GetByte();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterSkill();
            entry.Deserialize(reader);
            tempCharacterData.Skills.Add(entry);
        }
        count = reader.GetByte();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterSkillUsage();
            entry.Deserialize(reader);
            tempCharacterData.SkillUsages.Add(entry);
        }
        count = reader.GetByte();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterSummon();
            entry.Deserialize(reader);
            tempCharacterData.Summons.Add(entry);
        }
        count = reader.GetByte();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterItem();
            entry.Deserialize(reader);
            tempCharacterData.EquipItems.Add(entry);
        }
        count = reader.GetShort();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterItem();
            entry.Deserialize(reader);
            tempCharacterData.NonEquipItems.Add(entry);
        }
        count = reader.GetByte();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterHotkey();
            entry.Deserialize(reader);
            tempCharacterData.Hotkeys.Add(entry);
        }
        count = reader.GetByte();
        for (var i = 0; i < count; ++i)
        {
            var entry = new CharacterQuest();
            entry.Deserialize(reader);
            tempCharacterData.Quests.Add(entry);
        }
        var equipWeapons = new EquipWeapons();

        equipWeapons.Deserialize(reader);
        tempCharacterData.EquipWeapons = equipWeapons;
        DevExtUtils.InvokeStaticDevExtMethods(ClassType, "DeserializeCharacterData", characterData, reader);

        tempCharacterData.ValidateCharacterData();
        tempCharacterData.CloneTo(characterData);
        return(characterData);
    }
 public void CreateCharacterEquipWeapons(MySqlConnection connection, MySqlTransaction transaction, string characterId, EquipWeapons equipWeapons)
 {
     CreateCharacterItem(connection, transaction, 0, characterId, InventoryType.EquipWeaponRight, equipWeapons.rightHand);
     CreateCharacterItem(connection, transaction, 0, characterId, InventoryType.EquipWeaponLeft, equipWeapons.leftHand);
 }
        protected void SetClipBasedOnWeapon(EquipWeapons equipWeapons)
        {
            Item weaponItem = GameInstance.Singleton.DefaultWeaponItem;

            if (equipWeapons.rightHand.NotEmptySlot() && equipWeapons.rightHand.GetWeaponItem() != null)
            {
                weaponItem = equipWeapons.rightHand.GetWeaponItem();
            }
            WeaponAnimations weaponAnimations = default(WeaponAnimations);

            CacheWeaponAnimations.TryGetValue(weaponItem.WeaponType.DataId, out weaponAnimations);
            // Remove clips
            if (legacyAnimation.GetClip(CLIP_IDLE) != null)
            {
                legacyAnimation.RemoveClip(CLIP_IDLE);
            }
            if (legacyAnimation.GetClip(CLIP_MOVE) != null)
            {
                legacyAnimation.RemoveClip(CLIP_MOVE);
            }
            if (legacyAnimation.GetClip(CLIP_MOVE_BACKWARD) != null)
            {
                legacyAnimation.RemoveClip(CLIP_MOVE_BACKWARD);
            }
            if (legacyAnimation.GetClip(CLIP_MOVE_LEFT) != null)
            {
                legacyAnimation.RemoveClip(CLIP_MOVE_LEFT);
            }
            if (legacyAnimation.GetClip(CLIP_MOVE_RIGHT) != null)
            {
                legacyAnimation.RemoveClip(CLIP_MOVE_RIGHT);
            }
            if (legacyAnimation.GetClip(CLIP_MOVE_FORWARD_LEFT) != null)
            {
                legacyAnimation.RemoveClip(CLIP_MOVE_FORWARD_LEFT);
            }
            if (legacyAnimation.GetClip(CLIP_MOVE_FORWARD_RIGHT) != null)
            {
                legacyAnimation.RemoveClip(CLIP_MOVE_FORWARD_RIGHT);
            }
            if (legacyAnimation.GetClip(CLIP_MOVE_BACKWARD_LEFT) != null)
            {
                legacyAnimation.RemoveClip(CLIP_MOVE_BACKWARD_LEFT);
            }
            if (legacyAnimation.GetClip(CLIP_MOVE_BACKWARD_RIGHT) != null)
            {
                legacyAnimation.RemoveClip(CLIP_MOVE_BACKWARD_RIGHT);
            }
            if (legacyAnimation.GetClip(CLIP_JUMP) != null)
            {
                legacyAnimation.RemoveClip(CLIP_JUMP);
            }
            if (legacyAnimation.GetClip(CLIP_FALL) != null)
            {
                legacyAnimation.RemoveClip(CLIP_FALL);
            }
            if (legacyAnimation.GetClip(CLIP_HURT) != null)
            {
                legacyAnimation.RemoveClip(CLIP_HURT);
            }
            if (legacyAnimation.GetClip(CLIP_DEAD) != null)
            {
                legacyAnimation.RemoveClip(CLIP_DEAD);
            }
            // Setup generic clips
            legacyAnimation.AddClip(weaponAnimations.idleClip != null ? weaponAnimations.idleClip : defaultAnimations.idleClip, CLIP_IDLE);
            legacyAnimation.AddClip(weaponAnimations.moveClip != null ? weaponAnimations.moveClip : defaultAnimations.moveClip, CLIP_MOVE);
            legacyAnimation.AddClip(weaponAnimations.moveBackwardClip != null ? weaponAnimations.moveBackwardClip : defaultAnimations.moveBackwardClip, CLIP_MOVE_BACKWARD);
            legacyAnimation.AddClip(weaponAnimations.moveLeftClip != null ? weaponAnimations.moveLeftClip : defaultAnimations.moveLeftClip, CLIP_MOVE_LEFT);
            legacyAnimation.AddClip(weaponAnimations.moveRightClip != null ? weaponAnimations.moveRightClip : defaultAnimations.moveRightClip, CLIP_MOVE_RIGHT);
            legacyAnimation.AddClip(weaponAnimations.moveForwardLeftClip != null ? weaponAnimations.moveForwardLeftClip : defaultAnimations.moveForwardLeftClip, CLIP_MOVE_FORWARD_LEFT);
            legacyAnimation.AddClip(weaponAnimations.moveForwardRightClip != null ? weaponAnimations.moveForwardRightClip : defaultAnimations.moveForwardRightClip, CLIP_MOVE_FORWARD_RIGHT);
            legacyAnimation.AddClip(weaponAnimations.moveBackwardLeftClip != null ? weaponAnimations.moveBackwardLeftClip : defaultAnimations.moveBackwardLeftClip, CLIP_MOVE_BACKWARD_LEFT);
            legacyAnimation.AddClip(weaponAnimations.moveBackwardRightClip != null ? weaponAnimations.moveBackwardRightClip : defaultAnimations.moveBackwardRightClip, CLIP_MOVE_BACKWARD_RIGHT);
            legacyAnimation.AddClip(weaponAnimations.jumpClip != null ? weaponAnimations.jumpClip : defaultAnimations.jumpClip, CLIP_JUMP);
            legacyAnimation.AddClip(weaponAnimations.fallClip != null ? weaponAnimations.fallClip : defaultAnimations.fallClip, CLIP_FALL);
            legacyAnimation.AddClip(weaponAnimations.hurtClip != null ? weaponAnimations.hurtClip : defaultAnimations.hurtClip, CLIP_HURT);
            legacyAnimation.AddClip(weaponAnimations.deadClip != null ? weaponAnimations.deadClip : defaultAnimations.deadClip, CLIP_DEAD);
            CrossFadeLegacyAnimation(CLIP_IDLE, 0, WrapMode.Loop);
        }