- Поддерживаемые игры
-
- CS: Source (OrangeBox)
- CS: Source (v34)
- CS: GO
[ЯДРО] СИСТЕМА ЛИГ НА СЕРВЕР
Видеодемонстрация (YouTube)
Плагин позволяет проводить на сервере лиги (достигшие определенного прогресса за определенное время игроки награждаются привилегиями), что определенно увеличит число постоянных игроков.
У игроков имеется возможность получать очки за их активности в течении сезона, покупать на них различные плюшки, ограничивающиеся только Вашей фантазией, а также передавать их другим игрокам, если на сервере включена таковая возможность.
Модули для получения очков:
1. Получение наград за достигнутое на сервере звание
2. Получение наград за наигранное на сервере время
Модули:
1. Автоматическое завершение и начало лиги - старт/завершение лиги в соответствии с указанными датами. Сброс званий.
2. Выдача шприца - выдает шприц за серию убийств, а также при спавне игрока (будет переписан с обновлением ядра).
3. Автовыдача оружия - позволяет выбрать набор оружия и гранат, которые будут выданы в начале раунда.
4. Колесо чата - позволяет отправлять голосовые фразы, как в Dota2.
5. Chat Wheel Extented - аналог плагина "Колесо чата" с расширенными возможностями и удобствами
6. Бустер получения кредитов (новая версия с уровнями) - увеличивает кол-во получаемых кредитов в !shop.
7. Обмен: очки лиги -> кредиты - добавляет возможность обмена очков лиги на кредиты !shop.
8. Комментатор убийств - при стриках убийств воспроизводит звук и показывает красивое текстовое уведомление в центре экрана. Может выдавать кредиты (будет переписан с обновлением ядра).
9. Kill Bonus - восстанавливает определенное количество ХП при убийствах (будет переписан с обновлением ядра).
10. Покупка VIP - позволяет покупать VIP-статус за очки лиги.
11. Эффект при убийстве - приятное затемнение экрана при убийстве (переделанный под лиги модуль для VIP).
12. Эффект гранат - позволяет игроку установить себе эффект молнии определенного цвета при детонации гранат.
13. Покупка предметов !shop - позволяет покупать предметы из !shop за очки лиги.
14. Round Start & Kills Cash - добавляет в магазин дополнительные деньги в начале раунда и прибавку к полученным деньгам за убийства.
Настройка:
Наиболее логичные варианты использования:
Простейший пример создания модулей:
Обновлений плагина с 99% вероятностью более не будет, однако я продолжу поддерживать его работоспособное состояние с обновлениями СМ.
upd.
Кто-то вообще использует плагин?
Загрузки постоянно увеличиваются, а обратной связи ноль.
В мыслях сделать большую обнову плагина, чтоб он работал не на костылях, но если эти загрузки - реальные сервера, а не какой-то фантом.
Видеодемонстрация (YouTube)
Плагин позволяет проводить на сервере лиги (достигшие определенного прогресса за определенное время игроки награждаются привилегиями), что определенно увеличит число постоянных игроков.
У игроков имеется возможность получать очки за их активности в течении сезона, покупать на них различные плюшки, ограничивающиеся только Вашей фантазией, а также передавать их другим игрокам, если на сервере включена таковая возможность.
Модули для получения очков:
1. Получение наград за достигнутое на сервере звание
2. Получение наград за наигранное на сервере время
Модули:
1. Автоматическое завершение и начало лиги - старт/завершение лиги в соответствии с указанными датами. Сброс званий.
2. Выдача шприца - выдает шприц за серию убийств, а также при спавне игрока (будет переписан с обновлением ядра).
3. Автовыдача оружия - позволяет выбрать набор оружия и гранат, которые будут выданы в начале раунда.
4. Колесо чата - позволяет отправлять голосовые фразы, как в Dota2.
5. Chat Wheel Extented - аналог плагина "Колесо чата" с расширенными возможностями и удобствами
6. Бустер получения кредитов (новая версия с уровнями) - увеличивает кол-во получаемых кредитов в !shop.
7. Обмен: очки лиги -> кредиты - добавляет возможность обмена очков лиги на кредиты !shop.
8. Комментатор убийств - при стриках убийств воспроизводит звук и показывает красивое текстовое уведомление в центре экрана. Может выдавать кредиты (будет переписан с обновлением ядра).
9. Kill Bonus - восстанавливает определенное количество ХП при убийствах (будет переписан с обновлением ядра).
10. Покупка VIP - позволяет покупать VIP-статус за очки лиги.
11. Эффект при убийстве - приятное затемнение экрана при убийстве (переделанный под лиги модуль для VIP).
12. Эффект гранат - позволяет игроку установить себе эффект молнии определенного цвета при детонации гранат.
13. Покупка предметов !shop - позволяет покупать предметы из !shop за очки лиги.
14. Round Start & Kills Cash - добавляет в магазин дополнительные деньги в начале раунда и прибавку к полученным деньгам за убийства.
Настройка:
league.ini:
"league"[/CENTER]
{
"reward_mode" "1" //1 - получение наград доступно. 0 - получение наград недоступно
"open_menu_com" "league" //команда открытия меню
"gift_enable" "1" //разрешить игрокам передавать привилегии
"gift_feature_lim" "2" //сколько раз игрок может передать привилегию
"admin_menu_points" "-1000,-500,-100,100,500,1000" //пункты выдачи очков в админ меню (макс. 16)
"shop_items"
{
"color_chat" //Название в бд, а также в самом модуле (обязательно должно совпадать)
{
"item" "Право купить цветной чат" //Название позиции
"price" "250" //цена позиции
"hiden" "1" //скрыта ли привилегия
}
"credits_mult"
{
"item" "+20% к получаемому золоту"
"price" "400"
}
"healtshot4kills"
{
"feature_num" "2"
"description" "Счётчик убийств сбрасывается при смерти" //комментарий о привилегии в меню покупки (макс. 128 символов на кириллице)
"item" "Шприц за серии убийств"
"levels" //привилегия имеет уровни
{
"1"
{
"name" "Шприц за каждые 5 убийств"
"price" "150"
"count" "5"
}
"2"
{
"name" "Шприц за каждые 4 убийства"
"price" "300"
"count" "4"
}
"3"
{
"name" "Шприц за каждые 3 убийства"
"price" "500"
"count" "3"
}
}
}
"weapon_giver"
{
"item" "Автовыдача оружия"
"price" "800"
"module_menu" "1" //есть ли у модуля своё меню?!!
}
"nade_effect"
{
"item" "Эффекты гранат"
"price" "300"
}
"kill_screen"
{
"item" "Эффект при убийстве"
"price" "250"
}
"chat_wheel"
{
"item" "Доп. фразы колеса чата"
"price" "250"
}
"kill_streak"
{
"item" "Комментатор убийств"
"description" "Выдает кредиты и воспроизводит звук при убийствах"
"price" "500"
"module_menu" "1"
}
"healtshot_spawn"
{
"item" "Шприц при спавне"
"description" "Выдает указанное количество шприцов при возрождении" //комментарий о привилегии в меню покупки
"receive" "1" //0 - добавлять к имеющимся, 1 - давать до указанного в уровне количества (уникальный параметр, принадлежащий данному модулю)
"levels"
{
"1"
{
"name" "Один шприц"
"price" "150"
"count" "1"
}
"2"
{
"name" "Два шприца"
"price" "250"
"count" "2"
}
"3"
{
"name" "Три шприца"
"price" "460"
"count" "3"
}
}
}
}
"other_items"
{
"buy_credits"
{
"item" "Покупка SHOP кредитов"
}
"buy_vip"
{
"item" "Покупка VIP"
}
}
}
league_ranks.ini:
"ranks"
{
"reward"
{
"11" //номер ранга в серверной статистике
{
"rank_name" "Магистр-Хранитель I" //название в меню
"points" "500" //получаемые очки
}
"12"
{
"rank_name" "Магистр-Хранитель II"
"points" "300"
}
"13"
{
"rank_name" "Магистр-Хранитель - Элита"
"points" "300"
}
"14"
{
"rank_name" "Заслуженный Магистр-Хранитель"
"points" "300"
}
"15"
{
"rank_name" "Легендарный Беркут"
"points" "350"
}
"16"
{
"rank_name" "Легендарный Беркут - Магистр"
"points" "350"
}
"17"
{
"rank_name" "Великий Магистр Высшего Ранга"
"points" "350"
}
"18"
{
"rank_name" "Всемирная Элита"
"points" "350"
}
}
}
Наиболее логичные варианты использования:
Вариант 1.
Объявляем предстоящий сброс званий, даём игрокам возможность получить награды за достигнутые звания. По истечении определенного времени забираем возможность получать награды и сбрасываем звания, оставляя покупки игроков с предыдущей лиги на всю продолжительность следующей. По истечению лиги сбрасываем покупки. Повторяем по кругу (продолжительностью лиги ~месяц)
Вариант 2 (основной и наиболее актуальный).
Сбрасываем на сервере звания, оставляем игрокам возможность покупать привилегии на постоянку. По истечении определенного времени (в моем случае - месяц) вновь сбрасываем звания и покупки игроков.
Объявляем предстоящий сброс званий, даём игрокам возможность получить награды за достигнутые звания. По истечении определенного времени забираем возможность получать награды и сбрасываем звания, оставляя покупки игроков с предыдущей лиги на всю продолжительность следующей. По истечению лиги сбрасываем покупки. Повторяем по кругу (продолжительностью лиги ~месяц)
Вариант 2 (основной и наиболее актуальный).
Сбрасываем на сервере звания, оставляем игрокам возможность покупать привилегии на постоянку. По истечении определенного времени (в моем случае - месяц) вновь сбрасываем звания и покупки игроков.
danil253467 за подсказки и помощь
R1KO за уроки sp (делал в основном по ним)
AUTHTERN за иконки ресурсов:)
и всем остальным, кто отвечал на мои вопросы в теме "написание плагинов"
R1KO за уроки sp (делал в основном по ним)
AUTHTERN за иконки ресурсов:)
и всем остальным, кто отвечал на мои вопросы в теме "написание плагинов"
Простейший пример создания модулей:
Для большинства модулей понадобится лишь одна проверка при выполнении того или иного участка кода:
Наипростейший модуль, использующий только одну проверку - Kill Bonus из списка модулей.
Если же одной проверки недостаточно, модуль имеет своё меню или же нужно выполнить какую-либо функцию при выборе игроком данного пункта в инвентаре, необходимо заменить параметр "switch_mode" на "module_menu" и добавить проверку выбранного игроком пункта:
Используем проверку на доступ игрока из первого примера при такой необходимости.
Для менее простецких целей используем прочие форварды и нативы.
C-подобный:
if(League_GetClientFeatureStatus(iClient, "test_mod"))
{
//здесь выполнится код, если у игрока с индексом iClient имеется и включена привилегия с названием в БД "test_mod"
}
Если же одной проверки недостаточно, модуль имеет своё меню или же нужно выполнить какую-либо функцию при выборе игроком данного пункта в инвентаре, необходимо заменить параметр "switch_mode" на "module_menu" и добавить проверку выбранного игроком пункта:
C-подобный:
public void League_OnPlayerSelectMenuItem(int iClient, int iFeatureNum) //игрок выбрал определенный пункт в меню
{
if(League_IsSelectedFeature(iFeatureNum, "test_mod")) //если это наш модуль с названием "test_mod" в БД
{
//выполняем нужный код, открываем меню и делаем всё, что нужно
PrintToChat(iClient, "Всё ОК!");
PrintToChat(iClient, "Спасибо, что выбрал этот пункт!");
}
}
Для менее простецких целей используем прочие форварды и нативы.
C-подобный:
*[/CENTER]
Библиотека Системы Лиг (League CORE)
Автор: Miaka (Ice_Sochi)
https://hlmod.ru/members/ice_sochi.81938/
*/
#if defined _league_included
#endinput
#endif
#define _league_included
#define API_VERSION 133
/*
Получение указателя базы данных
*/
native Database League_GetDatabase();
/**
* Вызывается, когда ядро загрузилось
*/
forward void League_OnCoreLoaded();
/**
* Вызывается, когда данные игрока были загружены
*
* @param iClient Индекс игрока
*/
forward void League_OnClientLoaded(int iClient);
/**
* Вызывается, когда игрок выбрал предмет с параметром "module_menu" в инвентаре
*
* @param iClient Индекс игрока
* @param iFeatureNum Номер (ID) привилегии
*/
forward void League_OnPlayerSelectMenuItem(int iClient, int iFeatureNum);
/**
* Вызывается, когда игрок выбрал предмет с параметром "module_menu" в инвентаре, имеющий уровни
*
* @param iClient Индекс игрока
* @param iFeatureNum Номер (ID) привилегии
* @param iLevel Уровень выбранной привилегии
*/
forward void League_LevelledItemSelected(int iClient, int iFeatureNum, int iLevel);
/**
* Вызывается, когда игрок выбрал пункт в разделе "прочее"
*
* @param iClient Индекс игрока
* @param iFeatureNum Номер (ID) пункта в разделе "прочее"
*/
forward void League_OnPlayerSelectOtherItem(int iClient, int iFeatureNum);
/**
* Вызывается, когда игрок выбрал пункт в разделе "получение наград"
*
* @param iClient Индекс игрока
* @param iFeatureNum Номер (ID) пункта в разделе "получение наград"
*/
forward void League_OnPlayerSelectRewardMenuItem(int iClient, int iFeatureNum);
/**
* Вызывается, когда игрок выбрал пункт в меню получения наград за звание
*
* @param iClient Индекс игрока
* @param iRank Номер ранга согласно серверной статистике
* @param iPoints Количество очков лиги, которые получил игрок
* @param sRankName Полное название ранга, за который получена награда
*/
forward void League_RewardItemSelected(int iClient, int iRank, int iPoints, char[] sRankName);
/**
* Вызывается, когда игрок купил какую-либо привилегию
*
* @param iClient Индекс игрока
* @param iFeatureNum Номер (ID) привилегии
* @param iLevel Уровень привилегии (равняется 0, если привилегия не имеет уровней)
* @param iPrice Цена, за которую была куплена привилегия
* @param sFeatureName Полное название привилегии (если имеет уровни, включает в название категорию и подкатегорию)
* @param sFeatureNameDB Идентификатор привилегии в БД
*/
forward void League_OnClientBoughtItem(int iClient, int iFeatureNum, int iLevel, int iPrice, char[] sFeatureName, char[] sFeatureNameDB);
/**
* Возвращает номер (ID) пункта из раздела "прочее"
*
* @param sFeature Идентификатор пункта в БД
* @return iFeatureNum
*/
native int League_GetOtherItemNum(char[] sFeature);
/**
* Возвращает номер (ID) привилегии
*
* @param sFeature Идентификатор привилегии в БД
* @return iFeatureNum
*/
native int League_GetFeatureNum(char[] sFeature);
/**
* Получает необходимую информацию о привилегии
*
* @param sFeature Идентификатор привилегии в БД
* @param iLevel Уровень привилегии
* @param iInfo 0 - вернет ID привилегии, 1 - количество уровней привилегии, 2 - цену привилегии уровня iLevel (если привилегия не имеет уровней, значение iLevel можно указать любое)
*/
native int League_GetFeatureParams(char[] sFeature, int iInfo, int iLevel);
/**
* Вернет необходимый параметр привилегии указанного уровня
*
* @param sFeature Идентификатор привилегии в БД
* @param sParam Параметр, значение которого нужно вернуть
* @param iLevel Уровень привилегии (если привилегия не имеет уровней, значение iLevel можно указать любое)
*/
native int League_GetFeatureStatInt(char[] sFeature, char[] sParam, int iLevel);
/**
* Вернет необходимый параметр позиции из раздела "прочее"
*
* @param sFeature Идентификатор позиции в конфиге
* @param sParam Параметр, значение которого нужно вернуть
*/
native int League_GetOtherItemStatInt(char[] sFeature, char[] sParam);
/**
* Возвращает уровень включенной у игрока в инвентаре привилегии
*
* @param iClient Индекс игрока
* @param sFeature Идентификатор привилегии в БД
* @return iLevel
*/
native int League_GetClientFeatureLevel(int iClient, char[] sFeature);
/**
* Имеется ли у игрока доступ к привилегии
*
* @param iClient Индекс игрока
* @param sFeature Идентификатор привилегии в БД
* @return true (если у игрока куплена и включена привилегия)
*/
native bool League_GetClientFeatureStatus(int iClient, char[] sFeature);
/**
* Устанавливает игроку режим доступа к скрытой привилегии
*
* @param iClient Индекс игрока
* @param sFeature Идентификатор привилегии в БД
* @param iMode 0 - скрыть полностью, 1 - разрешить использование в инвентаре, 2 - разрешить покупку и использование
*/
native void League_SetClientHidenFeature(int iClient, char[] sFeature, int iMode);
/**
* Проверяет, является ли выбранный игроком пункт в инвентаре привилегией с указанным ID
*
* @param iFeatureNum ID выбранной игроком привилегии
* @param sModule Идентификатор проверяемой привилегии в БД
* @return true (если iFeatureNum принадлежит sModule)
*/
native bool League_IsSelectedFeature(int iFeatureNum, char[] sModule);
/**
* Проверяет, является ли выбранный игроком пункт в "прочее" пунктом с указанным ID
*
* @param iFeatureNum ID выбранного игроком пункта
* @param sModule Идентификатор проверяемого пункта в БД
* @return true (если iFeatureNum принадлежит sModule)
*/
native bool League_IsSelectedOtherItem(int iFeatureNum, char[] sModule);
/**
* Проверяет, является ли выбранный игроком пункт в "получение наград" пунктом с указанным ID
*
* @param iFeatureNum ID выбранного игроком пункта
* @param sModule Идентификатор проверяемого пункта в БД
* @return true (если iFeatureNum принадлежит sModule)
*/
native bool League_IsSelectedRewardItem(int iFeatureNum, char[] sModule);
/**
* Открывает главное меню игроку
*
* @param iClient Индекс игрока
*/
native void League_OpenMainMenuToClient(int iClient);
/**
* Открывает инвентарь игроку
*
* @param iClient Индекс игрока
*/
native void League_OpenInventoryToClient(int iClient);
/**
* Открывает игроку уровневую привилегию в инвентаре
*
* @param iClient Индекс игрока
* @param sFeature Идентификатор привилегии в БД
*/
native void League_OpenInventoryLevelled(int iClient, char[] sFeature);
/**
* Устанавливает игроку статус привилегии, не внося изменений в БД
*
* @param iClient Индекс игрока
* @param iFeatureNum Номер (ID) привилегии
* @param iStatus Статус (1 - имеется, 0 - не имеется)
*/
native void League_SetClientFeatureStatus(int iClient, int iFeatureNum, int iStatus);
/**
* Устанавливает игроку очки лиги
*
* @param iClient Индекс игрока
* @param iPoints Количество очков
*/
native void League_SetClientPts(int iClient, int iPoints);
/**
* Выдает игроку очки лиги
*
* @param iClient Индекс игрока
* @param iPoints Количество очков
*/
native void League_GiveClientPts(int iClient, int iPoints);
/**
* Забирает у игрока очки лиги
*
* @param iClient Индекс игрока
* @param iPoints Количество очков
*/
native void League_TakeClientPts(int iClient, int iPoints);
/**
* Получает количество очков лиги игрока
*
* @param iClient Индекс игрока
* @return iPoints
*/
native int League_GetClientPts(int iClient);
/**
* Выдает игроку привилегию
*
* @param iClient Индекс игрока
* @param sFeature Идентификатор привилегии в БД
*/
native void League_GiveClientFeature(int iClient, char[] sFeature);
/**
* Забирает у игрока привилегию
*
* @param iClient Индекс игрока
* @param sFeature Идентификатор привилегии в БД
*/
native void League_TakeClientFeature(int iClient, char[] sFeature);
/**
* Очищает статистику лиги и полученные награды за звания
*
* @param iMode 0 - очищать только онлайн игроков, 1 (рекомендуется) - очищать вместе с БД
*/
native void League_ResetStats(int iMode);
/**
* Очищает инвентарь
*
* @param iMode 0 - очищать только онлайн игроков, 1 (рекомендуется) - очищать вместе с БД
*/
native void League_ResetItems(int iMode);
/**
* Очищает все данные
*
* @param iMode 0 - очищать только онлайн игроков, 1 (рекомендуется) - очищать вместе с БД
*/
native void League_ResetAll(int iMode);
/**
* Вызывается, когда ДБ была очищена
*
* @param iMode 1 - очищалась статистика и полученные награды, 2 - инвентарь, 3 - всё
*/
forward void League_OnDBCleared(int iMode);
/**
* Выдает игроку награду за текущее звание
*
* @param iClient Индекс игрока
* @param iRank Номер звания в серверной статистике
*/
native void League_GiveClientRankReward(int iClient, int iRank);
/**
* Делает награду за звание неполученной
*
* @param iClient Индекс игрока
* @param iRank Номер звания в серверной статистике
*/
native void League_TakeClientRankReward(int iClient, int iRank);
/**
* Отправит игроку в чат указанное сообщение
* Поддерживаются цвета из include csgo_colors (если игра CSGO) и colors (в случае любой другой игры)
*
* @param iClient Индекс игрока
* @param sText Текст
*/
[CENTER]native int League_PrintToChat(int iClient, char[] sText);
upd.
Кто-то вообще использует плагин?
Загрузки постоянно увеличиваются, а обратной связи ноль.
В мыслях сделать большую обнову плагина, чтоб он работал не на костылях, но если эти загрузки - реальные сервера, а не какой-то фантом.
- Требования
-
SourceMod 1.10 и выше
- Команды
-
league_reset_stats - очищает только статистику (таблица league, rank_rewards)
league_reset_items - очищает только предметы (таблица items)
league_reset_all - очищает всю бд
- Установка
-
В databases добавить:
C-подобный:"league_core" { "driver" "sqlite" //или mysql "database" "league_core" }