Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

5 страниц V   1 2 ... 3 4 »

Склад маленького кода

, мелочь пузатая
Safety1st
сообщение 15.12.2013, 2:01
Сообщение #1
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Если на Складе маленьких плагинов продукты для конечных потребителей, то тут - компоненты для продуктов ;)
В общем, код для скриптеров и особо продвинутых юзеров ;)

Буду выкладывать особо интересные по тем или иным причинам для меня вещи, которые могут быть интересны или полезны другим. Это либо вещи, которые я не встречал в паблике, либо нестандартно реализованный знакомый функционал, либо применение непривычных для начинающих методов.


Это склад, а не топик по обучению или поддержке. Просьба отнестись с пониманием, что ваши посты могут быть проигнорированы. Новички в скриптинге могут создать свою собственную тему в этом разделе, задать вопросы и кинуть ссылку на нужный пост в моей.
--

Облако ссылок ;)
распространение плагинов и авторские права
редактирование плагинов с кириллицей
• чат в плагинах: ошибка '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
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя intercs
сообщение 15.12.2013, 2:37
Сообщение #2


Стаж: 11 лет

Сообщений: 727
Благодарностей: 408
Полезность: 504

Скрытый текст
Цитата(Safety1st @ 15.12.2013, 4:01) *
Если на Складе маленьких плагинов продукты для конечных потребителей, то тут - компоненты для продуктов ;)
В общем, код для скриптеров и особо продвинутых юзеров ;)

Буду выкладывать особо интересные по тем или иным причинам для меня вещи, которые могут быть интересны или полезны другим. Это либо вещи, которые я не встречал в паблике, либо нестандартно реализованный знакомый функционал, либо применение непривычных для начинающих методов.


Это склад, а не топик по обучению или поддержке. Просьба отнестись с пониманием, что ваши посты могут быть проигнорированы.

--

Добавка к плагину дуэлей
Реализовал идею юзера __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
Сообщение #3
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Ангара нет, по факту выкладываю.

Обычным белым людям тут ловить можно только идеи, но не плагины ;)

Если бы только знал, какую глупость сморозил про CurWeapon)
А Forever - это как 'c-s.net.ua forever!', т.е. восхваление. Просто заюзан самый простой метод, все опытные скриптеры обычно рекомендуют методы солиднее, а я придерживаюсь несколько иной практики) И файлы как-то называть нужно, чтобы их имя мне о чём-то говорило ;)
Так-то суть описана синим шрифтом.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя intercs
сообщение 15.12.2013, 3:16
Сообщение #4


Стаж: 11 лет

Сообщений: 727
Благодарностей: 408
Полезность: 504

Цитата(Safety1st @ 15.12.2013, 4:44) *
Ангара нет, по факту выкладываю.

Обычным белым людям тут ловить можно только идеи, но не плагины ;)

Если бы только знал, какую глупость сморозил про CurWeapon)
А Forever - это как 'c-s.net.ua forever!', т.е. восхваление. Просто заюзан самый простой метод, все опытные скриптеры обычно рекомендуют методы солиднее, а я придерживаюсь несколько иной практики) И файлы как-то называть нужно, чтобы их имя мне о чём-то говорило ;)
Так-то суть описана синим шрифтом.


Аахах, как раз синий цвет и не попался в визуальное восприятие-)))
Анти реклама_)))

Сейчас в моде, чем мельче написано = тем больше поятоянного народа заинтересует и привлечет.
Понял, буду знать, мож заюзаю, а лучше пойду спать-)

Пару плагинов из большого склада стырил, спасибо!)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 12.1.2014, 11:06
Сообщение #5
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Добавлен код 'рандомная выдача fiveseven либо выдача патронов к пустому'.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Safety1st
сообщение 15.2.2014, 10:59
Сообщение #6
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Добавлен код 'получить оружие киллера в Ham_Killed'.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя Johnny
сообщение 15.2.2014, 11:26
Сообщение #7


Стаж: 11 лет

Сообщений: 2470
Благодарностей: 1086
Полезность: 515

Safety1st,
Похвально и очень полезно, надеюсь скриптеры поддержат. smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 15.2.2014, 11:33
Сообщение #8
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

так и подумал что через оффсет, а c4 вроде дает DMG_BLAST ? если да тогда можно по другому отловить
по поводу Назначение кастомных моделей оружия и скорости несогласен, сам юзал попервой, я бы посоветовал


