Написание плагинов

Kewn

Участник
Сообщения
341
Реакции
62
ну и тогда как можно уникально идентифицировать тот же пистолет от маппера? типо по таргетнейму? но не все итемы на карте имеют таргетнейм. ну и идентифицировать надо не только пистолет но и кнопки, math_counterы
Все именно так) а сообщения в худ нужно само собой засунуть в хинт.
 

7pElllHuK

Участник
Сообщения
1,491
Реакции
513
Всем добрый день. Подскажите пожалуйста, как можно отследить нажатие CTRL при открытом меню закупки? Если открыть меню закупки оружия, то OnPlayerRunCmd перестает отслеживать нажатие кнопок полностью, Все кнопки кроме a,s,d,f,g,r и цифр перестают работать. Пробовал запускать таймер в начале раунда с постоянным отслеживанием кнопок через GetClientButtons, все равно все кнопки кроме выше упомянутых блокируются. Как можно это исправить?
 

NeLifeASkazka

Участник
Сообщения
137
Реакции
79
Всем добрый день. Подскажите пожалуйста, как можно отследить нажатие CTRL при открытом меню закупки? Если открыть меню закупки оружия, то OnPlayerRunCmd перестает отслеживать нажатие кнопок полностью, Все кнопки кроме a,s,d,f,g,r и цифр перестают работать. Пробовал запускать таймер в начале раунда с постоянным отслеживанием кнопок через GetClientButtons, все равно все кнопки кроме выше упомянутых блокируются. Как можно это исправить?
Вряд ли тогда еще как-то получиться. Во всяком случае в SM
Для чего перехватывать кнопки в меню закупки?

Можно еще проверить зажать ctrl и открыть меню закупки. Может хоть так что-то будет
 

7pElllHuK

Участник
Сообщения
1,491
Реакции
513
Вряд ли тогда еще как-то получиться. Во всяком случае в SM
Для чего перехватывать кнопки в меню закупки?

Можно еще проверить зажать ctrl и открыть меню закупки. Может хоть так что-то будет
Хотел сделать дроп оружия тиммейтам из кс2 при удержании ctrl, но меню закупки блокирует все кнопки и даже те что я выше указывал нельзя получить через стандартные функции, эти кнопки только меню закупки видит и реагирует на них
 

NeLifeASkazka

Участник
Сообщения
137
Реакции
79
Хотел сделать дроп оружия тиммейтам из кс2 при удержании ctrl, но меню закупки блокирует все кнопки и даже те что я выше указывал нельзя получить через стандартные функции, эти кнопки только меню закупки видит и реагирует на них
Ну что-то подобное я и ожидал

Можно сделать по другому
Например чтобы игрок мог включать/выключать режим покупки для кого-то/для себя

Например:
Игрок нажмет 2 раза на таб(или по какой-то команде), и ему сообщит о том, что он может покупать оружие союзникам
При покупке - будет просто выкидывать оружие в сторону куда смотрит игрок

Ну и после mp_buytime - режим "сбрасывается" на стандартный (для себя). Или при каждом спавне игрока


Можно даже сделать, чтобы при покупке игроку высвечивало меню с игроками, кому конкретно купить оружие

В общем есть варианты как сделать
 

7pElllHuK

Участник
Сообщения
1,491
Реакции
513
Ну что-то подобное я и ожидал

Можно сделать по другому
Например чтобы игрок мог включать/выключать режим покупки для кого-то/для себя

Например:
Игрок нажмет 2 раза на таб(или по какой-то команде), и ему сообщит о том, что он может покупать оружие союзникам
При покупке - будет просто выкидывать оружие в сторону куда смотрит игрок

Ну и после mp_buytime - режим "сбрасывается" на стандартный (для себя). Или при каждом спавне игрока


Можно даже сделать, чтобы при покупке игроку высвечивало меню с игроками, кому конкретно купить оружие

В общем есть варианты как сделать
так-то можно, но не то чего я хотел) Смысл как по мне теряется
Сообщения автоматически склеены:

Ну что-то подобное я и ожидал

Можно сделать по другому
Например чтобы игрок мог включать/выключать режим покупки для кого-то/для себя

Например:
Игрок нажмет 2 раза на таб(или по какой-то команде), и ему сообщит о том, что он может покупать оружие союзникам
При покупке - будет просто выкидывать оружие в сторону куда смотрит игрок

Ну и после mp_buytime - режим "сбрасывается" на стандартный (для себя). Или при каждом спавне игрока


Можно даже сделать, чтобы при покупке игроку высвечивало меню с игроками, кому конкретно купить оружие

В общем есть варианты как сделать
Хочется удобства, в кс2 ты зашел в меню закупки, ctrl держишь и делишься дропом, без всяких лишних меню, лишних настроек и тд. Печально что в ксс такое не реализовать
 
Последнее редактирование:

NeLifeASkazka

Участник
Сообщения
137
Реакции
79
так-то можно, но не то чего я хотел) Смысл как по мне теряется
Сообщения автоматически склеены:


Хочется удобства, в кс2 ты зашел в меню закупки, ctrl держишь и делишься дропом, без всяких лишних меню, лишних настроек и тд. Печально что в ксс такое не реализовать
В кс2 и меню совсем другое)

Еще костыльный вариант
Перед открытием меню закупа проверять держал ли игрок ctrl
Если да - то выбрасывать покупаемое оружие, нет - то все как обычно

Ну а вообще тут вопрос в удобстве
Не обязательно делать прям все как в кс2
Мне было бы и удобно "переключаться" на закупку себе/другим

Тут ведь дело привычки еще
 

7pElllHuK

Участник
Сообщения
1,491
Реакции
513
В кс2 и меню совсем другое)

