Ejemplo n.º 1
0
    private Sprite CalcIcon(IPerk perk)
    {
        Debug.Log(perk.Scheme.Sid);
        var iconSprite = Resources.Load <Sprite>($"Icons/perks/{perk.Scheme.Sid}");

        return(iconSprite);
    }
Ejemplo n.º 2
0
 public void AddPerk(IPerk perk)
 {
     foreach (var employee in _Employees)
     {
         employee.Accept(perk);
     }
 }
Ejemplo n.º 3
0
        public void OnModuleItemUnequipped()
        {
            NWPlayer oPC   = NWPlayer.Wrap(_.GetPCItemLastUnequippedBy());
            NWItem   oItem = NWItem.Wrap(_.GetPCItemLastUnequipped());

            if (!oPC.IsPlayer)
            {
                return;
            }

            List <PCPerk> perks = _db.StoredProcedure <PCPerk>("GetPCPerksByExecutionType",
                                                               new SqlParameter("PlayerID", oPC.GlobalID),
                                                               new SqlParameter("ExecutionTypeID", (int)PerkExecutionType.EquipmentBased));

            foreach (PCPerk pcPerk in perks)
            {
                pcPerk.Perk = _db.Perks.Single(x => x.PerkID == pcPerk.PerkID);
                string jsName = pcPerk.Perk.JavaScriptName;
                if (string.IsNullOrWhiteSpace(jsName))
                {
                    continue;
                }

                IPerk perkAction = App.ResolveByInterface <IPerk>("Perk." + jsName);
                perkAction?.OnItemUnequipped(oPC, oItem);
            }
        }
Ejemplo n.º 4
0
        public void OnHitCastSpell(NWPlayer oPC)
        {
            NWObject oTarget             = NWObject.Wrap(_.GetSpellTargetObject());
            int      activeWeaponSkillID = oPC.GetLocalInt("ACTIVE_WEAPON_SKILL");

            if (activeWeaponSkillID <= 0)
            {
                return;
            }

            Data.Entities.Perk entity = _db.Perks.Single(x => x.PerkID == activeWeaponSkillID);

            IPerk perk = App.ResolveByInterface <IPerk>("Perk." + entity.JavaScriptName);

            if (perk.CanCastSpell(oPC, oTarget))
            {
                perk.OnImpact(oPC, oTarget);

                if (oTarget.IsNPC)
                {
                    ApplyEnmity(oPC, NWCreature.Wrap(oTarget.Object), entity);
                }
            }
            else
            {
                oPC.SendMessage(perk.CannotCastSpellMessage(oPC, oTarget) ?? "That ability cannot be used at this time.");
            }

            oPC.DeleteLocalString("ACTIVE_WEAPON_SKILL_UUID");
            oPC.DeleteLocalInt("ACTIVE_WEAPON_SKILL");
        }