да я прочел что самым простым способом, но лучше сразу было другим xD

Код:
 RegisterHam(Ham_Item_Deploy, "weapon_ak47",  "fw_Deploy_Post", 1);	

// set_user_maxspeed лучше всего делать в

new Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame
RegisterHam(Ham_Player_ResetMaxSpeed,"player","PlayerSpeed",1)



public fw_Deploy_Post(wpn)
{
static id
id = get_pdata_cbase(wpn, m_pPlayer1, 4)
// можешь добавить свою любимую pdata_safe

entity_set_string(id, EV_SZ_viewmodel, Vmolnia)
entity_set_string(id, EV_SZ_weaponmodel, Pmolnia)


}



public PlayerSpeed(id)
{
static Float:maxspeed
pev(id,pev_maxspeed,maxspeed)

if(maxspeed != 1.0)
{
set_pev(id,pev_maxspeed,maxspeed + 60.0) // 320 for quake
}
}




Отредактировал: csnet, - 15.2.2014, 11:41


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 15.2.2014, 11:42
Сообщение #9
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Цитата(csnet @ 15.2.2014, 13:33) *
так и подумал что через оффсет, а c4 вроде дает DMG_BLAST ? если да тогда можно по другому отловить

Да, C4 даёт DMG_BLAST. Только по битам DMG_BLAST, DMG_HEGRENADE и т.д. в m_bitsDamageType определять КРАЙНЕ НЕ рекомендую, тут подробнее описал. Но для C4 в Ham_Killed приемлемо.


Цитата(csnet @ 15.2.2014, 13:33) *
по поводу Назначение кастомных моделей оружия и скорости несогласен, сам юзал попервой, я бы посоветовал

'Не согласен' - звучит забавно :)
Речь о самом простом способе. И задачи у меня были несколько иные :)
Так-то да, твои 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
Сообщение #10
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

тебе не кажется что подобная тема еще больше расслабит пользователей и вообще разучит их пользоватся google+translate. На данный момент 95% кода под любые требования уже можно нагуглить.


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 15.2.2014, 12:03
Сообщение #11
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Эм... Неожиданный вопрос.
Несколько блоков кода на все случаи жизни не подойдут, консультациями я в топике не занимаюсь, гуглить всё равно придётся.
В Рунете почти всё - быдлокод, а если норм - то обязательно без объяснений и/или необходимых комментариев.
Контент уникальный, точно такой же не найти. Т.е. публикация по сути не отличается от релизов плагинов или наполнения персонального сайта.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 21.2.2014, 16:46
Сообщение #12
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Добавлены изыскания под названием 'разбиение строки: parse/strbreak vs pawn' ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sky Cat
сообщение 21.2.2014, 17:23
Сообщение #13
Стаж: 11 лет
Город: Белгород

Сообщений: 1167
Благодарностей: 718
Полезность: 698

Если топиком будешь заниматься, то будет висеть закрепленным.


Харьков, спишь?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 21.2.2014, 17:45
Сообщение #14
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Не стоит. Вряд ли складирование является ведением топика.

// pozdno skazal:D

Отредактировал: Sky Cat, - 21.2.2014, 17:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 9.3.2014, 5:53
Сообщение #15
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Добавлен код 'перезарядить пистолет в новом раунде'.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 9.3.2014, 17:51
Сообщение #16
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Добавлен код 'получить скин игрока'.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 11.3.2014, 12:54
Сообщение #17
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Добавлен код 'получить любое количество рандомных игроков'.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Safety1st
сообщение 22.4.2014, 16:51
Сообщение #18
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

В шапку добавлен быстрый фикс от Lev stock'ового colorchat'а от ConnorMcLeod. Ввиду крайней полезности отписываюсь отдельно.

Он позволит перейти на AMXX 1.8.3 без правки исходников перекомпилируемых плагинов. Использоваться будет цветной чат из инклуда, не тот, что в AMXX. Впрочем, это некритично.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Safety1st
сообщение 26.4.2014, 20:10
Сообщение #19
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Добавлен код 'Подсчёт общего числа игроков in-game'.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Safety1st
сообщение 20.5.2014, 7:05
Сообщение #20
Стаж: 12 лет
Город: Moscow

Сообщений: 7228
Благодарностей: 8071
Полезность: 196

Плагин-пример 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 раз
   + Цитировать сообщение
5 страниц V   1 2 ... 3 4 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: