Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
a3e9c65
add internal storage
R1KO May 30, 2021
aca3b94
refactoring macro
R1KO Jun 28, 2021
d1958a3
Merge branch '3.1-dev' of github.com:R1KO/VIP-Core into add_internal_…
R1KO Jul 2, 2021
56be2a2
fix CI
R1KO Jul 2, 2021
245711e
fix CI
R1KO Jul 2, 2021
b873f70
fix timer
R1KO Sep 17, 2021
1ea1107
fix forwards order logic
R1KO Oct 5, 2021
e1089c4
move add vip player to other file
R1KO Oct 5, 2021
380e690
move remove vip player to other file
R1KO Oct 5, 2021
e37defb
fix admin messages
R1KO Oct 5, 2021
3185340
remake call forwards & fix load features
R1KO Oct 30, 2021
22e0ee1
extends groups API
R1KO Nov 25, 2021
194a2d0
fix declare natives
R1KO Dec 7, 2021
51013ba
add forward "VIP_OnConfigsLoaded"
R1KO Dec 7, 2021
aa5a912
Update VIP_Core.sp
R1KO Dec 7, 2021
e17d231
fix debug
R1KO Dec 28, 2021
f67fc55
Merge branch 'add_internal_storage' of github.com:R1KO/VIP-Core into …
R1KO Dec 28, 2021
c3cf2b6
Forgotten ";"
domikuss Feb 13, 2022
a35f244
Merge pull request #99 from domikuss/patch-1
R1KO Feb 13, 2022
90b6180
fix display empty vip menu
R1KO Mar 20, 2022
0e40e3b
Merge branch 'add_internal_storage' of github.com:R1KO/VIP-Core into …
R1KO Mar 20, 2022
9f44518
refactor macros
R1KO Mar 20, 2022
56dfbb1
fix return statements
R1KO Mar 20, 2022
a9aa132
add build
R1KO Mar 20, 2022
12d4045
build
R1KO Mar 20, 2022
a0fe84c
fix build
R1KO Mar 20, 2022
abe4e34
fix build
R1KO Mar 20, 2022
d086be4
fix build
R1KO Mar 20, 2022
5fd895f
fix upload artifacts
R1KO Mar 20, 2022
17a3a8c
fix create artifacts
R1KO Mar 20, 2022
2a8d16a
fix ci
R1KO Mar 20, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 50 additions & 0 deletions .github/workflow/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Build

on: [push, pull_request, workflow_dispatch]

jobs:
compile:
runs-on: ubuntu-latest
continue-on-error: ${{ matrix.sm-version == '1.11.x' }}
strategy:
matrix:
sm-version: [ '1.9.x', '1.10.x', '1.11.x' ]
# compiler-options: [ '', '__MADEBUG=1' ]

env:
DEBUG: ${{ contains(matrix.compiler-options, '__XDEBUG=1') }}

name: "Build SM ${{ matrix.sm-version }} ${{ matrix.compiler-options != '' && format('({0})', matrix.compiler-options) || '' }}"
steps:
- uses: actions/checkout@v2

- name: Setup SP
uses: rumblefrog/setup-sp@master
with:
version: ${{ matrix.sm-version }}

- name: Run compiler
run: |
cd addons/sourcemod
mkdir plugins
cd scripting
spcomp VIP_Core.sp -E -o ../plugins/VIP_Core.smx -iinclude ${{ matrix.compiler-options }}

# - name: Make artifact archive
# if: github.ref == 'refs/heads/master'
# run: |
# if [[ "$DEBUG" == "true" ]]; then export CUSTOM_POSTFIX="d"; fi
# SMVERSION_FULL=${{ matrix.sm-version }}

# export SMVERSION_SHORT=${SMVERSION_FULL:0:-2}
# export ARCHIVE_FILENAME=sbma-newplugin.${GITHUB_SHA::7}.${SMVERSION_SHORT}${CUSTOM_POSTFIX}.tar.gz

# echo "ARCHIVE_FILENAME=$ARCHIVE_FILENAME" >> $GITHUB_ENV
# echo "SMVERSION_SHORT=$SMVERSION_SHORT" >> $GITHUB_ENV

# tar -cvf $ARCHIVE_FILENAME addons
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: VIP-Core
path: ../VIP-Core
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
.vscode/
*.smx
*.code-workspace
2 changes: 1 addition & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,4 @@ deploy:

#Notifications
notifications:
email: false
email: true
47 changes: 38 additions & 9 deletions addons/sourcemod/scripting/VIP_Core.sp
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,35 @@

#include <sourcemod>
#include <vip_core>
#include <clientprefs>

#if !defined VIP_CORE_VERSION
#if defined COMMIT_HASH
#define VIP_CORE_VERSION "3.1.0 DEV (#" ... COMMIT_HASH ... ")"
#else
#define VIP_CORE_VERSION "3.1.0 DEV"
#endif
#endif

