Склад маленького кода, мелочь пузатая |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Склад маленького кода, мелочь пузатая |
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 килобайт ) Кол-во скачиваний: 214 Назначение кастомных моделей оружия и скорости Реализация самым простым способом - через CurWeapon. Оптимизации: хранение всех возможностей в единственной переменной, однократная обработка события и только при смене оружия (в быдлоплагинах - каждый выстрел). curweapon_forever.sma ( 1,37 килобайт ) Кол-во скачиваний: 249 Рандомная выдача fiveseven либо выдача патронов к пустому Рандомная выдача одному из игроков за раунд fiveseven. Если оружие уже есть - давать 1 патрон, в обойму или в запас - см. строки 42 и 43. Мне было непросто определить id оружия, к которому следует добавить патрон. give_perc.sma ( 1,54 килобайт ) Кол-во скачиваний: 169 Получить оружие киллера в Ham_Killed Простенький способ с помощью get_user_weapon() не работает корректно для HE/C4 и вызывает нарекания у многих скриптеров с точки зрения точности. В данном примере всё абсолютно корректно и точно ;) Дополнения от PRoSToTeM@. ham_killed_weapon.sma ( 1,94 килобайт ) Кол-во скачиваний: 150 Разбиение строки: parse/strbreak vs pawn Оказывается, гораздо выгоднее использовать готовые нативы из string.inc, чем пытаться сделать то же самое в pawn'е. • показательный пример с результатами профилирования: filldata_native_vs_pawn.sma ( 2,28 килобайт ) Кол-во скачиваний: 74 • глупый пример практического применения 'парсера' - квар в числа: filldata.sma ( 1,07 килобайт ) Кол-во скачиваний: 50 strfind() вместо strbreak(), наверное, ещё лучше будет, но только при отсутствии бага с последним параметром, который пофикшен только в AMXX 1.8.2; мне сейчас затратно пробовать. На AMXX 1.8.1 можно попробовать contain(szString[pos], <>) как strfind(). Перезарядить пистолет в новом раунде Тут 2-мя строчками не обойдёшься) Функционал пригодится во многих VIP-говноплагинах, выдающих халявный дигл каждый раунд. Что-либо убирать из кода не советую, там нет ничего лишнего. Чтобы также красиво выдавать дигл при спавне (без дропа дефолтного пистолета и/или красных надписей в HUD'е), кода потребуется не меньше. refresh_pistol_on_newround.sma ( 2,05 килобайт ) Кол-во скачиваний: 146 Получить скин игрока Скин - это модель, с которой должен бегать игрок, т.е. самый простой способ - использовать 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 килобайт ) Кол-во скачиваний: 73 Не придумал пока заголовок На коде плагина можно поучиться нескольким вещам: • • Пример применения и исходник тут, на практике пользоваться не рекомендую. Только в учебных целях. Получить любое количество рандомных игроков Универсальная функция, получающая любое количество рандомных уникальных игроков. код Код 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 килобайт ) Кол-во скачиваний: 214 Назначение кастомных моделей оружия и скорости Реализация самым простым способом - через CurWeapon. Оптимизации: хранение всех возможностей в единственной переменной, однократная обработка события и только при смене оружия (в быдлоплагинах - каждый выстрел). curweapon_forever.sma ( 1,37 килобайт ) Кол-во скачиваний: 249 -- Огласите пожалуйста весь список, помимо маленького склада, наверняка есть и целый ангар?))) curweapon_forever.sma = это, к примеру НА ПАБЛИКЕ вышел я с сервера/кикнули/ за карту, а у меня было на этой карте 12 000 барабулек и АВП в руках и если я успею зайти перед сменой карты, то у меня останутся барабульки и АВП? Или данный плагин больше подходит для зомби и иных модах?
Отредактировал: intercs, - 15.12.2013, 2:38
|
Поблагодарили 1 раз
|
|
Safety1st |
15.12.2013, 2:44
Сообщение
|
Ангара нет, по факту выкладываю.
Обычным белым людям тут ловить можно только идеи, но не плагины ;) Если бы только знал, какую глупость сморозил про CurWeapon) А Forever - это как 'c-s.net.ua forever!', т.е. восхваление. Просто заюзан самый простой метод, все опытные скриптеры обычно рекомендуют методы солиднее, а я придерживаюсь несколько иной практики) И файлы как-то называть нужно, чтобы их имя мне о чём-то говорило ;) Так-то суть описана синим шрифтом. |
|
|
|
intercs |
15.12.2013, 3:16
Сообщение
|
|
Ангара нет, по факту выкладываю. Обычным белым людям тут ловить можно только идеи, но не плагины ;) Если бы только знал, какую глупость сморозил про CurWeapon) А Forever - это как 'c-s.net.ua forever!', т.е. восхваление. Просто заюзан самый простой метод, все опытные скриптеры обычно рекомендуют методы солиднее, а я придерживаюсь несколько иной практики) И файлы как-то называть нужно, чтобы их имя мне о чём-то говорило ;) Так-то суть описана синим шрифтом. Аахах, как раз синий цвет и не попался в визуальное восприятие-))) Анти реклама_))) Сейчас в моде, чем мельче написано = тем больше поятоянного народа заинтересует и привлечет. Понял, буду знать, мож заюзаю, а лучше пойду спать-) Пару плагинов из большого склада стырил, спасибо!) |
Поблагодарили 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,
Похвально и очень полезно, надеюсь скриптеры поддержат. |
|
|
csnet |
15.2.2014, 11:33
Сообщение
|
так и подумал что через оффсет, а c4 вроде дает DMG_BLAST ? если да тогда можно по другому отловить
по поводу Назначение кастомных моделей оружия и скорости несогласен, сам юзал попервой, я бы посоветовал да я прочел что самым простым способом, но лучше сразу было другим xD Код: RegisterHam(Ham_Item_Deploy, "weapon_ak47", "fw_Deploy_Post", 1);
Отредактировал: csnet, - 15.2.2014, 11:41
go v cs:go
|
|
Поблагодарили 1 раз
|
|
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
|
|
|
|
csnet |
15.2.2014, 11:48
Сообщение
|
тебе не кажется что подобная тема еще больше расслабит пользователей и вообще разучит их пользоватся google+translate. На данный момент 95% кода под любые требования уже можно нагуглить.
go v cs:go
|
|
|
|
Safety1st |
15.2.2014, 12:03
Сообщение
|
Эм... Неожиданный вопрос.
Несколько блоков кода на все случаи жизни не подойдут, консультациями я в топике не занимаюсь, гуглить всё равно придётся. В Рунете почти всё - быдлокод, а если норм - то обязательно без объяснений и/или необходимых комментариев. Контент уникальный, точно такой же не найти. Т.е. публикация по сути не отличается от релизов плагинов или наполнения персонального сайта. |
|
|
|
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 |
22.4.2014, 16:51
Сообщение
|
В шапку добавлен быстрый фикс от Lev stock'ового colorchat'а от ConnorMcLeod. Ввиду крайней полезности отписываюсь отдельно.
Он позволит перейти на AMXX 1.8.3 без правки исходников перекомпилируемых плагинов. Использоваться будет цветной чат из инклуда, не тот, что в AMXX. Впрочем, это некритично. |
|
Поблагодарили 2 раз
|
|
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 килобайт ) Кол-во скачиваний: 90 По-хорошему стату нужно хранить по SteamID (пример от Subb98) и предусмотреть очистку устаревших записей. А вообще nVault не для тысяч записей, не для статы, для таких масштабов следует использовать MySQL/SQLite. А насчёт конкретно применения только для хранения HS - тоже глупо: эту информацию можно брать напрямую из статы csstats, которую ведёт модуль CSX. Вот как выглядят данные nVault'а под 'микроскопом':
Отредактировал: Developer, - 21.5.2014, 16:47
|
|
Поблагодарили 2 раз
|
|