Example #1
0
        private void SkillCancelSubCommand(TSPlayer player)
        {
            var canceledSkill = CustomSkillRunner.RemoveActiveSkill(player.Name);

            if (canceledSkill == null)
            {
                player.SendErrorMessage("There is nothing to cancel!");
            }
        }
        private void OnPlayerChat(PlayerChatEventArgs e)
        {
            //don't check commands
            if (e.RawText.StartsWith(Commands.Specifier))
            {
                return;
            }

            if (!e.Player.HasPermission(SkillPermission))
            {
                return;
            }

            var session = Session.GetOrCreateSession(e.Player);

            if (session.TriggerWordsToSkillDefinitions.Count > 0)
            {
                foreach (var kvp in session.TriggerWordsToSkillDefinitions)
                {
                    var triggerWord = kvp.Key;
                    var definition  = kvp.Value;

                    if (e.RawText.Contains(triggerWord))
                    {
                        //can we use this skill?
                        if (definition.PermissionsToUse != null && !PlayerFunctions.PlayerHasPermission(e.Player, definition.PermissionsToUse))
                        {
                            continue;
                        }

                        if (!session.IsSkillReady(definition.Name))
                        {
                            continue;
                        }

                        if (session.PlayerSkillInfos.TryGetValue(definition.Name, out var playerSkillInfo))
                        {
                            CustomSkillRunner.AddActiveSkill(e.Player, definition, playerSkillInfo.CurrentLevel);
                            return;
                        }
                    }
                }
            }

            //Debug.Print($"Chat: raw: {e.RawText}");
            //Debug.Print($"Chat: formatted: {e.TShockFormattedText}");
        }
Example #3
0
        private void SkillSubCommand(TSPlayer player, string skillName, string categoryName = null)
        {
            if (!GetCategoryAndSkill(player, skillName, categoryName, out var category, out var definition))
            {
                return;
            }

            var session = Session.GetOrCreateSession(player);

            if (!session.HasLearned(skillName))
            {
                player.SendErrorMessage($"You have not learned {skillName}.");
                return;
            }

            //are we allowed to use this skill?
            if (definition.PermissionsToUse != null && !PlayerFunctions.PlayerHasPermission(player, definition.PermissionsToUse))
            {
                player.SendInfoMessage($"You are not allowed to use {skillName}.");
                return;
            }

            //do we have enough "funds" to use this skill?
            if (!session.CanAffordCastingSkill(skillName))
            {
                player.SendInfoMessage($"You cannot afford to use {skillName}.");
                return;
            }

            if (!session.IsSkillReady(definition.Name))
            {
                player.SendInfoMessage($"{skillName} is not ready yet.");
                return;
            }

            session.PlayerSkillInfos.TryGetValue(skillName, out var playerSkillInfo);

            var skillAdded = CustomSkillRunner.AddActiveSkill(player, definition, playerSkillInfo.CurrentLevel);

            if (!skillAdded)
            {
                player.SendInfoMessage($"You cannot use {skillName} right now.");
                return;
            }
        }
        private void OnLoad()
        {
            var cfg      = Config.Instance = JsonConfig.LoadOrCreate <Config>(this, ConfigPath);
            var dbConfig = cfg.DatabaseConfig;

            SessionRepository = SessionDatabaseFactory.LoadOrCreateDatabase(dbConfig.DatabaseType, dbConfig.ConnectionString);

            CustomSkillDefinitionLoader = CustomSkillDefinitionLoader.Load(Path.Combine(DataDirectory, cfg.DefinitionFilepath), cfg.AutoCreateDefinitionFile);
            CustomSkillRunner           = new CustomSkillRunner();

            //connected players need sessions regenerated, in case this was a reload
            foreach (var player in TShock.Players)
            {
                if (player?.Active == true)
                {
                    var session = Session.GetOrCreateSession(player);
                    //... may not need to actually do anything here
                }
            }
        }
 private void OnGameUpdate(EventArgs args)
 {
     CustomSkillRunner.Update();
 }