Esempio n. 1
0
 public static bool TryPurchaseAugment(ItemIndex itemIndex,
                                       AugmentId augmentId,
                                       NetworkInstanceId clientId)
 {
     return(AugmentResolver.TryAddOrUpgradeAugmentToPlayer(clientId,
                                                           itemIndex,
                                                           augmentId));
 }
 public static bool IsAugmentActiveForPlayer(ItemIndex itemIndex,
                                             AugmentId augmentId,
                                             NetworkInstanceId clientId)
 {
     if (!ClientAugmentBinding.TryGetValue(clientId,
                                           out var items))
     {
         return(false);
     }
     return(items.Augments.TryGetValue(itemIndex,
                                       out var augments) && augments.ContainsKey(augmentId));
 }
        public static bool TryAddOrUpgradeAugmentToPlayer(NetworkInstanceId id,
                                                          ItemIndex itemIndex,
                                                          AugmentId augmentId)
        {
            if (!AllAvailableAugments.TryGetValue(itemIndex,
                                                  out var availableAugments) || !availableAugments.TryGetValue(augmentId,
                                                                                                               out var augmentToAdd))
            {
                return(false);
            }

            var(getAugmentsSuccess, augmentList) = GetAugments();
            if (!getAugmentsSuccess)
            {
                return(false);
            }

            var existsAlready = false;

            //If list contains augments for item
            if (augmentList.Augments.TryGetValue(itemIndex,
                                                 out var existingItemAugments))
            {
                //If player already has augment, or if it couldnt be added
                existsAlready = existingItemAugments.ContainsKey(augmentId);
                if (!existsAlready && !existingItemAugments.TryAdd(augmentId, augmentToAdd))
                {
                    return(false);
                }
            }
            //Player does not have any augments for item
            else
            {
                //Create new dictionary of augments for item
                var newAugmentDictionary = new ConcurrentDictionary <AugmentId, AugmentBase>();
                if (!newAugmentDictionary.TryAdd(augmentId,
                                                 augmentToAdd))
                {
                    return(false);
                }

                if (!augmentList.Augments.TryAdd(itemIndex,
                                                 newAugmentDictionary))
                {
                    return(false);
                }
            }

            Chat.AddMessage($"Exists: {existsAlready}");
            if (existsAlready)
            {
                return(augmentToAdd.TryLevelUp(id));
            }
            Chat.AddMessage($"Activate {augmentToAdd.Name}");
            augmentToAdd.Activate();
            augmentToAdd.TryLevelUp(id);
            return(true);

            (bool succes, PlayerAugments existingAugments) GetAugments()
            {
                //If client does not have any augments, add a new list.
                if (!ClientAugmentBinding.ContainsKey(id))
                {
                    if (!ClientAugmentBinding.TryAdd(id,
                                                     new PlayerAugments(id)))
                    {
                        return(false, null);
                    }
                    ;
                }
                //Try get the existing or newly added list.
                if (!ClientAugmentBinding.TryGetValue(id,
                                                      out var existingAugments))
                {
                    return(false, null);
                }

                return(true, existingAugments);
            }
        }