Еще костыльный вариант
Перед открытием меню закупа проверять держал ли игрок ctrl
Если да - то выбрасывать покупаемое оружие, нет - то все как обычно

Ну а вообще тут вопрос в удобстве
Не обязательно делать прям все как в кс2
Мне было бы и удобно "переключаться" на закупку себе/другим

Тут ведь дело привычки еще
Думал над этим вариантом, тоже в голову приходил, но попробуй объяснить игрокам что надо ctrl держать ДО открытия меню, а не во время. Так же данный вариант вызывает проблему покупки оружия себе, нужно будет закрыть меню и уже открывать БЕЗ ctrl
 

NeLifeASkazka

Участник
Сообщения
137
Реакции
79
Если игрок покупает оружия через бинды, то там еще проще проверять держит ли игрок ctrl

Или еще чутка костыльный вариант)
Не знаю можно ли, но можно через RequestFrame, после того как игрок купил оружие, проверять дердит ли игрок ctrl

Но это уже нужно проверять. Будет время - проверю и отпишу в лс
Или выложу в ресурсы
Сообщения автоматически склеены:

Но это тоже не то
 

7pElllHuK

Участник
Сообщения
1,491
Реакции
513
Или еще чутка костыльный вариант)
Не знаю можно ли, но можно через RequestFrame, после того как игрок купил оружие, проверять дердит ли игрок ctrl
Вот уже ближе к тому что надо, мб сам попробую. спасибо
 

Raptor01

Участник
Сообщения
5
Реакции
0
Всем привет. Как отследить что все игроки вышли из сервера?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,598
Реакции
5,085
@Raptor01, можно отлавливать дисконнекты и считать в этот момент игроков
 

Nekro

Терра инкогнита
Сообщения
4,071
Реакции
2,338

7pElllHuK

Участник
Сообщения
1,491
Реакции
513
Всем привет. Как отследить что все игроки вышли из сервера?
Считаешь сколько игроковзашло и сколько вышло, если числа совпали то сервер пустой, либо циклом после дисконнекта игрока проверять есть ли игроки (не боты) если нет то опять таки сервер пустой
 

NeLifeASkazka

Участник
Сообщения
137
Реакции
79
Может кто подсказать

Проблема с сохранением конфига KeyValues
Есть такой конфиг:
config1.ini:
"test"
{
    "section_1"
    {

    }
    "section_2"
    {
        "section_2_1"
        {
            
        }
    }
}

После выполнения такого кода:
code:
public void OnPluginStart(){
    char buffer[256];

    KeyValues KV = new KeyValues("test");
    BuildPath(Path_SM, buffer, sizeof(buffer), "configs/test.ini");

    KV.ImportFromFile(buffer);
    KV.Rewind();

    KV.JumpToKey("section_2");
    KV.JumpToKey("section_2_1");
    KV.SetString("key_1", "text_key_1");
    
    KV.Rewind();
    KV.ExportToFile(buffer);
}

Удаляются пустые секции, в данном случае "section_1":
config:
"test"
{
    "section_2"
    {
        "section_2_1"
        {
            "key_1"        "text_key_1"
        }
    }
}

Как сделать чтобы при KV.ExportToFile(); пустые секции не удалялись?
 

DENZEL519

Работаю через AI !
Сообщения
490
Реакции
315
@NeLifeASkazka,

Кратко​

У KeyValues (и в движке, и в SourceMod) нет режима, который бы сохранял полностью пустые секции при записи в файл. При ExportToFile все ветки, у которых нет ни одного ключа/подсекции, просто выкидываются.

Что с этим сделать​

Есть только обходные варианты:
  • Заполнять секцию "заглушкой"
Например, при инициализации конфига:


C-подобный:
public void OnPluginStart()
  {
      char buffer[256];
      BuildPath(Path_SM, buffer, sizeof(buffer), "configs/test.ini");

      KeyValues kv = new KeyValues("test");
      kv.ImportFromFile(buffer);
      kv.Rewind();

      // Убедиться, что секция_1 существует и не пустая
      if (kv.JumpToKey("section_1", true))  // true = создать, если нет
      {
          kv.SetNum("_keep", 1); // фиктивный ключ, чтобы секция не была пустой
      }

      kv.Rewind();
      if (kv.JumpToKey("section_2", true) && kv.JumpToKey("section_2_1", true))
      {
          kv.SetString("key_1", "text_key_1");
      }

      kv.Rewind();
      kv.ExportToFile(buffer);
  }


Секция больше не считается пустой и не будет удалена.
  • Хранить структуру отдельно и пересобирать при записи
Если очень важно не иметь никаких "мусорных" ключей, можно хранить список секций/подсекций в своих структурах (массивах, ADT-array, trie и т.п.) и при сохранении не пользоваться ExportToFile, а генерировать KeyValues/файл вручную по этой структуре. Но это намного сложнее. Итого: без фиктивного содержания или ручной генерации файла сохранить абсолютно пустые секции нельзя — это поведение самого KeyValues.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,598
Реакции
5,085
@NeLifeASkazka, никак.

Вообще есть несложный способ, который легче, чем чатгопота придумала, но смысла в этом нет при правильно написаных алгоритмах чтения конфигов. Я его случайно обнаружил не так давно. =)
 

NeLifeASkazka

Участник
Сообщения
137
Реакции
79
@DENZEL519, такой вариант мне не подходит
Сообщения автоматически склеены:

@Grey83, что за способ? Если не секрет
 

Vit_ amin

Добрая душа
Сообщения
1,548
Реакции
735
@NeLifeASkazka Скорее всего это все что вам предложили выше - это "костыли", в виду того, что реализация класса KeyValues находиться в vstdlib, то требуется изучать класс и патчить/деторить функционал для необходимости вашей задачи
 
Сверху Снизу