@☠ ÄйӃи ☠, inc ужасен:
1. Что в нем делает это ?
native bool SBPP_BanPlayer(int client, int target, int time, char[] reason);
native bool MABanPlayer(int client, int target, int type, int time, char[] reason);
native bool SourceComms_SetClientMute(int client, bool muteState, int muteLength = -1, bool saveToDB = false, const char[] reason = "Muted through Server Bank");
native bool MASetClientMuteType(int iClient, int iTarget, char[] sReason, int iType, int iTime = 0);
2. Советую все нативы привести в один вид и с одинаковым префиксом, потому что такие общие имена могут конфликтовать:
native bool IsClientBlackList(int client);
native void DeleteClientBlackList(int client);
->
native Database Bank_GetDataBase();
forward void Bank_OnLoaded();
native bool Bank_IsClientInBlackList(int client);
native void Bank_DeleteClientFromBlackList(int client);
3. Не очень понимаю почему в нем фигурирует понятие "Credits" вроде ни слова про шоп, а в банках обычно с деньгами работают
4. Не хватает натива загружено ли уже ядро банка
По самому кору:
1. `nik` шта? Мб лучше nick/name/nickname/player
2. `steamid` VARCHAR(64) NOT NULL - 64 много. 32 с головой
3. `unixtime` INT NOT NULL - название столбца вообще не отображает его назначения
4. `bank_name` VARCHAR(64) NOT NULL, `bank_credit` INT NOT NULL - зачем тут префикс bank_ если по имени таблицы и так ясно
5. GetBank_MYSQL почему тут появился суффикс _MYSQL ? для других баз я не увидел тут спец. логики в этом запросе
6.
public int N_Bank_GetCredits(Handle plugin, int numParams)
{
GetCredit();
return g_iBankCredits;
}
Это как так? Получается отправляем асинхронный запрос, возвращаем текущее значение, получается ответ на запрос - обновляем значение. Получается мы возвращаем не актуальное значение.
Нативы, которые используют асинхронные запросы - тоже должны быть асинхронными
7.
else if(GetTime() >= iTime)
{
ResetUser(client);
DeleteBL_DB(client);
}
Зачем тут делать ResetUser если он должен делаться еще при входе игрока до отправки запроса