Привет, допустим у нас есть функция AdminOnly для ентити. Хотел такое же сделать, но для другой привилегии и с другой иконкой. Тоесть для AdminOnly - у нас одна иконка, а для допустим ENT.OtheOnly - другая совсем… Как нужно переписать sandbox или что делать??
Прямого ответа на вопрос дать не могу, но могу подсказать, что фундаментально правильнее назвать поле ENT.IconPath / .IconUrl / IconModel с возможностью указания кастомной иконки для предмета, а не статичной для всех с определенным свойством
Просто например сделаешь поле .OnlyCP, стандартная картинка будет с наручниками, а поменять на условно дубинку или варнинг ты не сможешь.
Зато с IconPath сможешь написать скрипт, который выставит всем .OnlyCP это свойство, чтобы не копипастить путь к иконке везде, если не хочешь. Либо просто в глобальную переменную вынести путь к иконке и легко менять при необходимости
Не советую вмешиваться в файлы стандартных гейммодов, либо добавлять их в бэкап. Они всегда должны обновляться с обновой гмода через app_update 4020 validate
Все изменения должны быть реализованы в виде модулей, либо пулл реквестов в официальный репозиторий.
Была у нас в поддержке эпидемия людей «автодонат не работает», клиентов оверхостинга. Оказалось, что оверхостинг использовал свои измененные или устаревшие файлы гейммодов, и в функции http.Fetch (или http.Post) не передавались хедеры (а в свежих версиях должны). Вины гмд нет, но для пользователя кто будет виноват, если не мы?
С телефона не уверен, что то нашел, но дорылся до этого:
- garrysmod/garrysmod/gamemodes/sandbox/gamemode/spawnmenu/creationmenu/content/contenticon.lua at 70bd0e3970b816df2de6449ec2f4c43f7a9a328e · Facepunch/garrysmod · GitHub
- garrysmod/garrysmod/gamemodes/sandbox/gamemode/spawnmenu/creationmenu/content/contenttypes/vehicles.lua at 70bd0e3970b816df2de6449ec2f4c43f7a9a328e · Facepunch/garrysmod · GitHub
- garrysmod/garrysmod/lua/includes/modules/scripted_ents.lua at 70bd0e3970b816df2de6449ec2f4c43f7a9a328e · Facepunch/garrysmod · GitHub
Если буду у компа и будет настроение, то поковыряю. Но на меня не рассчитывайте
Короче попробуй для энтити прописать ENT.IconOverride = путь к материалу
Но не факт, что сработает. Кажется оно саму основу перерисовывает.
И если не сработает, то надо оверрайдить Paint функцию в vgui компоненте ContentIcon
Но лучше всего сделать пулл реквест и потерпеть. Поле назвать .SubIcon = path
ENT.IconPath - не работает, также с IconOverride
Я 40 минут искал и расписывал все, а ты даже в слова не вчитывался…
Отметил тему решенной, хоть это не совсем так, потому что без прямого решения. Если кто-то может сделать пулл реквест с добавлением кастом филда по типу IconOverride, но для SubIcon, например @Karlend @fennec, то сделайте, пожалуйста и отпишите здесь.
Мне кажется, что лучше всего это делать в хуке SpawnMenuOpen
. Через g_SpawnMenu.CreateMenu
можно получить всех children, после чего уже что угодно делать с иконками
Там энивей оверрайдить Пейнт придется без пулл реквеста. Оно там не модульно рисуется. Захардкожено, к сожалению.
Можно оверрайд сделать так, чтобы после отрисовки оригинального пейнта рисовался «наш», но разве что как временный костыль. Все равно нужно делать реквест по хорошему