Склад маленького кода, мелочь пузатая |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
|
Склад маленького кода, мелочь пузатая |
Safety1st
|
21.5.2014, 10:39
Сообщение
|
|
|
Чуток улучшен код HS Stats, v 0.3 -> 0.4, 'плагин' тут.
|
|
|
|
Safety1st
|
30.5.2014, 18:31
Сообщение
|
|
|
Simple Daynight Code
Универсальная готовая платформа для переключения между 2-мя режимами в зависимости от времени суток. Может использоваться как основа для плагинов 'Ночной режим', 'Map On Time' и т.п., а также любых плагинов, которые должны 'работать' строго 'от' и 'до', например, плагины розыгрышей, 'запуск / отключение плагина в определенное время'. Ключевые особенности: • произвольные границы режима; • смену режима можно задать с точностью до минуты; • привязка к локальному времени выполняется однократно, нет повторяющейся функции для проверки на время. Старт и конец 'ночного' режима задаются в #define NIGHT_MODE_START и #define NIGHT_MODE_END. Раскомментировав опцию #define DEBUG можно посмотреть вживую за сменами режимов: Скрытый текст Код [AMXX] Loaded 3 admins from file Night mode interval: start - 16:39, end - 16:44. Current time - 16:37, current mode - 'day', 00:02 before mode change. Executing day mode cmds... Fuck yeah! Server has changed mode to night one. Night mode interval: start - 16:39, end - 16:44. Current time - 16:39, current mode - 'night', 00:05 before mode change. Executing night mode cmds... Fuck yeah! Server has changed mode to day one. Night mode interval: start - 16:39, end - 16:44. Current time - 16:44, current mode - 'day', 23:55 before mode change. Executing day mode cmds... Код [AMXX] Loaded 3 admins from file Night mode interval: start - 16:00, end - 16:51. Current time - 16:47, current mode - 'night', 00:04 before mode change. Executing night mode cmds... Fuck yeah! Server has changed mode to day one. Night mode interval: start - 16:00, end - 16:51. Current time - 16:51, current mode - 'day', 23:09 before mode change. Executing day mode cmds... Команды, которые должны выполняться при инициализации режима, добавляются в блок ProcessCurrentMode(). Если нужен информер незадолго до изменения режима - задачу на него поставить там же, а задержку ей назначить как разницу между giNextChangeDelay и временем, насколько заранее перед сменой режима начать показывать информер, не забыв перевести итог из минут в секунды. Функция GetNextModeChangeDelay( currenttime = -1 ) возвращает, сколько времени в минутах осталось до очередной смены режима. Текущее локальное время (сколько минут прошло с начала суток) можно не указывать: она определит сама. Легко добавить API (нативу для использования в других плагинах). Функция GetNextModeChangeDelayWord() только 'намечена' (не реализована), предполагается её использование для информирования игроков в 'человеческом формате' (5 ч. 2 мин или 3 ч. вместо 05:02:39 и 03:00:21 соответственно). v0.2b 19.05.2014
simple_daynight_code.sma ( 5,5 килобайт )
Кол-во скачиваний: 202Если будут вопросы по алгоритму, я подскажу. |
Поблагодарили 7 раз
|
|
Safety1st
|
1.6.2014, 19:05
Сообщение
|
|
|
Добавляем поддержку цветного чата для AMXX 1.8.1/1.8.2-dev/1.8.2
Собственная поддержка colorchat'а появилась только в AMXX 1.8.3-dev с билда hg185 (с 23.08.2013 г.) И тут возникли некоторые неудобства с совместимостью плагинов, сделанных для AMXX 1.8.3-dev, с предыдущими версиями AMXX и наоборот. Есть несколько вариантов решения 'проблемы'. Поскольку я занимаюсь разработкой плагинов в первую очередь под последние dev-версии AMXX, мне удобнее добавлять поддержку цветного чата для старых билдов дополнительно. Пример: Код #include <amxmodx> #if AMXX_VERSION_NUM < 183 // AMXX 1.8.3-dev since hg185 has its own colorchat support #include <colorchat> #define print_team_default DontChange #define print_team_grey Grey #define print_team_red Red #define print_team_blue Blue #endif public plugin_init() { // ... register_dictionary( "dictionary.txt" ) } SomeFunction() { client_print_color( id, print_team_red, "%L", id, "TEST_MSG" ) client_print_color( 0, print_team_default, "%L", LANG_PLAYER, "TEST_MSG2" ) } Для совместимости добавляется только блок #if AMXX_VERSION_NUM < 183 ... #endif. Всё! Преимущества описанного способа: • сервера с последними dev-версиями AMXX используют встроенные возможности AMXX; • не требуются различные словари (lang-файлы) для разных версий AMXX. Нюансы: • словарь составляется для AMXX 1.8.3! Т.е. только ^1 ... ^4, никаких !n, !t, !g и прочего; • stock-версия (инклуд) для старых билдов не умеет корректно обрезать текст в кодировке UTF-8. Если тот не влезет в 190 символов (максимальный разрешённый размер строки в чате) - последний символ может 'пострадать'. В AMXX 1.8.3-dev такого 'бага' нет. Внимание! Чтобы всё было вот так вот просто и легко, требуется использовать инклуд stock'ового colorchat'а от ConnorMcLeod'а, улучшенный Lev'ом. Загрузка тут, эта же ссылка указана в шапке топика. Инклуд полностью совместим со всеми предыдущими версиями, поэтому для компиляции плагинов на AMXX 1.8.1/1.8.2-dev/1.8.2 рекомендуется использовать только его. Так и для потребителей будет удобно, когда со всеми плагинами в комплекте идёт один и тот же инклуд, а не свой у каждого скриптера) Или, на крайний случай, - взаимозаменяемые. Например, такой инклуд:
colorchat.inc.zip ( 6,56 килобайт )
Кол-во скачиваний: 26Ничем по сути не отличается и полностью совместим с версией от ConnorMcLeod & Lev. Здесь только добавлена пара комментариев и совместимость с плагинами, использующими инклуд от Numb. -- Если в существующий плагин требуется добавить поддержку возможностей AMXX 1.8.3-dev в плане цветного чата, но переделывать его не хочется, можно пойти аналогичным - добавка в шапку, но другим путём. Мб опишу его и как 'работать' с нативой client_print_color() и, особенно, с её параметром sender (куда можно подставлять print_team_*), в другой раз. -- И на всякий случай
Отредактировал: Safety1st, - 15.5.2015, 12:19
|
Поблагодарили 2 раз
|
|
Safety1st
|
17.6.2014, 10:45
Сообщение
|
|
|
Смена слота для оружия
Простейший плагин-пример на смену слота для glock'а. Без понятия, где это может пригодиться. ![]() Все необходимые комментарии присутствуют в sma. v0.1 17.06.2014 г.
change_glock_slot.sma ( 1,45 килобайт )
Кол-во скачиваний: 146 |
Поблагодарили 5 раз
|
|
[WPMG]PRoSToTeM@
|
3.8.2014, 7:32
Сообщение
|
|
|
|
Поблагодарили 4 раз
|
|
csnet
|
3.8.2014, 8:06
Сообщение
|
|
|
хоть так, чтобы не быдлокодили скорость в curweapon
![]() go v cs:go
|
|
|
|
Safety1st
|
3.8.2014, 16:43
Сообщение
|
|
|
|
Поблагодарили 1 раз
|
|
[WPMG]PRoSToTeM@
|
3.8.2014, 18:28
Сообщение
|
|
|
|
|
|
|
Safety1st
|
6.8.2014, 17:05
Сообщение
|
|
|
Фишки меню
источник: AMXXModX.ru • скрытие меню у игроков Чтобы убрать меню с экрана игрока, ему нужно отправить новое меню, но без клавиш для выбора. Какой текст - не важно, разумнее использовать пустышку. Ну и минимальное время показа - 1 секунда. Скрыть меню у определённого игрока: Код show_menu( id, 0, "^n", 1 ) Скрыть меню у всех игроков:Код show_menu( 0, 0, "^n", 1 ) Таким же способом скрываются и 'новые' меню (см. newmenus.inc ): они всего лишь обёртка на т.н. 'старыми': на самом деле в игре меню одно и то же. Важно не забыть предварительно 'нажать' кнопку Выход за игрока с помощью: Код menu_cancel(id) • длинные строки в меню Максимальный размер текста меню - 512 символов. Но размер пунктов меню не лимитируется: они могут быть произвольного размера. Ограничивается только длина текста, не содержащего служебные тэги \d, \r, \w, \y и \R - 80 символов. Поэтому если нужен длинный пункт - просто дополните текст тэгами в нужных местах. На экране помещаются 90 символов при разрешении 800x600 и 115 - при 1024x768. Пример ниже. • трансляция команд в клавиши Это встроенная возможность игры. В тексте меню указывается команда, а при показе меню она автоматически заменяется на кнопку, на которую назначена у игрока. Работает такая возможность только для 'плюсовых' команд: +attack, +use, +hook и т.д., но для любых из них. Пример на последние 2 случая: Код Код:
/** ![]() Чтобы меню выглядело как на скриншоте, необходимо предварительно забиндить клавишу: Код bind "?" "+test"
|
Поблагодарили 3 раз
|
|
[WPMG]PRoSToTeM@
|
11.8.2014, 0:43
Сообщение
|
|
|
Safety1st, так и не дописал про использование Ham_CS_Player_ResetMaxSpeed на более ранних версиях amxmodx
|
|
|
|
Safety1st
|
11.8.2014, 1:34
Сообщение
|
|
|
[WPMG]PRoSToTeM@, просто руки не дошли пока. Напишу обязательно.
|
|
|
|
csnet
|
11.8.2014, 7:41
Сообщение
|
|
|
насколько я помню раньше был просто Preframe который клонировали с новым названием под resetmaxspeed, где то на оленях была история написана
![]() go v cs:go
|
|
|
|
Safety1st
|
26.8.2014, 7:06
Сообщение
|
|
|
Дропнуть пистолет без дропа щита
Как известно, первым всегда дропается щит, кроме случая, когда игрок держит в руках бомбу. При выполнении команды есть проверка на его наличие. Решение - на время установить нужный оффсет, чтобы игра посчитала, что щита у игрока нет, затем дропнуть оружие, затем 'вернуть' щит. Одна проблема: при дропе оружия вызывается функция поиска лучшего из оставшихся у игрока и оно деплоится (достаётся). На тот момент щит ещё 'не возвращён' и игрок его не увидит. Просто деплоим оружие повторно после 'возврата' щита. Код только для AMXX 1.8.3-dev Код #include <amxmodx> #include <cstrike> #include <fakemeta> #include <hamsandwich> DropWithoutShield(id) { const m_bHasShield = 2043 new iRestore if( cs_get_user_shield(id) ) // temporary set new info to be able to drop weapon iRestore = set_pdata_bool( id, m_bHasShield, false ) /* тут должен быть собственно дроп оружия; пример можно посмотреть в плагине 'Weapon Menu Hardcoded' http://c-s.net.ua/forum/index.php?act=findpost&pid=638283 */ if( iRestore ) { set_pdata_bool( id, m_bHasShield, true ) // due to weapon dropping we have deployed another weapon without a shield drawn;) so redeploy it const m_pActiveItem = 373 new iActiveItem = get_pdata_cbase( id, m_pActiveItem ) if( iActiveItem ) ExecuteHamB( Ham_Item_Deploy, iActiveItem ) } } Код с поддержкой и предыдущих версий AMXX куда более громозкий: Код Код #include <amxmodx> #include <cstrike> #include <fakemeta> #include <hamsandwich> DropWithoutShield(id) { #if AMXX_VERSION_NUM < 183 const m_boolsUserPrefsAndShield = 510 const m_bHasShield = (1<<24) #else const m_bHasShield = 2043 #endif new iRestoreData if( cs_get_user_shield(id) ) { // temporary set new info to be able to drop weapon #if AMXX_VERSION_NUM < 183 iRestoreData = get_pdata_int( id, m_boolsUserPrefsAndShield ) set_pdata_int( id, m_boolsUserPrefsAndShield, iRestoreData & ~m_bHasShield ) #else iRestoreData = set_pdata_bool( id, m_bHasShield, false ) #endif } /* тут должен быть собственно дроп оружия; пример можно посмотреть в плагине 'Weapon Menu Hardcoded' http://c-s.net.ua/forum/index.php?act=findpost&pid=638283 */ if( iRestoreData ) { #if AMXX_VERSION_NUM < 183 set_pdata_int( id, m_boolsUserPrefsAndShield, iRestoreData | m_bHasShield ) #else set_pdata_bool( id, m_bHasShield, true ) #endif // due to weapon dropping we have deployed another weapon without a shield drawn;) so redeploy it const m_pActiveItem = 373 new iActiveItem = get_pdata_cbase( id, m_pActiveItem ) if( iActiveItem ) ExecuteHamB( Ham_Item_Deploy, iActiveItem ) } } Пример применения функционала - в плагине 'Weapon Menu Hardcoded'. |
Поблагодарили 3 раз
|
|
![]() ![]() |