Склад маленького кода, мелочь пузатая |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
|
Склад маленького кода, мелочь пузатая |
Safety1st
|
15.12.2013, 2:01
Сообщение
|
|
|
Если на Складе маленьких плагинов продукты для конечных потребителей, то тут - компоненты для продуктов ;)
В общем, код для скриптеров и особо продвинутых юзеров ;) Буду выкладывать особо интересные по тем или иным причинам для меня вещи, которые могут быть интересны или полезны другим. Это либо вещи, которые я не встречал в паблике, либо нестандартно реализованный знакомый функционал, либо применение непривычных для начинающих методов. Это склад, а не топик по обучению или поддержке. Просьба отнестись с пониманием, что ваши посты могут быть проигнорированы. Новички в скриптинге могут создать свою собственную тему в этом разделе, задать вопросы и кинуть ссылку на нужный пост в моей. -- Облако ссылок ;) • распространение плагинов и авторские права • редактирование плагинов с кириллицей • чат в плагинах: ошибка 'user message size limit is 192 bytes', цветной чат, цветной чат: обязательно ли использовать инклуд • [TUT] работа со словарями • вывод информации в MOTD-окне • 'новые' меню из 9 или 10 пунктов • автозакрытие предыдущего меню (чтобы избежать проблем) • фикс, чтобы игрок мог подбирать оружие карты (armoury_entity) • правильная установка тэга 'VIP' в таблице счета • правильная установка брони без модуля cstrike • с какими неудобствами можно столкнуться в new menus • баг обработки строк в UTF-8 в AMXX ниже 1.8.3-dev • как различить AMXX 1.8.2 и 1.8.2-dev? Приобщаемся к AMXX 1.8.3: • ошибка 'PF_precache_generic_I' и кодировка res-файлов • нужно ли перекомпилировать плагины?.. • запускаем новый AMXX на старых билдах (5758/5787) • stock'овый colorchat от ConnorMcLeod'а, улучшенный Lev'ом; рекомендуется к применению на AMXX 1.8.1/1.8.2-dev/1.8.2 как единственный вариант • добавляем поддержку цветного чата для предыдущих версий AMXX • фикс бан-системы AMXX • <to be continued...> Интересненькое: • динамические состояния: eng rus • как вызвать функцию в другом плагине без API (актуально для плагинов без исходников) Прочее: • Ham для ботов • сравнение методов получения списка игроков • CVS-клиент для новичков Atlassian SourceTree и приватные репозитории от Bitbucket -- Добавка к плагину дуэлей Реализовал идею юзера __valera__, интересный функционал для плагина дуэлей - поочерёдная стрельба: патроны выдаются дуэлянтам по очереди. Без понятия, есть ли такое в паблике. Вдвоём в тестовом режиме можно опробовать на пустом сервере.
duel_1_by_1_template.sma ( 2,94 килобайт )
Кол-во скачиваний: 216Назначение кастомных моделей оружия и скорости Реализация самым простым способом - через CurWeapon. Оптимизации: хранение всех возможностей в единственной переменной, однократная обработка события и только при смене оружия (в быдлоплагинах - каждый выстрел).
curweapon_forever.sma ( 1,37 килобайт )
Кол-во скачиваний: 251Рандомная выдача fiveseven либо выдача патронов к пустому Рандомная выдача одному из игроков за раунд fiveseven. Если оружие уже есть - давать 1 патрон, в обойму или в запас - см. строки 42 и 43. Мне было непросто определить id оружия, к которому следует добавить патрон.
give_perc.sma ( 1,54 килобайт )
Кол-во скачиваний: 170Получить оружие киллера в Ham_Killed Простенький способ с помощью get_user_weapon() не работает корректно для HE/C4 и вызывает нарекания у многих скриптеров с точки зрения точности. В данном примере всё абсолютно корректно и точно ;) Дополнения от PRoSToTeM@.
ham_killed_weapon.sma ( 1,94 килобайт )
Кол-во скачиваний: 153Разбиение строки: parse/strbreak vs pawn Оказывается, гораздо выгоднее использовать готовые нативы из string.inc, чем пытаться сделать то же самое в pawn'е. • показательный пример с результатами профилирования:
filldata_native_vs_pawn.sma ( 2,28 килобайт )
Кол-во скачиваний: 75• глупый пример практического применения 'парсера' - квар в числа:
filldata.sma ( 1,07 килобайт )
Кол-во скачиваний: 51strfind() вместо strbreak(), наверное, ещё лучше будет, но только при отсутствии бага с последним параметром, который пофикшен только в AMXX 1.8.2; мне сейчас затратно пробовать. На AMXX 1.8.1 можно попробовать contain(szString[pos], <>) как strfind(). Перезарядить пистолет в новом раунде Тут 2-мя строчками не обойдёшься) Функционал пригодится во многих VIP-говноплагинах, выдающих халявный дигл каждый раунд. Что-либо убирать из кода не советую, там нет ничего лишнего. Чтобы также красиво выдавать дигл при спавне (без дропа дефолтного пистолета и/или красных надписей в HUD'е), кода потребуется не меньше.
refresh_pistol_on_newround.sma ( 2,05 килобайт )
Кол-во скачиваний: 147Получить скин игрока Скин - это модель, с которой должен бегать игрок, т.е. самый простой способ - использовать cs_get_user_team() : Код CsTeams:cs_get_user_team(index, &{CsInternalModel,_}:model = CS_DONTCHANGE) где нас интересует только model; все варианты описаны в enum CsInternalModel. Если интересует только id скина (например, для информера), а дополнительные действия в зависимости от его значения не нужны, то в примере вторые switch'и лучше заменить двумерным массивом. Если получение скина в плагине может вызываться и до первого спавна игрока, нужно дополнительно учесть, успел ли игрок выбрать скин, иначе можно получить неверные результаты.
get_player_class.sma ( 1,24 килобайт )
Кол-во скачиваний: 74Не придумал пока заголовок На коде плагина можно поучиться нескольким вещам: • • Пример применения и исходник тут, на практике пользоваться не рекомендую. Только в учебных целях. Получить любое количество рандомных игроков Универсальная функция, получающая любое количество рандомных уникальных игроков. код Код SomeFunction() { #define PLAYERS_NEED 3 new iPlayers[PLAYERS_NEED], iPlayersHave, iPlayer iPlayersHave = GetRandomPlayers( iPlayers, PLAYERS_NEED ) new szIds[32] = "none", iLen // FOR TEST ONLY for( new i = 0; i < iPlayersHave; i++ ) { iPlayer = iPlayers[i] // ... iLen += formatex( szIds[iLen], charsmax(szIds) - iLen, "%d ", iPlayer ) // FOR TEST ONLY } server_print( "Got players: %s", szIds ) // FOR TEST ONLY } GetRandomPlayers( players[], const need ) { new iPlayers[32], iPlayersNum, iLastPlayer, iRandom, iFound get_players( iPlayers, iPlayersNum, "a" ) // only alive iLastPlayer = iPlayersNum - 1 while( iLastPlayer != -1 && iFound != need ) { iRandom = random_num( 0, iLastPlayer ) // properly works for ( 0, 0 ) too players[iFound++] = iPlayers[iRandom] if( iRandom != iLastPlayer ) { // move last element to new position iPlayers[iRandom] = iPlayers[iLastPlayer] } iLastPlayer-- } return iFound } Подсчёт общего числа игроков in-game Прибавлять только в client_putinserver, вычитать в client_disconnect, но только если игрок до этого putinserver прошёл. Подробнее. HS Stats Простейший плагин-пример на применение nVault'а для хранения статистики. Подробнее. Simple Daynight Code Универсальная платформа для переключения между 2-мя режимами в зависимости от времени суток. Подробнее. Смена слота для оружия Простейший плагин-пример на смену слота для glock'а. Подробнее. Автозакрытие меню плагина при выходе из зоны покупки Может применяться в shop'ах, работающих в пределах байзоны. Подробнее. Установка скорости игрока 2 рекомендуемых способа поддержания установленной игроку скорости и правильные установка и возврат к 'обычной'. Подробнее. Разбиение строки из чата на 2 части И обработка в зависимости от значения первого параметра. Подробнее. Фишки меню Cкрытие меню, длинные строки, трансляция биндов в клавиши. Подробнее. Дропнуть пистолет без дропа щита Это не так просто ;) Подробнее. Мгновение позже эвента 'New Round' Сабж. Подробнее. Detect Walking API API позволяет обнаружить бесшумно идущих ('на шифте') игроков. Подробнее. Важное замечание о get_user_weapons Возможна ситуация, когда функция будет отрабатывать не так, как вы хотите. Подробнее. Работа с юникодом Подсчёт числа символов и корректное обрезание строк. Подробнее. Dynamic Weather На сервере можно управлять 'погодой' без смены карты, в любое время и без слоухакинга; данный плагин показывает как. Подробнее. разработку кода.
Отредактировал: Safety1st, - 28.12.2019, 5:07
|
Поблагодарили 26 раз
|
|
intercs
|
15.12.2013, 2:37
Сообщение
|
|
|
Скрытый текст Если на Складе маленьких плагинов продукты для конечных потребителей, то тут - компоненты для продуктов ;) В общем, код для скриптеров и особо продвинутых юзеров ;) Буду выкладывать особо интересные по тем или иным причинам для меня вещи, которые могут быть интересны или полезны другим. Это либо вещи, которые я не встречал в паблике, либо нестандартно реализованный знакомый функционал, либо применение непривычных для начинающих методов. Это склад, а не топик по обучению или поддержке. Просьба отнестись с пониманием, что ваши посты могут быть проигнорированы. -- Добавка к плагину дуэлей Реализовал идею юзера __valera__, интересный функционал для плагина дуэлей - поочерёдная стрельба: патроны выдаются дуэлянтам по очереди. Без понятия, есть ли такое в паблике. Вдвоём в тестовом режиме можно опробовать на пустом сервере.
duel_1_by_1_template.sma ( 2,94 килобайт )
Кол-во скачиваний: 216Назначение кастомных моделей оружия и скорости Реализация самым простым способом - через CurWeapon. Оптимизации: хранение всех возможностей в единственной переменной, однократная обработка события и только при смене оружия (в быдлоплагинах - каждый выстрел).
curweapon_forever.sma ( 1,37 килобайт )
Кол-во скачиваний: 251-- Огласите пожалуйста весь список, помимо маленького склада, наверняка есть и целый ангар?))) curweapon_forever.sma = это, к примеру НА ПАБЛИКЕ вышел я с сервера/кикнули/ за карту, а у меня было на этой карте 12 000 барабулек и АВП в руках и если я успею зайти перед сменой карты, то у меня останутся барабульки и АВП? Или данный плагин больше подходит для зомби и иных модах?
Отредактировал: intercs, - 15.12.2013, 2:38
|
Поблагодарили 1 раз
|
|
Safety1st
|
12.1.2014, 11:06
Сообщение
|
|
|
Добавлен код 'рандомная выдача fiveseven либо выдача патронов к пустому'.
|
Поблагодарили 2 раз
|
|
Safety1st
|
15.2.2014, 10:59
Сообщение
|
|
|
Добавлен код 'получить оружие киллера в Ham_Killed'.
|
Поблагодарили 3 раз
|
|
Johnny
|
15.2.2014, 11:26
Сообщение
|
![]() |
Safety1st,
Похвально и очень полезно, надеюсь скриптеры поддержат. |
|
|
|
Safety1st
|
15.2.2014, 11:42
Сообщение
|
|
|
так и подумал что через оффсет, а c4 вроде дает DMG_BLAST ? если да тогда можно по другому отловить Да, C4 даёт DMG_BLAST. Только по битам DMG_BLAST, DMG_HEGRENADE и т.д. в m_bitsDamageType определять КРАЙНЕ НЕ рекомендую, тут подробнее описал. Но для C4 в Ham_Killed приемлемо. по поводу Назначение кастомных моделей оружия и скорости несогласен, сам юзал попервой, я бы посоветовал 'Не согласен' - звучит забавно :) Речь о самом простом способе. И задачи у меня были несколько иные :) Так-то да, твои Ham_Player_ResetMaxSpeed (требует обновлённого Ham'а) и get_pdata_cbase(wpn, m_pPlayer /* = 41 */, OFFSET_WEAPON /* = 4 */) - продвинутее.
Отредактировал: Safety1st, - 15.2.2014, 12:09
|
|
|
|
Safety1st
|
21.2.2014, 16:46
Сообщение
|
|
|
Добавлены изыскания под названием 'разбиение строки: parse/strbreak vs pawn' ;)
|
|
|
|
Sky Cat
|
21.2.2014, 17:23
Сообщение
|
|
|
Если топиком будешь заниматься, то будет висеть закрепленным.
![]() я знаю, что я ничего не знаю
|
|
|
|
Safety1st
|
21.2.2014, 17:45
Сообщение
|
|
|
Не стоит. Вряд ли складирование является ведением топика.
// pozdno skazal:D
Отредактировал: Sky Cat, - 21.2.2014, 17:49
|
|
|
|
Safety1st
|
9.3.2014, 5:53
Сообщение
|
|
|
Добавлен код 'перезарядить пистолет в новом раунде'.
|
Поблагодарили 1 раз
|
|
Safety1st
|
9.3.2014, 17:51
Сообщение
|
|
|
Добавлен код 'получить скин игрока'.
|
Поблагодарили 1 раз
|
|
Safety1st
|
11.3.2014, 12:54
Сообщение
|
|
|
Добавлен код 'получить любое количество рандомных игроков'.
|
|
|
|
Safety1st
|
26.4.2014, 20:10
Сообщение
|
|
|
Добавлен код 'Подсчёт общего числа игроков in-game'.
|
Поблагодарили 1 раз
|
|
Safety1st
|
20.5.2014, 7:05
Сообщение
|
|
|
Плагин-пример HS Stats
Простейший пример на применение nVault'а для хранения статистики, в данном случае - хэдшотов. На кой чёрт кому-то понадобился :D HS хранятся по никам. Сохранение идёт только при disconnect'е игрока. Смена ника во время нахождения на сервере новые записи не плодит. Пустых игроков (с 0 HS) не сохраняет. Статистика не зануляется. Для наблюдения за процессом и тестов следует раскомментировать опцию DEBUG. Отсутствует проверка на ботов. v0.4 21.05.2014
hs_stats.sma ( 2,47 килобайт )
Кол-во скачиваний: 91По-хорошему стату нужно хранить по SteamID (пример от Subb98) и предусмотреть очистку устаревших записей. А вообще nVault не для тысяч записей, не для статы, для таких масштабов следует использовать MySQL/SQLite. А насчёт конкретно применения только для хранения HS - тоже глупо: эту информацию можно брать напрямую из статы csstats, которую ведёт модуль CSX. Вот как выглядят данные nVault'а под 'микроскопом': ![]()
Отредактировал: Developer, - 21.5.2014, 16:47
|
Поблагодарили 2 раз
|
|
![]() ![]() |