Перейти к содержимому


Фотография

Кастомизация шкалы прогресса


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 2

#1 PawnLomaster

PawnLomaster

    Участник

  • Пользователь
  • PipPip
  • 116 сообщений

Отправлено 29 Июль 2020 - 9:05

Привет, форумчане.
Моя цель- сделать плагин, который сможет реализовывать игровой progress bar без использования m_flProgressBarStartTime и m_flProgressBarDuration.
В чём соль. Когда игрок хочет подняться самостоятельно (я знаю, что есть куча плагинов на это), у него появляется progress bar. Но тут проблема. Все плагины с прогресс баром, которые я встречал, реализуют его именно через параметры энтити игрока. Из-за этого прогресс заполнения трудно контролировать, а сам текст бара трудно изменить.

Есть 2 выхода.
Первый - это через вспомогательную entity "point_script_use_target" и VScripts. Чтобы использовать VScripts из Sourcemod, нужно знать handle этой entity. В VScripts есть методы, которые возвращают Handle entity (например, GetPlayerFromUserID для игрока или ), но там не идёт учёт, что таких entity может быть несколько. entity handle ≠ индекс entity. Задача - найти способ эффективно находить handle у point_script_use_target. Есть вариант с

FindByTarget(First(), "Здесь имя таргета").SetProgressBarText("Hello world");
FindByTarget(First(), "Здесь имя таргета").SetProgressBarFinishTime(6.0); 
FindByTarget(First(), "Здесь имя таргета").SetProgressBarCurrentProgress(0.0);
FindByTarget(First(), "Здесь имя таргета").CanShowBuildPanel(true);

Имя таргета можно указать при спавне. И тут явно не хватает запоминания найденого handle. Как это реализовать в рамках VScript в Sourcemod у меня нет идей. Да и можно вообще вот так всё подряд через SetVariantString(sBuffer) и AcceptEntityInput(iEntScriptLogic, "RunScriptCode") запускать?
 
Второй - через вспомогательную entity "func_button_timed".

Скрытый текст

Тут всё проще, ибо можно всё настроить в параметрах энтити.
Но так как это браш, я не знаю как его правильно применить. Будет ли она работать сам по себе?

Что думаете?



#2 8rutu5

8rutu5

    Пользователь

  • Пользователь
  • PipPipPip
  • 397 сообщений

Отправлено 29 Июль 2020 - 22:59

Привет, форумчане.
Моя цель- сделать плагин, который сможет реализовывать игровой progress bar без использования m_flProgressBarStartTime и m_flProgressBarDuration.
В чём соль. Когда игрок хочет подняться самостоятельно (я знаю, что есть куча плагинов на это), у него появляется progress bar. Но тут проблема. Все плагины с прогресс баром, которые я встречал, реализуют его именно через параметры энтити игрока. Из-за этого прогресс заполнения трудно контролировать, а сам текст бара трудно изменить.

Есть 2 выхода.
Первый - это через вспомогательную entity "point_script_use_target" и VScripts. Чтобы использовать VScripts из Sourcemod, нужно знать handle этой entity. В VScripts есть методы, которые возвращают Handle entity (например, GetPlayerFromUserID для игрока или ), но там не идёт учёт, что таких entity может быть несколько. entity handle ≠ индекс entity. Задача - найти способ эффективно находить handle у point_script_use_target. Есть вариант с

FindByTarget(First(), "Здесь имя таргета").SetProgressBarText("Hello world");
FindByTarget(First(), "Здесь имя таргета").SetProgressBarFinishTime(6.0); 
FindByTarget(First(), "Здесь имя таргета").SetProgressBarCurrentProgress(0.0);
FindByTarget(First(), "Здесь имя таргета").CanShowBuildPanel(true);

Имя таргета можно указать при спавне. И тут явно не хватает запоминания найденого handle. Как это реализовать в рамках VScript в Sourcemod у меня нет идей. Да и можно вообще вот так всё подряд через SetVariantString(sBuffer) и AcceptEntityInput(iEntScriptLogic, "RunScriptCode") запускать?
 
Второй - через вспомогательную entity "func_button_timed".

Скрытый текст

Тут всё проще, ибо можно всё настроить в параметрах энтити.
Но так как это браш, я не знаю как его правильно применить. Будет ли она работать сам по себе?

Что думаете?

Я не слишком опытный сорспаунер, но честно говоря, либо я чего-то не понял, либо сложность задачи грамотно оценить не могу. 

Но идею предложу, если, конечно, я правильно все понял. 

Идея: Если ты работаешь с SourceMod и VScripts, и тебе надо запоминать handle. То почему бы не сделать запоминание handle полученного в VScripts прямо в плагине? Ведь плагины позволяют в реальном времени редактировать VScripts.



#3 PawnLomaster

PawnLomaster

    Участник

  • Пользователь
  • PipPip
  • 116 сообщений

Отправлено 03 Август 2020 - 8:41

Я не слишком опытный сорспаунер, но честно говоря, либо я чего-то не понял, либо сложность задачи грамотно оценить не могу. 

Но идею предложу, если, конечно, я правильно все понял. 

Идея: Если ты работаешь с SourceMod и VScripts, и тебе надо запоминать handle. То почему бы не сделать запоминание handle полученного в VScripts прямо в плагине? Ведь плагины позволяют в реальном времени редактировать VScripts.

Не всё так просто. Можно запихнуть скрипт функцию через SetVariantString и выполнить через AcceptEntityInput(entScript, "RunScriptCode"), но можно ли получить результат выполнения?




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных