@Vit_ amin, ну а вдруг? =)
Вроде пытается направлять их как всадник лошадь, ещё и шпорой их подгонять (без понятия влияют ли на ботов нажатия кнопок, прописаные в коде).
Сообщения автоматически склеены:
Кстати, глянул в конфигах координаты точек для карт: там просто мусор прописан для образца. Для трёх совершенно разных карт прописаны одни и те же координаты.
@Vit_ amin, ну а вдруг? =)
Вроде пытается направлять их как всадник лошадь, ещё и шпорой их подгонять (без понятия влияют ли на ботов нажатия кнопок, прописаные в коде).
Сообщения автоматически склеены:
Кстати, глянул в конфигах координаты точек для карт: там просто мусор прописан для образца. Для трёх совершенно разных карт прописаны одни и те же координаты.
Как мне запустить расширения sdktools.ext и game.cstrike.ext на 7-ке?
Соурсмод сообщает 2 раза Точка входа в процедуру RtlPcToFileHeader не найдена в библиотеке DLL kxbase. и оба этих расширения отваливаются.
Сообщения автоматически склеены:
Ну или @DENZEL519 потести прикреплённый плагин.
Одноимённой командой плагин будет пытаться заспавнить флаг в точке куда будешь смотреть с моделькой из первого твоего сообщения.
Он должно спавнить с разными скинами и писать в чат какой скин заспавнил.
Сообщения автоматически склеены:
Интересует работоспособность кода и какой номер в сообщении какому скину будет соответствовать, если код нормально будет работать с моделькой.
Каким образом тогда скин переключать, без редактирования самой модели (чтобы вместо 3 субмоделей у неё было 3 скина)?
Есть ли способ переключаться между «submodel» имеющимися у моделек?
Каким образом тогда скин переключать, без редактирования самой модели (чтобы вместо 3 субмоделей у неё было 3 скина)?
Есть ли способ переключаться между «submodel» имеющимися у моделек?
Каким образом тогда скин переключать, без редактирования самой модели (чтобы вместо 3 субмоделей у неё было 3 скина)?
Есть ли способ переключаться между «submodel» имеющимися у моделек?
@Test_01, глянул архив. Т.е. была переделана моделька так, что скины теперь в скинах, а не субмоделях.
Возможно должно сработать.
Вот поправленый код под эти модели (путь к модели в одном месте поправил ^_^).
@DENZEL519, можешь проверить этот код с моделью, которую прикрепил Test_01? Теперь по идее должен будет меняться скин каждый раз при спавне флага.
@Test_01, глянул архив. Т.е. была переделана моделька так, что скины теперь в скинах, а не субмоделях.
Возможно должно сработать.
Вот поправленый код под эти модели (путь к модели в одном месте поправил ^_^).
@DENZEL519, можешь проверить этот код с моделью, которую прикрепил Test_01? Теперь по идее должен будет меняться скин каждый раз при спавне флага.
Если что, я разобрался с проблемными расширениями на Win7.
Там нужно было всего лишь заменить через HEX-редактор внутри dll-файлов имя процедуры с RtlPcToFileHeader на Beep (в шестнадцатиричном виде заменить последовательность52746C5063546F46696C6548656164657200на426565700000000000000000000000000000).
Способ решения взял вот отсюда (кстати его предложил Forlix, знакомый ник, не правда ли? ^_^):
Prerequisites I have checked that my issue doesn't exist yet in the issue tracker Operating System and Version Windows Server 2008 R2 Game / AppID and Version CS:S (240) v9540945, TF2 (440) v954336...
github.com
Так что теперь смогу без посторонней помощи тестить плагины. Кстати плагин спавна флагов было первым, что я проверил. =)
Сообщения автоматически склеены:
И даже анимация теперь работает
Сообщения автоматически склеены:
Может на базах спавнить Alyx?
И на события активировать анимации. Правда на обеих базах будет одна и та же.
Можете сами попробовать как будет выглядеть (подобрал 5 более-менее подходящих к событиямб правда 3-я и 4-я отпадают из-за поворота модели).
Сообщения автоматически склеены:
Если что, она спавнится командой sm_flag 3
Сообщения автоматически склеены:
Правда тогда нужно будет ещё указывать в конфиге углы поворота (потому что обе модели будут смотреть в одну и ту же сторону).
Блин, код плагина уже за тысячу строк перевалил (в этот момент 1074 строк и 31280 символов), а я только половину кода переделал и он всё ещё не должен работать (ещё не компилится даже).
Добавил режим паузы с оповещением игроков, что она запущена. Нужна в основном для редактирования положения базы и флагов.
Кстати, заменил права доступа с уровня смены карты, на уровень изменения конфигов. Так будет лучше, кмк.
В основном осталось переделать события с флагами и поддержку переводов (ну и сам файл перевода дополнить кучей новых строк).
У меня такой вариант получился
Успел проверить только меню !ctf, чтобы можно было создавать флаги/базы/спавны и сохранять их
Также пока без особых эффектов
Игровая логика (CTF-мод)
Флаги:
Создаются как prop_dynamic_override с моделью FLAG_MODEL и скином по команде (T/CT/нейтральный).
Подбор флага: игрок нажимает USE рядом с флагом → флаг «приклеивается» к игроку (SetParent). Печатаются оповещения: чей флаг поднят/вернут.
Бросок/сброс флага: при смерти/смене команды/командном действии флаг отстыковывается и телепортируется на землю по трейсу вниз.
Возврат флага: если свой флаг смещён с точки, игрок своей команды при касании возвращает его на исходные координаты
Базы (зоны сдачи флага):
Создаются как prop_dynamic_override с моделью BASE_MODEL и цветом по команде.
Сдача: игрок с чужим флагом касается базы противоположной команды → очко его команде, флаг телепортируется на «домой».
Победа раунда: при достижении POINTS_TO_WIN (константа, сейчас 3) инициируется завершение раунда с выигрышем команды.
Респавн и защита
Таймер респавна: при смерти ставится КД 3.0. По истечении — CS_RespawnPlayer.
Респавн около союзников (умный телепорт):
С некоторым шансом (25%) плагин неиспользует механику, иначе пытается телепортировать игрока на ближайший валидный info_player_start, который:
Имеет союзника в радиусе MIN_DISTANCE_TO_SPAWN__TEAM (500.0),
Не имеет врага в радиусе MIN_DISTANCE_TO_SPAWN__ENEMY (450.0).
Бессмертие после спавна: GOD_TIME секунд (сейчас 10):
Игроку отключается урон (m_takedamage = 0), показывается центр-текст с таймером и накладывается полупрозрачная радужная подсветка (анимация цвета по синусу).
Сброс защиты: если игрок двигается (смена позиции) или стреляет (IN_ATTACK/IN_ATTACK2), защита сразу отключается.
AFK-контроль: если за GOD_TIME игрок ничего не сделал, запускается ещё TIME_TO_AFK секунд (сейчас 15) «таймер до AFK»; по истечении — перевод в наблюдатели (ChangeClientTeam(client, 1)).
Ограничение стрельбы при конце раунда: когда игра заканчивается, всем игрокам блокируется стрельба до начала нового раунда
Экипировка и оружие
Выдача на спавне:
Сбрасывается инвентарь (кроме ножа), выдаются выбранные основное и пистолет, 100 брони и шлем.
Меню выбора оружия может авто-открываться на спавне (переключается игроком).
Меню оружия !guns:
Три экрана: главное (две категории + тумблер автопоказа), список первичек, список вторичек.
Выбор сохраняется в client_weapon[client][0/1]. Если игрок под «богом», замена происходит сразу (старое оружие удаляется, новое выдаётся).
Патроны и «награда убийце»:
При смерти игрока убийце:
Полностью восстанавливается здоровье и броня со шлемом,
Перезаряжается активное оружие до полного клипа (размер клипа берётся из sm_weapons_clip по classname).
Пустой выстрел (weapon_fire_on_empty):
Если обойма/магазин на 0 - перевыдает оружие с патронами
Управление точками спавна на карте
При загрузке карты все info_player_terrorist, info_player_counterterrorist и info_player_start:
Собираются в массивы,
Для каждой точки создаётся подсветка-спрайт (env_sprite) разного цвета (T — красный, CT — синий, Neutral — белый),
Спрайты можно включать/выключать глобально (см. меню админа).
Поддерживаются динамическиеспавны:
Создание/удаление спавна по позиции,
Удаление всех/последнего,
Сохранение/загрузка в addons/sourcemod/configs/ctf.ini (структура KeyValues per-map).
Админ-меню !ctf
Главное:
Настройка флагов / баз / спавнов,
Массовое удаление всего,
Тумблер отображения спавн-спрайтов.
Флаги:
Создать CT/T/нейтральный флаг в точке взгляда админа,
Удалить ближайший флаг,
Сохранить флаги в конфиг.
Базы:
Создать базу CT/T,
Удалить ближайшую,
Сохранить базы.
Спавны:
Создать спавн CT/T/нейтральный (нейтральный используется логикой «к ближайшему союзнику»),
Удалить ближайший/все/последний,
Сохранить спавны.
Визуал/эффекты и утилиты
Спрайты над спавнами (env_sprite) с разными материалами: можно быстро визуально проверить сетку спавнов и отключить их показ.
Радужная подсветка «бога» (анимация RGB через синусы) + изменение альфы по оставшемуся времени/AFK-таймеру.
Чистка карты от оружия без владельца, чистка рагдоллов.
Небольшие хелперы: проверка «кнопка только что нажата», выставление задержки оружию, утилиты для KV и форматирования.
Константы/настройки (в коде)
POINTS_TO_WIN = 3 — очков для победы.
GOD_TIME = 10 — секунд бессмертия после респавна.
TIME_TO_AFK = 15 — секунд до отправки в наблюдатели, если «бог» не сброшен.
MIN_DISTANCE_TO_SPAWN__TEAM = 500.0 — союзник должен быть в радиусе спавна для «умного» телепорта.
MIN_DISTANCE_TO_SPAWN__ENEMY = 450.0 — врагов в этом радиусе спавна быть не должно для «умного» телепорта.
@DENZEL519, ну форварды с событиями произошедшими с флагами я планирую добавить. Но это уже когда с большинством остальных функций разберусь.
Сегодня немного поколдовал с выводом инфы в хинт (счёт, состояние флагов, отсчёты до возвращения упавших флагов и возрождения игрока). Ну и сам возврат флага по истечению времени. Штук 11 фраз в файл перевода добавилось.
Снова как с Revival получается: тогда начал улучшать один плагин, в результате решил написать с нуля и оно в монстра на 2к строк выросло за несколько лет. =)
Вообще с анимациями было бы веселее, кмк. По ним было бы видно и без хинта что происходит. =)
Всяко лучше исходных эффектов из партиклей (которые не работали на видео, емнип).
Я вот думаю: нужно ли в форварде CTF_OnFlagDrop() передавать ещё и причину потери (там их и не особо много: дисконнект и смерть)?
В CTF_OnFlagReturn() будет передаваться чей флаг был возвращён, кто возвратил (0 - автовозвращение по таймеру), сколько ему оставалось стоять времени до автовозврата (при автовозврате всегда 0, естественно).
В CTF_OnFlagPickup() планирую передавать какой команды это был флаг, кто подобрал и с базы ли был подборан. Но пока ещё этот форвард не реализовал, как и сам механизм подбора.
Все форварды пока имеют тип void, но для некоторых (типа CTF_OnFlagReturn() и CTF_OnFlagPickup()) имеет смысл сделать Action, возможно.
Сообщения автоматически склеены:
Может сделать возможность устанавливать нейтральные флаги, которые может захватывать любая команда? =)
Правда придётся их количество как-то ограничивать (может даже одной штукой на карту). Или сделать активацию этого флага, если игроков в командах больше определённого количества.
Думаю поможет от кемперства всей команды вокруг одного флага.
Сообщения автоматически склеены:
Надо ли делать возможность забрать флаг у союзника или передать его ему (аналогично бомбе в режиме минирования)?
Ну и делать ли возможность бросить флаг (вот в этом вроде не вижу особого смысла)?
В форварде CTF_OnFlagPickup() передаю третьим параметром (вместо типа откуда он был подобран) сколько времени оставалось до автоматического возвращения флага (-1 - флаг был захвачен с его базы).
Сообщения автоматически склеены:
Кстати, код уже разросся до 1234 строк (прикольное число вышло ^_^) и 36784 символов (с учётом комментов).
Сообщения автоматически склеены:
Вот ещё вам для посмотреть текущие файл перевода и инклюд.