#define DEBUG_MODE 0 // Режим отладки
#define DEBUG_MODE 0 // Режим отладки

#define USE_ADMINMENU 1 // Включение админ-меню для управления VIP
#define USE_ADMINMENU 1 // Включение админ-меню для управления VIP

#define USE_MORE_SERVERS 1 // Включить/Отключить режим при котором если ID сервера у игрока 0 - то VIP будет работать на всех серверах


#define USE_CLIENTPREFS 0 // Использовать ли стандартные куки для хранения данных игроков

#define CHARSET "utf8mb4"
#define COLLATION "utf8mb4_unicode_ci"

//#define CHARSET "utf8"
//#define COLLATION "utf8_unicode_ci"


#if USE_CLIENTPREFS 1
#include <clientprefs>
#endif

#if USE_ADMINMENU 1
#undef REQUIRE_PLUGIN
#include <adminmenu>
Expand All @@ -41,6 +52,7 @@ public Plugin myinfo =
#include "vip/Downloads.sp"
#include "vip/Colors.sp"
#include "vip/UTIL.sp"
#include "vip/Storage.sp"
#include "vip/Features.sp"
#include "vip/Sounds.sp"
#include "vip/Info.sp"
Expand Down Expand Up @@ -88,6 +100,7 @@ public void OnPluginStart()
g_bIsTranslationPhraseExistsAvailable = (CanTestFeatures() &&
GetFeatureStatus(FeatureType_Native, "TranslationPhraseExists") == FeatureStatus_Available);

API_SetupForwards();
ReadConfigs();

VIPMenu_Setup();
Expand All @@ -96,7 +109,6 @@ public void OnPluginStart()
#endif

Cvars_Setup();
API_SetupForwards();

HookEvent("player_spawn", Event_PlayerSpawn);
HookEvent("player_death", Event_PlayerDeath);
Expand All @@ -110,10 +122,10 @@ public void OnPluginStart()
#if USE_ADMINMENU 1
RegConsoleCmd("sm_vipadmin", VIPAdmin_CMD);

