//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); } }
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)}"); } }
/// <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); }
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); }