вопрос по CounterStrikeSharp

Energy2901

Участник
Сообщения
4
Реакции
0
Ребят, только не ругайтесь. Я только-только начинаю разбираться в написании плагинов под CounterStrikeSharp. Я сделал простой плагин который по команде !send выводит сообщение пользователю на экран. Но вот проблема в том, что сообщение показывается, но сразу же закрывается. Знающие люди, помогите пожалуйста. Прикрепляю код, но сильно не ругайтесь, я пока не знаю как писать плагины правильно )
C#:
using System.Text.Json;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Commands;

namespace SendMessagePlugin
{
    public class SendMessagePlugin : BasePlugin
    {
        private Config _config = null!;

        public override string ModuleName => "SendMessagePlugin";
        public override string ModuleVersion => "1.0.0";

        public override void Load(bool hotReload)
        {
            _config = LoadConfig();

            AddCommand("send", "Sends a message to the player who invoked the command", OnSendCommand);
        }

        private void OnSendCommand(CCSPlayerController? player, CommandInfo command)
        {
            if (_config != null && _config.Message != null)
            {
                if (player == null)
                {
                    Console.WriteLine(_config.Message);
                }
                else
                {
                    var message = _config.Message;
                    var textColor = _config.TextColor;

                    player.PrintToCenterHtml($"<font color='{_config.TextColor}' class='fontSize-l'>{_config.Message}</font>", 5000);

                }
            }
        }

        private Config LoadConfig()
        {
            var configPath = Path.Combine(ModuleDirectory, "config.json");

            if (!File.Exists(configPath))
            {
                Console.WriteLine("Configuration file not found.");
                return new Config();
            }

            try
            {
                var configData = File.ReadAllText(configPath);
                var config = JsonSerializer.Deserialize<Config>(configData);
                return config ?? new Config();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error loading configuration file: {ex.Message}");
                return new Config();
            }
        }
    }

    public class Config
    {
        public string? Message { get; set; }
        public string? TextColor { get; set; }
    }
}
 

khood

Участник
Сообщения
214
Реакции
51
Ребят, только не ругайтесь. Я только-только начинаю разбираться в написании плагинов под CounterStrikeSharp. Я сделал простой плагин который по команде !send выводит сообщение пользователю на экран. Но вот проблема в том, что сообщение показывается, но сразу же закрывается. Знающие люди, помогите пожалуйста. Прикрепляю код, но сильно не ругайтесь, я пока не знаю как писать плагины правильно )
C#:
using System.Text.Json;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Commands;

namespace SendMessagePlugin
{
    public class SendMessagePlugin : BasePlugin
    {
        private Config _config = null!;

        public override string ModuleName => "SendMessagePlugin";
        public override string ModuleVersion => "1.0.0";

        public override void Load(bool hotReload)
        {
            _config = LoadConfig();

            AddCommand("send", "Sends a message to the player who invoked the command", OnSendCommand);
        }

        private void OnSendCommand(CCSPlayerController? player, CommandInfo command)
        {
            if (_config != null && _config.Message != null)
            {
                if (player == null)
                {
                    Console.WriteLine(_config.Message);
                }
                else
                {
                    var message = _config.Message;
                    var textColor = _config.TextColor;

                    player.PrintToCenterHtml($"<font color='{_config.TextColor}' class='fontSize-l'>{_config.Message}</font>", 5000);

                }
            }
        }

        private Config LoadConfig()
        {
            var configPath = Path.Combine(ModuleDirectory, "config.json");

            if (!File.Exists(configPath))
            {
                Console.WriteLine("Configuration file not found.");
                return new Config();
            }

            try
            {
                var configData = File.ReadAllText(configPath);
                var config = JsonSerializer.Deserialize<Config>(configData);
                return config ?? new Config();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error loading configuration file: {ex.Message}");
                return new Config();
            }
        }
    }

    public class Config
    {
        public string? Message { get; set; }
        public string? TextColor { get; set; }
    }
}
Спасибо
 

xtance

Участник
Сообщения
513
Реакции
743
@Energy2901, за вопрос.

Но если серьёзно, то эту функцию надо крутить в таймере или даже в ontick, так как параметр времени (5000) просто не работает.
Также можно посмотреть примеры в существующих плагинах на гитхабе
 

ragem6nkey

Участник
Сообщения
9
Реакции
5
Ребят, только не ругайтесь. Я только-только начинаю разбираться в написании плагинов под CounterStrikeSharp. Я сделал простой плагин который по команде !send выводит сообщение пользователю на экран. Но вот проблема в том, что сообщение показывается, но сразу же закрывается. Знающие люди, помогите пожалуйста. Прикрепляю код, но сильно не ругайтесь, я пока не знаю как писать плагины правильно )
C#:
using System.Text.Json;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Commands;

