コード例 #1
0
        //each player can only have a single skill active!
        internal static bool AddActiveSkill(TSPlayer player, CustomSkillDefinition skillDefinition, int level)
        {
            if (ActiveSkills.ContainsKey(player.Name))
            {
                //cant add skill, the player already has an active skill running
                return(false);
            }

            var session = Session.GetOrCreateSession(player);

            if (!session.CanAffordCastingSkill(skillDefinition.Name))
            {
                //cant afford it, abort
                return(false);
            }

            var skill = new CustomSkill(player, skillDefinition, level);

            if (session.TryDeductCost(player, skill.LevelDefinition.CastingCost))
            {
                //Debug.Print("Player was unable to afford casting cost, after casting started. Ignoring.");
                skill.Phase         = SkillPhase.Casting;
                skill.CastStartTime = DateTime.Now;

                ActiveSkills.Add(player.Name, skill);

                return(true);
            }
            else
            {
                return(false);
            }
        }
コード例 #2
0
        internal CustomSkill(TSPlayer player, CustomSkillDefinition skillDefinition, int levelIndex)
        {
            PlayerName    = player.Name;
            Player        = player;
            Definition    = skillDefinition;
            LevelIndex    = levelIndex;
            StartLocation = new Vector2(player.X, player.Y);
            SkillState    = new SkillState(this);

            if (levelIndex < 0 || levelIndex >= skillDefinition.Levels.Count)
            {
                throw new ArgumentOutOfRangeException($"{nameof(levelIndex)}");
            }
        }
コード例 #3
0
        /// <summary>
        /// Attempts to get both the requested skill definition, and its current level definition for the current session.
        /// </summary>
        /// <param name="skillName"></param>
        /// <param name="skillDefinition"></param>
        /// <param name="levelDefinition"></param>
        /// <returns>True if both skill and level could be retrieved</returns>
        internal bool TryGetSkillAndLevel(string skillName, out CustomSkillDefinition skillDefinition, out CustomSkillLevelDefinition levelDefinition)
        {
            skillDefinition = CustomSkillsPlugin.Instance.CustomSkillDefinitionLoader.TryGetDefinition(skillName);
            levelDefinition = null;

            if (skillDefinition != null)
            {
                if (PlayerSkillInfos.TryGetValue(skillName, out var skillInfo))
                {
                    levelDefinition = skillDefinition.Levels[skillInfo.CurrentLevel];
                    return(true);
                }
            }

            return(false);
        }
コード例 #4
0
        private bool GetCategoryAndSkill(TSPlayer player, string skillName, string categoryName, out CustomSkillCategory category, out CustomSkillDefinition skillDef)
        {
            category = null;
            skillDef = null;

            if (string.IsNullOrWhiteSpace(skillName))
            {
                player.SendErrorMessage("Expected skill name.");
                player.SendSyntaxMessage(SyntaxSkillSub);
                return(false);
            }

            if (!string.IsNullOrWhiteSpace(categoryName))
            {
                category = CustomSkillDefinitionLoader.TryGetCategory(categoryName);
            }
            else
            {
                category = CustomSkillDefinitionLoader.TryGetCategory();                //get default "uncategorized" category...
            }
            if (category == null)
            {
                player.SendErrorMessage($"No such category '{categoryName}'.");
                return(false);
            }

            category.TryGetValue(skillName, out skillDef);

            if (skillDef == null)
            {
                player.SendErrorMessage($"No such skill as '{skillName}'.");
                return(false);
            }

            return(true);
        }