Привет, форумчане.
Моя цель- сделать плагин, который сможет реализовывать игровой 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".
Тут всё проще, ибо можно всё настроить в параметрах энтити.
Но так как это браш, я не знаю как его правильно применить. Будет ли она работать сам по себе?
Что думаете?