namespace SendMessagePlugin
{
    public class SendMessagePlugin : BasePlugin
    {
        private Config _config = null!;

        public override string ModuleName => "SendMessagePlugin";
        public override string ModuleVersion => "1.0.0";

        public override void Load(bool hotReload)
        {
            _config = LoadConfig();

            AddCommand("send", "Sends a message to the player who invoked the command", OnSendCommand);
        }

        private void OnSendCommand(CCSPlayerController? player, CommandInfo command)
        {
            if (_config != null && _config.Message != null)
            {
                if (player == null)
                {
                    Console.WriteLine(_config.Message);
                }
                else
                {
                    var message = _config.Message;
                    var textColor = _config.TextColor;

                    player.PrintToCenterHtml($"<font color='{_config.TextColor}' class='fontSize-l'>{_config.Message}</font>", 5000);

                }
            }
        }

        private Config LoadConfig()
        {
            var configPath = Path.Combine(ModuleDirectory, "config.json");

            if (!File.Exists(configPath))
            {
                Console.WriteLine("Configuration file not found.");
                return new Config();
            }

            try
            {
                var configData = File.ReadAllText(configPath);
                var config = JsonSerializer.Deserialize<Config>(configData);
                return config ?? new Config();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error loading configuration file: {ex.Message}");
                return new Config();
            }
        }
    }

    public class Config
    {
        public string? Message { get; set; }
        public string? TextColor { get; set; }
    }
}
Тут дело в том, что такой текст отображается клиенту с помощью отправки ивента show_survival_respawn_status
В ксго этот ивент работал корректно, отображался согласно duration параметру, но кс2 призван нас радовать своей невероятной кривизной и сообщение у клиента отображается мгновенье. И текущее решение - долбить ивент каждый фрейм на протяжении нужного времени.
 

Energy2901

Участник
Сообщения
4
Реакции
0
Тут дело в том, что такой текст отображается клиенту с помощью отправки ивента show_survival_respawn_status
В ксго этот ивент работал корректно, отображался согласно duration параметру, но кс2 призван нас радовать своей невероятной кривизной и сообщение у клиента отображается мгновенье. И текущее решение - долбить ивент каждый фрейм на протяжении нужного времени.
спасибо
Сообщения автоматически склеены:

@Energy2901, за вопрос.

Но если серьёзно, то эту функцию надо крутить в таймере или даже в ontick, так как параметр времени (5000) просто не работает.
Также можно посмотреть примеры в существующих плагинах на гитхабе
спасибо
 

s1mson

Участник
Сообщения
1
Реакции
0

Пояснение изменений​

  • SendHint: В API некоторых игр SendHint лучше подходит для временного отображения сообщений с явным указанием длительности.
  • Параметр 5000: Если SendHint недоступен, оставляем PrintToCenterHtml с 5000 миллисекундами и проверяем, будет ли это работать. Убедитесь, что текст остается на экране, как задумано.
Попробуйте этот код возможно решит проблему...

код:
using System;
using System.IO;
using System.Text.Json;
using CounterStrikeSharp.API.Core;
using CounterStrikeSharp.API.Modules.Commands;

namespace SendMessagePlugin
{
    public class SendMessagePlugin : BasePlugin
    {
        private Config _config = null!;

        public override string ModuleName => "SendMessagePlugin";
        public override string ModuleVersion => "1.0.0";

        public override void Load(bool hotReload)
        {
            _config = LoadConfig();

            AddCommand("send", "Sends a message to the player who invoked the command", OnSendCommand);
        }

        private void OnSendCommand(CCSPlayerController? player, CommandInfo command)
        {
            if (_config != null && !string.IsNullOrEmpty(_config.Message))
            {
                if (player == null)
                {
                    Console.WriteLine(_config.Message);
                }
                else
                {
                    // Если доступен метод SendHint, используем его для контроля длительности
                    player.SendHint(_config.Message, 5); // Отображение сообщения на 5 секунд

                    // Альтернативный метод через PrintToCenterHtml с контролем времени
                    // Проверяем, если `5000` принимается API
                    player.PrintToCenterHtml($"<font color='{_config.TextColor}' class='fontSize-l'>{_config.Message}</font>", 5000);
                }
            }
        }

        private Config LoadConfig()
        {
            var configPath = Path.Combine(ModuleDirectory, "config.json");

            if (!File.Exists(configPath))
            {
                Console.WriteLine("Configuration file not found.");
                return new Config();
            }

            try
            {
                var configData = File.ReadAllText(configPath);
                var config = JsonSerializer.Deserialize<Config>(configData);
                return config ?? new Config();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error loading configuration file: {ex.Message}");
                return new Config();
            }
        }
    }

    public class Config
    {
        public string? Message { get; set; }
        public string? TextColor { get; set; }
    }
}
 
Сверху Снизу