Ejemplo n.º 5
0
        private bool CheckLevelCap(IPerk perk)
        {
            var currentLevel = perk.CurrentLevel;

            if (currentLevel == null)
            {
                return(false);
            }

            var nextLevel = PerkHelper.GetNextLevel(perk.Scheme, currentLevel);

            var maxLevel            = perk.Scheme.Levels.Length - 1;
            var nextLevelOutOfRange = nextLevel.Primary > maxLevel;

            if (nextLevelOutOfRange)
            {
                return(true);
            }
            else
            {
                var currentSubLevelIsMax = currentLevel.Sub >= perk.Scheme.Levels[currentLevel.Primary].MaxValue;
                if (currentSubLevelIsMax)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Ejemplo n.º 6
0
        public void OnHitCastSpell(NWPlayer oPC)
        {
            if (!oPC.IsPlayer)
            {
                return;
            }
            NWItem        oItem   = NWItem.Wrap(_.GetSpellCastItem());
            int           type    = oItem.BaseItemType;
            List <PCPerk> pcPerks = _db.StoredProcedure <PCPerk>("GetPCPerksWithExecutionType",
                                                                 new SqlParameter("PlayerID", oPC.GlobalID));

            foreach (PCPerk pcPerk in pcPerks)
            {
                pcPerk.Perk = GetPerkByID(pcPerk.PerkID);
                if (string.IsNullOrWhiteSpace(pcPerk.Perk.JavaScriptName) || pcPerk.Perk.ExecutionTypeID == (int)PerkExecutionType.None)
                {
                    continue;
                }

                IPerk perkAction = App.ResolveByInterface <IPerk>("Perk." + pcPerk.Perk.JavaScriptName);
                if (perkAction == null)
                {
                    continue;
                }

                if (pcPerk.Perk.ExecutionTypeID == (int)PerkExecutionType.ShieldOnHit)
                {
                    if (type == BASE_ITEM_SMALLSHIELD || type == BASE_ITEM_LARGESHIELD || type == BASE_ITEM_TOWERSHIELD)
                    {
                        perkAction.OnImpact(oPC, oItem);
                    }
                }
            }
        }
        private static Rectangle GetPerkIcon(IPerk perk)
        {
            if (perk.Scheme.IsBuildIn)
            {
                return(new Rectangle(0, 64, 32, 32));
            }

            return(new Rectangle(32, 64, 32, 32));
        }
Ejemplo n.º 8
0
        private static PerkLevel GetFirstOrNextLevel(IPerk perk)
        {
            if (perk.CurrentLevel is null)
            {
                // Perk is not leveled yet
                return(new PerkLevel(1, 1));
            }

            return(PerkHelper.GetNextLevel(perk.Scheme, perk.CurrentLevel));
        }
 public MockHiddenTerritory(Character _character, IPerk _requiredPerk, ITile startTile)
 {
     character            = _character;
     requiredPerk         = _requiredPerk;
     connectedTerritories = new List <ITerritory>()
     {
         startTile
     };
     creatures = new List <ICreature>();
 }
Ejemplo n.º 10
0
    private Sprite CalcIcon(IPerk perk)
    {
        var iconSprite = Resources.Load <Sprite>($"Icons/perks/{perk.Scheme.Sid}");

        if (iconSprite is null)
        {
            iconSprite = Resources.Load <Sprite>($"Icons/perks/default");
        }

        return(iconSprite);
    }
Ejemplo n.º 11
0
        private void ApplyCooldown(NWPlayer pc, CooldownCategory cooldown, IPerk ability)
        {
            float finalCooldown   = ability.CooldownTime(pc, (float)cooldown.BaseCooldownTime);
            int   cooldownSeconds = (int)finalCooldown;
            int   cooldownMillis  = (int)((finalCooldown - cooldownSeconds) * 100);

            PCCooldown pcCooldown = _db.PCCooldowns.Single(x => x.PlayerID == pc.GlobalID && x.CooldownCategoryID == cooldown.CooldownCategoryID);

            pcCooldown.DateUnlocked = DateTime.UtcNow.AddSeconds(cooldownSeconds).AddMilliseconds(cooldownMillis);
            _db.SaveChanges();
        }
Ejemplo n.º 12
0
        public void ApplyCooldown(NWPlayer pc, CooldownCategory cooldown, IPerk ability)
        {
            float finalCooldown   = ability.CooldownTime(pc, (float)cooldown.BaseCooldownTime);
            int   cooldownSeconds = (int)finalCooldown;
            int   cooldownMillis  = (int)((finalCooldown - cooldownSeconds) * 100);

            PCCooldown pcCooldown = _data.GetAll <PCCooldown>().Single(x => x.PlayerID == pc.GlobalID && x.CooldownCategoryID == cooldown.ID);

            pcCooldown.DateUnlocked = DateTime.UtcNow.AddSeconds(cooldownSeconds).AddMilliseconds(cooldownMillis);
            _data.SubmitDataChange(pcCooldown, DatabaseActionType.Update);
        }
Ejemplo n.º 13
0
        private IEnumerable <IPerk> GetPerksSafe()
        {
            var perks = EvolutionData?.GetArchievedPerks();

            if (perks == null)
            {
                perks = new IPerk[0];
            }

            return(perks);
        }
Ejemplo n.º 14
0
        private static bool CheckLevelCap(IPerk perk)
        {
            var currentLevel = perk.CurrentLevel;

            if (currentLevel == null)
            {
                return(false);
            }

            return(!PerkHelper.HasNextLevel(perk.Scheme, currentLevel));
        }
Ejemplo n.º 15
0
        public static string GetPerkHintText(IPerk perk)
        {
            var title       = GetPropTitle(perk);
            var description = GetPerkDescription(perk);

            if (!string.IsNullOrWhiteSpace(description))
            {
                return($"{title}\n{new string('-', 8)}\n{description}");
            }

            return(title);
        }
Ejemplo n.º 16
0
        private void Update()
        {
            if (InputController.ConfirmAction)
            {
                if (inSpawningMode && currentPerkToSpawn != null)
                {
                    IPerk perk = currentPerkToSpawn.GetComponent <IPerk>();
                    if (perk.Cost <= PlayerStats.Singleton.PlayerMoney)
                    {
                        PlayerStats.Singleton.DecreasePlayerMoney(perk.Cost);
                        Destroy(currentPerkHologram);
                        perk.Enable();
                        currentPerkToSpawn.SetActive(true);
                        currentPerkToSpawn.transform.parent = null;
                        currentPerkToSpawn = null;
                        inSpawningMode     = false;
                    }
                    else
                    {
                        UIManager.Singleton.ShowMessage("Not enough money!!, Press [E] to cancel", 2f);
                    }
                }
            }

            if (!inSpawningMode && Perks.Length > 0)
            {
                foreach (var perk in Perks)
                {
                    if (Input.GetKeyDown((KeyCode)perk.PerkKey))
                    {
                        inSpawningMode      = true;
                        currentPerkHologram = perk.HologramPrefab;
                        currentPerkToSpawn  = perk.OriginalPrefab;
                        SpawnPerk(currentPerkToSpawn, false, false);
                        SpawnPerk(currentPerkHologram, true, true);
                    }
                }
            }


            if (inSpawningMode && InputController.CancelAction)
            {
                inSpawningMode = false;
                currentPerkToSpawn.transform.parent  = null;
                currentPerkHologram.transform.parent = null;
                Destroy(currentPerkToSpawn);
                Destroy(currentPerkHologram);
            }
        }
 private static PerkStorageData CreatePerkStorageData(IPerk x)
 {
     return(new PerkStorageData
     {
         Sid = x.Scheme.Sid,
         Level = x.CurrentLevel?.Primary,
         SubLevel = x.CurrentLevel?.Sub,
         Jobs = x.CurrentJobs.Select(job => new PerkJobStorageData
         {
             Type = job.Scheme.Type,
             Scope = job.Scheme.Scope,
             Progress = job.Progress,
             IsComplete = job.IsComplete
         }).ToArray()
     });
 }
Ejemplo n.º 18
0
        /// <summary>
        /// Возвращает все развитиые перки персонажа.
        /// </summary>
        /// <param name="evolutionData"> Модуль эволюции. </param>
        /// <returns> Коллекция прокаченных перков или пустая коллекция, если перки модуля эволюции равны null. </returns>
        /// <remarks>
        /// Полученными перками считаются перки, которые прокачены хотя бы на один уровень.
        /// </remarks>
        public static IEnumerable <IPerk> GetArchievedPerks([NotNull] this IEvolutionData evolutionData)
        {
            if (evolutionData == null)
            {
                throw new ArgumentNullException(nameof(evolutionData));
            }

            var archievedPerks = evolutionData.Perks?.Where(x => x.CurrentLevel != null);

            if (archievedPerks == null)
            {
                archievedPerks = new IPerk[0];
            }

            return(archievedPerks);
        }
Ejemplo n.º 19
0
    public void Init(IPerk perk)
    {
        var iconSprite = CalcIcon(perk);

        IconImage.sprite = iconSprite;

        if (perk.CurrentLevel != null)
        {
            LevelText.gameObject.SetActive(true);
            LevelText.text = $"{perk.CurrentLevel.Primary} +{perk.CurrentLevel.Sub}";
        }
        else
        {
            LevelText.gameObject.SetActive(false);
        }
    }
Ejemplo n.º 20
0
        public void PerkLevelUp(IPerk perk)
        {
            var activePerkIsValid = Perks.Contains(perk);

            if (!activePerkIsValid)
            {
                throw new InvalidOperationException("Указанный перк не является активным для текущего актёра.");
            }

            var nextLevel = PerkHelper.GetNextLevel(perk.Scheme, perk.CurrentLevel);

            perk.CurrentLevel = nextLevel;

            UpdatePerks();

            DoPerkArchieved(perk);
        }
Ejemplo n.º 21
0
    public void Run()
    {
        foreach (var s in spawnEvent)
        {
            IPerk[] perks = new IPerk[] { new Perk1(), new Perk2(), new Perk3() };

            var player = spawnEvent.Get1(s).player;

            if (player.perks == null)
            {
                player.perks = perks;

                if (!player.photonView.IsMine)
                {
                    spawnEvent.Get1(s).player.PerkEvent += PerkEvent;
                }
            }
        }
    }
Ejemplo n.º 22
0
    public static EventCode AddPerkToEntity(this IPerk perk, ref EcsEntity entity)
    {
        if (perk is Perk1)
        {
            entity.Get <Perk1>();
            return(EventCode.Perk1);
        }
        if (perk is Perk2)
        {
            entity.Get <Perk2>();
            return(EventCode.Perk2);
        }
        if (perk is Perk3)
        {
            entity.Get <Perk3>();
            return(EventCode.Perk3);
        }

        return(default);
Ejemplo n.º 23
0
        public void OnHitCastSpell(NWPlayer oPC)
        {
            NWObject oTarget             = NWObject.Wrap(_.GetSpellTargetObject());
            int      activeWeaponSkillID = oPC.GetLocalInt("ACTIVE_WEAPON_SKILL");

            if (activeWeaponSkillID <= 0)
            {
                return;
            }

            Data.Entities.Perk entity = _db.Perks.Single(x => x.PerkID == activeWeaponSkillID);

            IPerk perk = App.ResolveByInterface <IPerk>("Perk." + entity.JavaScriptName);

            perk?.OnImpact(oPC, oTarget);

            oPC.DeleteLocalString("ACTIVE_WEAPON_SKILL_UUID");
            oPC.DeleteLocalInt("ACTIVE_WEAPON_SKILL");
        }
Ejemplo n.º 24
0
        private void HandleQueueWeaponSkill(NWPlayer pc, Data.Entities.Perk entity, IPerk ability)
        {
            string queueUUID = Guid.NewGuid().ToString();

            pc.SetLocalInt("ACTIVE_WEAPON_SKILL", entity.PerkID);
            pc.SetLocalString("ACTIVE_WEAPON_SKILL_UUID", queueUUID);
            pc.SendMessage("Weapon skill '" + entity.Name + "' queued for next attack.");

            ApplyCooldown(pc, entity.CooldownCategory, ability);

            // Player must attack within 30 seconds after queueing or else it wears off.
            pc.DelayCommand(() =>
            {
                if (pc.GetLocalString("ACTIVE_WEAPON_SKILL_UUID") == queueUUID)
                {
                    pc.DeleteLocalInt("ACTIVE_WEAPON_SKILL");
                    pc.DeleteLocalString("ACTIVE_WEAPON_SKILL_UUID");
                    pc.SendMessage("Your weapon skill '" + entity.Name + "' is no longer queued.");
                }
            }, 30.0f);
        }
Ejemplo n.º 25
0
        private void ApplyEnmity(NWPlayer pc, NWCreature target, Data.Entities.Perk perk)
        {
            switch ((EnmityAdjustmentRuleType)perk.EnmityAdjustmentRuleID)
            {
            case EnmityAdjustmentRuleType.AllTaggedTargets:
                _enmity.AdjustEnmityOnAllTaggedCreatures(pc, perk.Enmity);
                break;

            case EnmityAdjustmentRuleType.TargetOnly:
                if (target.IsValid)
                {
                    _enmity.AdjustEnmity(target, pc, perk.Enmity);
                }
                break;

            case EnmityAdjustmentRuleType.Custom:
                IPerk perkAction = App.ResolveByInterface <IPerk>("Perk." + perk.JavaScriptName);
                perkAction?.OnCustomEnmityRule(pc, perk.Enmity);
                break;
            }
        }
Ejemplo n.º 26
0
        /// <inheritdoc />
        public void PerkLevelUp(IPerk perk)
        {
            if (perk is null)
            {
                throw new ArgumentNullException(nameof(perk));
            }

            var activePerkIsValid = Perks.Contains(perk);

            if (!activePerkIsValid)
            {
                throw new InvalidOperationException("Указанный перк не является активным для текущего актёра.");
            }

            var nextLevel = GetFirstOrNextLevel(perk);

            perk.CurrentLevel = nextLevel;

            UpdatePerks();

            DoPerkArchieved(perk);
        }
Ejemplo n.º 27
0
        public static string GetPropTitle(IPerk perk)
        {
            var text = perk.Scheme.Name?.En;

            var currentLanguage = Thread.CurrentThread.CurrentUICulture;
            var langName        = currentLanguage.TwoLetterISOLanguageName;

            if (string.Equals(langName, "en", StringComparison.InvariantCultureIgnoreCase))
            {
                text = perk.Scheme.Name?.En;
            }
            else if (string.Equals(langName, "ru", StringComparison.InvariantCultureIgnoreCase))
            {
                text = perk.Scheme.Name?.Ru;
            }
            else
            {
                Debug.Fail(
                    $"Unknown language {langName} is selected. All available language must be supported in the client.");
            }

            return(text ?? "<Undef>");
        }
Ejemplo n.º 28
0
 public PerkEventArgs(IPerk perk)
 {
     Perk = perk;
 }
Ejemplo n.º 29
0
        private void DoPerkArchieved(IPerk perk)
        {
            var eventArgs = new PerkEventArgs(perk);

            PerkLeveledUp?.Invoke(this, eventArgs);
        }
Ejemplo n.º 30
0
 protected BasePerk(IPerk <AlchemySkill> perk)
 {
     Perk = perk;
 }
Ejemplo n.º 31
0
 int NextPerkLevel(IPerk perk)
 {
     var thisKindOfPerk = perksApplied.Where(x => x.GetType() == perk.GetType());
     if (thisKindOfPerk.Any())
     {
         return thisKindOfPerk.Max(x => x.level) + 1;
     }
     return 1;
 }