if(LibraryExists("adminmenu"))
if (LibraryExists("adminmenu"))
{
TopMenu hTopMenu = GetAdminTopMenu();
if(hTopMenu != null)
if (hTopMenu != null)
{
OnAdminMenuReady(hTopMenu);
}
Expand All @@ -129,11 +141,11 @@ public void OnAllPluginsLoaded()
#if USE_ADMINMENU 1
public Action OnClientSayCommand(int iClient, const char[] szCommand, const char[] szArgs)
{
if(iClient > 0 && iClient <= MaxClients && szArgs[0])
if (iClient > 0 && iClient <= MaxClients && szArgs[0])
{
if(g_iClientInfo[iClient] & IS_WAIT_CHAT_SEARCH)
if (g_iClientInfo[iClient] & IS_WAIT_CHAT_SEARCH)
{
if(g_iClientInfo[iClient] & IS_WAIT_CHAT_SEARCH)
if (g_iClientInfo[iClient] & IS_WAIT_CHAT_SEARCH)
{
ShowWaitSearchMenu(iClient, szArgs);
}
Expand All @@ -145,3 +157,20 @@ public Action OnClientSayCommand(int iClient, const char[] szCommand, const char
return Plugin_Continue;
}
#endif

public void OnMapStart()
{
LoadSounds();
ReadDownloads();
}

public void OnConfigsExecuted()
{
DebugMessage("OnConfigsExecuted: %x", g_hDatabase)
CMD_Register();

if (g_hDatabase && (GLOBAL_INFO & IS_STARTED))
{
RemoveExpAndOutPlayers();
}
}
88 changes: 79 additions & 9 deletions addons/sourcemod/scripting/include/vip_core.inc
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,15 @@ forward void VIP_OnPlayerSpawn(int iClient, int iTeam, bool bIsVIP);
*/
forward Action VIP_OnShowClientInfo(int iClient, const char[] szEvent, const char[] szType, KeyValues hKeyValues);

/**
* Вызывается когда загружены данные из хранилища игрока
*
* @param iClient Индекс игрока.
*
* @noreturn
*/
forward void VIP_OnClientStorageLoaded(int iClient);

/**
* Вызывается когда у VIP-игрока изменяется статус функции.
*
Expand All @@ -138,6 +147,15 @@ forward Action VIP_OnFeatureToggle(int iClient, const char[] szFeature, VIP_Togg
*/
forward void VIP_OnVIPLoaded();

/**
* Вызывается когда VIP-плагин загрузил настройки.
*
* @noparams
*
* @noreturn
*/
forward void VIP_OnConfigsLoaded();

/**
* Вызывается когда VIP-функция была зарегистрирована.
*
Expand Down Expand Up @@ -271,7 +289,7 @@ native int VIP_GetClientAccessTime(int iClient);
native bool VIP_SetClientAccessTime(int iClient, int iTime, bool bInDB = true);

/**
* Получает VIP-группу игрока.
* Получает группу игрока.
*
* @param iClient Индекс игрока.
* @param szGroup Буфер, в который будет помещен результат.
Expand All @@ -283,10 +301,10 @@ native bool VIP_SetClientAccessTime(int iClient, int iTime, bool bInDB = true);
native bool VIP_GetClientVIPGroup(int iClient, char[] szGroup, int iMaxLength);

/**
* Устанавливает игроку VIP-группу.
* Устанавливает игроку группу.
*
* @param iClient Индекс игрока.
* @param szGroup VIP-группа.
* @param szGroup группа.
* @param bInDBB Изменять ли в базе данных.
*
* @return true - Успешно.
Expand All @@ -304,15 +322,39 @@ native bool VIP_SetClientVIPGroup(int iClient, const char[] szGroup, bool bInDB
native StringMap VIP_GetVIPClientTrie(int iClient);

/**
* Проверяет наличие VIP-группы.
* Проверяет наличие группы.
*
* @param szGroup Имя VIP-группы.
* @param szGroup Имя группы.
*
* @return true - VIP-группа существует.
* false - VIP-группа не существует.
* @return true - группа существует.
* false - группа не существует.
*/
native bool VIP_IsGroupExists(const char[] szGroup);

#pragma deprecated Use VIP_IsGroupExists() instead
native bool VIP_IsValidVIPGroup(const char[] szGroup);

/**
* Добавляет группу.
*
* @param szGroup Имя группы.
* @param hFeatures Параметры группы.
*
* @return true - успешно.
* false - ошибка.
*/
native bool VIP_AddGroup(const char[] szGroup, KeyValues hFeatures);

/**
* Удаляет группу.
*
* @param szGroup Имя группы.
*
* @return true - успешно.
* false - ошибка.
*/
native bool VIP_RemoveGroup(const char[] szGroup);

/**
* Выводит игроку сообщение в чат с приставкой (фраза в переводе "VIP_CHAT_PREFIX").
*
Expand Down Expand Up @@ -362,7 +404,7 @@ native void VIP_SendClientVIPMenu(int iClient, bool bSelection = false);
* @param iAdmin Индекс админа (0 - сервер, -1 - плагин).
* @param iClient Индекс игрока.
* @param iTime Время в секундах.
* @param szGroup Имя VIP-группы.
* @param szGroup Имя группы.
* @param bAddToDB Добавлять ли в базу данных.
*
* @noreturn
Expand Down Expand Up @@ -449,7 +491,7 @@ native void VIP_UnregisterMe();
* @param szFeature Уникальное имя ф-и.
*
* @return true - VIP-функция существует.
* false - VIP-функция не существует.
* false - VIP-функция не существует.
*/
native bool VIP_IsValidFeature(const char[] szFeature);

Expand Down Expand Up @@ -580,6 +622,29 @@ native bool VIP_GiveClientFeature(int iClient, const char[] szFeature, const cha
*/
native bool VIP_RemoveClientFeature(int iClient, const char[] szFeature);


/**
* Сохраняет значение в хранилище игрока
*
* @param iClient Индекс игрока.
* @param szKey Ключ
* @param szValue Значение
*
* @noreturn
*/
native void VIP_SetClientStorageValue(int iClient, const char[] szKey, const char[] szValue);

/**
* Получает значение из хранилища игрока
*
* @param szKey Ключ
* @param szValue Буфер, в который будет помещен результат.
* @param iMaxLength Размер буфера.
*
* @noreturn
*/
native void VIP_GetClientStorageValue(int iClient, const char[] szKey, char[] szValue, int iMaxLength);

/**
* Получает Handle базы данных. После работы необходимо закрыть с помощью CloseHandle() или delete
*
Expand Down Expand Up @@ -700,6 +765,9 @@ public void __pl_vip_core_SetNTVOptional()
MarkNativeAsOptional("VIP_GetVIPClientTrie");
MarkNativeAsOptional("VIP_SendClientVIPMenu");
MarkNativeAsOptional("VIP_IsValidVIPGroup");
MarkNativeAsOptional("VIP_IsGroupExists");
MarkNativeAsOptional("VIP_AddGroup");
MarkNativeAsOptional("VIP_RemoveGroup");
MarkNativeAsOptional("VIP_GetClientFeatureStatus");
MarkNativeAsOptional("VIP_SetClientFeatureStatus");
MarkNativeAsOptional("VIP_IsClientFeatureUse");
Expand All @@ -717,5 +785,7 @@ public void __pl_vip_core_SetNTVOptional()
MarkNativeAsOptional("VIP_GiveClientVIP");
MarkNativeAsOptional("VIP_GiveClientFeature");
MarkNativeAsOptional("VIP_RemoveClientFeature");
MarkNativeAsOptional("VIP_SetClientStorageValue");
MarkNativeAsOptional("VIP_GetClientStorageValue");
}
#endif
Loading