Русское сообщество по скриптингу

Проблема с db на моде jbe_

Все вопросы по работе и настройке AMXX и его плагинов.

Модератор: liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только вопросов по AMX Mod X и его плагинам.

Проблема с db на моде jbe_

Сообщение qkvanderr » 26 апр 2021, 14:43

Проблема с db на моде jbe_
Не знаю в чем ошибка...
Автор мода - Hellmith

Код: Выделить всё


Добавлено спустя 1 минуту 27 секунд:
Код: Выделить всё

#include amxmodx
#include fakemeta
#include fun
#include engine
#include hamsandwich
#include xs
#include sqlx
#include dhudmessage
#include chr_engine
//#pragma defclasslib sqlx sqlite //sqlx

#define CVAR_IP "146.255.193.26"

new const VERSION[] = "0.3";

new bool:g_iDublJump[33];

/*===== -> Макросы -> =====*///{

#define OLD_WEAPONS_GUARD      // Старое меню оружия
//#define PING_CONGROL         // Контроль пинга

/* -> Нативы -> */
native jbe_is_user_block(pPlayer);
native jbe_emotion(id);
native give_weapon_infi(id);   
native give_weapon_thompson(id);
native give_weapon_m24(id);
native give_ak47beast(id);
native Open_Oaio(id);
//native jbe_open_guard_weapon_menu(pPlayer);   Помойная оружейка со скинами


/* -> Остальное -> */
#define DbSetBit(%0,%1) (%0 |= (1<<(%1 - 1)))
#define DbClearBit(%0,%1) (%0 &= ~(1<<(%1 - 1)))
#define DbCheckBit(%0,%1) (%0 & (1<<(%1 - 1)))
#define DbIsNotSetBit(%0,%1) (~(%0) & (1<<(%1 - 1)))

#define jbe_is_user_valid(%0) (%0 && %0 <= g_iMaxPlayers)
#define MAX_PLAYERS 32
#define IUSER1_DOOR_KEY 376027
#define IUSER1_BUYZONE_KEY 140658
#define IUSER1_FROSTNADE_KEY 235876
#define PLAYERS_PER_PAGE 8

#define TIME_POSITION_CHECK 5.0
#define TIME_POSITION_TASK 3.0
#define INDEX_POSITION_TASK 129910

#define QUEST_TIME 90.0         // Время через которое появится новый вопрос
#define QUEST_TIME_ANSWER 60   // Время ответа на вопрос
#define HOOK_TIME_NUM_MAX 2    // Скольким игрокам одновременно можно выдать паутинку

#define CAMERA_OWNER EV_INT_iuser1
#define CAMERA_CLASSNAME "trigger_camera"
#define CAMERA_MODEL "models/rpgrocket.mdl"

/* -> Бит суммы -> */
#define SetBit(%0,%1) ((%0) |= (1 << (%1)))
#define ClearBit(%0,%1) ((%0) &= ~(1 << (%1)))
#define IsSetBit(%0,%1) ((%0) & (1 << (%1)))
#define InvertBit(%0,%1) ((%0) ^= (1 << (%1)))
#define IsNotSetBit(%0,%1) (~(%0) & (1 << (%1)))

/* -> Оффсеты -> */
#define linux_diff_weapon 4
#define linux_diff_animating 4
#define linux_diff_player 5
#define ACT_RANGE_ATTACK1 28
#define m_flFrameRate 36
#define m_flGroundSpeed 37
#define m_flLastEventCheck 38
#define m_fSequenceFinished 39
#define m_fSequenceLoops 40
#define m_pPlayer 41
#define m_flNextSecondaryAttack 47
#define m_iClip 51
#define m_Activity 73
#define m_IdealActivity 74
#define m_LastHitGroup 75
#define m_flNextAttack 83
#define m_bloodColor 89
#define m_iPlayerTeam 114
#define m_fHasPrimary 116
#define m_bHasChangeTeamThisRound 125
#define m_flLastAttackTime 220
#define m_afButtonPressed 246
#define m_iHideHUD 361
#define m_iClientHideHUD 362
#define m_iSpawnCount 365
#define m_pActiveItem 373
#define m_flNextDecalTime 486
#define g_szModelIndexPlayer 491

/* -> Задачи -> */
#define TASK_ROUND_END 486787
#define TASK_CHANGE_MODEL 367678
#define TASK_SHOW_INFORMER_MAIN 769784
#define TASK_SHOW_INFORMER_SECOND 769784
#define TASK_FREE_DAY_ENDED 675754
#define TASK_CHIEF_CHOICE_TIME 867475
#define TASK_COUNT_DOWN_TIMER 645876
#define TASK_VOTE_DAY_MODE_TIMER 856365
#define TASK_RESTART_GAME_TIMER 126554
#define TASK_DAY_MODE_TIMER 783456
#define TASK_SHOW_SOCCER_SCORE 756356
#define TASK_REMOVE_SYRINGE 567989
#define TASK_FROSTNADE_DEFROST 645864
#define TASK_DUEL_COUNT_DOWN 567658
#define TASK_DUEL_BEAMCYLINDER 857576
#define TASK_DUEL_TIMER_ATTACK 735756
#define TASK_HOOK_THINK 865367
#define TASK_COUNT_DOWN_QUEST 196681
#define TASK_ROUND_END_FADE 486787
#define TASK_FREE_DAY_OPEN_DOORS 126554
#if defined PING_CONTROL
#define TASK_PING_CHECK 242984
#endif
#define TASK_LAST_PRISONER_TIMER 798745
#define TASK_LATCH_KEY 181230216
#define TASK_PLAYER_GAMETIME 154376
#define TASK_GLOBAL_GAME_START 675754
#define TASK_GLOBAL_GAME_END 675754
#define TASK_BOSS_AURA 337653
#define TASK_PLAYER_CONNECT 1616151
#define TASK_SOUND 961961

/* -> Индексы сообщений -> */
#define MsgId_CurWeapon 66
#define MsgId_SayText 76
#define MsgId_TextMsg 77
#define MsgId_ResetHUD 79
#define MsgId_ShowMenu 96
#define MsgId_ScreenShake 97
#define MsgId_ScreenFade 98
#define MsgId_SendAudio 100
#define MsgId_Money 102
#define MsgId_StatusText 106
#define MsgId_VGUIMenu 114
#define MsgId_ClCorpse 122
#define MsgId_HudTextArgs 145

/* -> Индексы предметов магазина для кваров -> */
#define SHARPENING 0
#define SCREWDRIVER 1
#define BALISONG 2
#define STILETO 3
#define USP 4
#define DEAGLE 5
#define LATCHKEY 6
#define FLASHBANG 7
#define KOKAIN 8
#define STIMULATOR 9
#define FROSTNADE 10
#define ARMOR 11
#define CLOTHING_GUARD 12
#define HEGRENADE 13
#define FAST_RUN 14
#define DOUBLE_JUMP 15
#define RANDOM_GLOW 16
#define AUTO_BHOP 17
#define DOUBLE_DAMAGE 18
#define LOW_GRAVITY 19
#define CLOSE_CASE 20
#define FREE_DAY_SHOP 21
#define RESOLUTION_VOICE 22
#define PRANK_PRISONER 23
#define PARACHUTE_PN 24
#define STIMULATOR_GR 25
#define RANDOM_GLOW_GR 26
#define KOKAIN_GR 27
#define DOUBLE_JUMP_GR 28
#define FAST_RUN_GR 29
#define LOW_GRAVITY_GR 30
#define PARACHUTE_GR 31
#define KATANA 32

/* -> Индексы общих настроек для кваров -> */
#define FREE_DAY_ID 0
#define FREE_DAY_ALL 1
#define TEAM_BALANCE 2
#define DAY_MODE_VOTE_TIME 3
#define RESTART_GAME_TIME 4
#define RIOT_START_MONEY 5
#define KILLED_GUARD_MONEY 6
#define KILLED_CHIEF_MONEY 7
#define ROUND_FREE_MONEY 8
#define ROUND_ALIVE_MONEY 9
#define LAST_PRISONER_MONEY 10
#define LAST_PRISONER_EXP 11
#define NIGHT_DISCOUNT_SHOP 12
#define MAX_PING 13
#define LAST_PR_TIMER 14
#define BONUS_HEALTH_ROUND 15
#define BONUS_HEALTH_NUM 16
#define BONUS_MONEY_ROUND 17
#define BONUS_MONEY_NUM 18
#define BONUS_GRAVSPEED_ROUND 19
#define BONUS_GRENADE_ROUND 20
#define BONUS_GLOCK_ROUND 21
#define BONUS_BAYONET_ROUND 22

/* -> Индексы доната для кваров -> */
#define RESPAWN_PLAYERS_NUM 0
#define VIP_DISCOUNT_SHOP 1
#define VIP_RESPAWN_NUM 2
#define VIP_MONEY_ROUND 3
#define VIP_MONEY_NUM 4
#define VIP_HEALTH_ROUND 5
#define VIP_HEALTH_NUM 6
#define VIP_SPEED_ROUND 7
#define VIP_FREE_ROUND 8
#define VIP_VOICE_ROUND 9
#define SUPER_VIP_DISCOUNT_SHOP 10
#define SUPER_VIP_RESPAWN_NUM 11
#define SUPER_VIP_MONEY_ROUND 12
#define SUPER_VIP_MONEY_NUM 13
#define SUPER_VIP_HEALTH_ROUND 14
#define SUPER_VIP_HEALTH_NUM 15
#define SUPER_VIP_GRAVITY_ROUND 16
#define SUPER_VIP_GLOW_ROUND 17
#define SUPER_VIP_SHARPENING_ROUND 18
#define SUPER_VIP_AUTOBHOP_ROUND 19
#define PREMIUM_RESPAWN_NUM 20
#define PREMIUM_HOLO_ROUND 21
#define PREMIUM_DAMAGE_ROUND 22
#define PREMIUM_GM_ROUND 23
#define PREMIUM_MASK_ROUND 24
#define PREMIUM_MEGA_JUMP_ROUND 25
#define PREMIUM_WANTED_ROUND 26
#define BOSS_AURA_ROUND 27
#define BOSS_BAYONET_ROUND 28
#define SUPER_ADMIN_GRENADE_ROUND 29
#define SUPER_ADMIN_INVIS_ROUND 30
#define SUPER_ADMIN_MONEY_ROUND 31
#define SUPER_ADMIN_MONEY_NUM 32
#define SUPER_ADMIN_DJ 33
#define D_SPAWN 34
#define D_GREN 35
#define D_HEALTH 36
#define D_GRAV 37
#define D_SPEED 38
#define PREMIUM_STILETO_ROUND 39
#define OWNER_MONEY_ROUND 40
#define OWNER_MONEY_NUM 41

/*===== <- Макросы <- =====*///}

/*===== -> Битсуммы, переменные и массивы для работы с модом -> =====*///{

/* -> Переменные -> */
new g_bRoundEnd = false, g_iFakeMetaKeyValue, g_iFakeMetaSpawn, g_iFakeMetaUpdateClientData, g_iSyncMainInformer, g_iSyncSecondInformer,
g_iSyncSoccerScore, g_iSyncStatusText, g_iSyncDuelInformer, g_iSyncConnected, g_iMaxPlayers, g_iFriendlyFire,
bool:g_bRestartGame = true, Ham:Ham_Player_ResetMaxSpeed = Ham_Item_PreFrame;

new bool: g_TransliteStatus[33];

new g_iCountDown, g_iCountDownTime, g_szCountDown[] = {3, 5, 10, 20, 30, 50, 100};

/* -> Указатели для моделей -> */
new g_pModelGlass;

/* -> Указатели для спрайтов -> */
new g_pSpriteWave, g_pSpriteBeam, g_pSpriteBall, g_pSpriteDuelRed, g_pSpriteDuelBlue, g_pSpriteMegaJump;

/* -> Массивы -> */
new g_iPlayersNum[4], g_iAlivePlayersNum[4], Trie:g_tRemoveEntities;

/* -> Массивы для кваров -> */
new g_iShopCvars[33], g_iAllCvars[23], g_iDonateCvars[42];

/* -> Переменные и массивы для дней и дней недели -> */
new g_iDay, g_iDayWeek;
new const g_szDaysWeek[][] =
{
   "JBE_HUD_DAY_WEEK_0",
   "JBE_HUD_DAY_WEEK_1",
   "JBE_HUD_DAY_WEEK_2",
   "JBE_HUD_DAY_WEEK_3",
   "JBE_HUD_DAY_WEEK_4",
   "JBE_HUD_DAY_WEEK_5",
   "JBE_HUD_DAY_WEEK_6",
   "JBE_HUD_DAY_WEEK_7"
};

/* -> Битсуммы, переменные и массивы для режимов игры -> */
enum _:DATA_DAY_MODE
{
   LANG_MODE[32],
   MODE_BLOCKED,
   VOTES_NUM,
   MODE_TIMER,
   MODE_BLOCK_DAYS
}
new Array:g_aDataDayMode, g_iDayModeListSize, g_iDayModeVoteTime, g_iHookDayModeStart, g_iHookDayModeEnded, g_iReturnDayMode,
g_iDayMode, g_szDayMode[32] = "JBE_HUD_GAME_MODE_0", g_iDayModeTimer, g_szDayModeTimer[8] = "", g_iVoteDayMode = -1,
g_iBitUserVoteDayMode, g_iBitUserDayModeVoted, g_szQuestActive[128] = "";

/* -> Переменные и массивы для работы с клетками -> */
new bool:g_bDoorStatus, Array:g_aDoorList, g_iDoorListSize, Trie:g_tButtonList;

/* -> Массивы для работы с событиями 'hamsandwich' -> */
new const g_szHamHookEntityBlock[][] =
{
   "func_vehicle", // Управляемая машина
   "func_tracktrain", // Управляемый поезд
   "func_tank", // Управляемая пушка
   "game_player_hurt", // При активации наносит игроку повреждения
   "func_recharge", // Увеличение запаса бронижелета
   "func_healthcharger", // Увеличение процентов здоровья
   "game_player_equip", // Выдаёт оружие
   "player_weaponstrip", // Забирает всё оружие
   "func_button", // Кнопка
   "trigger_hurt", // Наносит игроку повреждения
   "trigger_gravity", // Устанавливает игроку силу гравитации
   "armoury_entity", // Объект лежащий на карте, оружия, броня или гранаты
   "weaponbox", // Оружие выброшенное игроком
   "weapon_shield" // Щит
};
new HamHook:g_iHamHookForwards[14];

enum _:DATA_ROUND_SOUND
{
   FILE_NAME[64],
   TRACK_NAME[64]
}
new Array:g_aDataRoundSound, g_iRoundSoundSize;
/*===== <- Переменные и массивы для работы с модом <- =====*///}

/*===== -> Битсуммы, переменные и массивы для работы с игроками -> =====*///{

/* -> Битсуммы -> */
new g_iBitUserConnected, g_iBitUserAlive, g_iBitUserVoice, g_iBitUserVoiceNextRound, g_iBitUserModel, g_iBitBlockMenu,
g_iBitKilledUsers[MAX_PLAYERS + 1], g_iBitUserVip, g_iBitUserSuperVip, g_iBitUserPremium, g_iBitUserAdmin, g_iBitUserSuperAdmin, g_iBitUserBoss, g_iBitUserManaging, g_iBitUserIron, g_iBitUserOwner, g_iBitUserHook, g_iBitUserHookTime, g_iBitUserPrefix, g_iBitUserModels, g_iBitUserBuild, g_iBitUserOAIO,
g_iBitUserRoundSound, g_iBitUserRoundEffect, g_iBitUserButtonSound, g_iBitUserAutoWeapon, g_iBitMegaJump, g_iBitAura, g_iBitUserHookNextRound, g_iBitHookRound;

/* -> Переменные -> */
new g_iLastPnId, g_iLastPnTimer;

/* -> Массивы -> */
new g_iUserTeam[MAX_PLAYERS + 1], g_iUserSkin[MAX_PLAYERS + 1], g_iUserMoney[MAX_PLAYERS + 1], g_iUserDiscount[MAX_PLAYERS + 1],
g_szUserModel[MAX_PLAYERS + 1][32], Float:g_vecHookOrigin[MAX_PLAYERS + 1][3];

/* -> Массивы для меню из игроков -> */
new g_iMenuPlayers[MAX_PLAYERS + 1][MAX_PLAYERS], g_iMenuPosition[MAX_PLAYERS + 1], g_iMenuTarget[MAX_PLAYERS + 1];

/* -> Переменные и массивы для начальника -> */
new g_iChiefId, g_iChiefIdOld, g_iChiefChoiceTime, g_szChiefName[32], g_iChiefStatus, g_iChiefSteps[MAX_PLAYERS + 1], g_iChiefVoice, g_iChiefFallDamage;
new const g_szChiefStatus[][] =
{
   "JBE_HUD_CHIEF_NOT",
   "JBE_HUD_CHIEF_ALIVE",
   "JBE_HUD_CHIEF_DEAD",
   "JBE_HUD_CHIEF_DISCONNECT",
   "JBE_HUD_CHIEF_FREE"
};

/* -> Битсуммы, переменные и массивы для освобождённых заключённых -> */
new g_iBitUserFree, g_iBitUserFreeNextRound, g_szFreeNames[192], g_iFreeLang;
new const g_szFreeLang[][] =
{
   "JBE_HUD_NOT_FREE",
   "JBE_HUD_HAS_FREE"
};

/* -> Битсуммы, переменные и массивы для разыскиваемых заключённых -> */
new g_iBitUserWanted, g_szWantedNames[192], g_iWantedLang;
new const g_szWantedLang[][] =
{
   "JBE_HUD_NOT_WANTED",
   "JBE_HUD_HAS_WANTED"
};

/* -> Переменные и массивы для костюмов -> */
enum _:DATA_COSTUMES_PRECACHE
{
   MODEL_NAME[32],
   SUB_MODEL[4],
   NAME_COSTUME[64],
   FLAG_COSTUME[2],
   WARNING_MSG[32]
}

enum _:DATA_COSTUMES
{
   COSTUMES,
   ENTITY,
   bool:HIDE
}
new Array:g_aCostumesList, g_iCostumesListSize, g_eUserCostumes[MAX_PLAYERS + 1][DATA_COSTUMES];

/* -> Битсуммы, переменные и массивы для футбола -> */
new g_iSoccerBall, Float:g_flSoccerBallOrigin[3], bool:g_bSoccerBallTouch, bool:g_bSoccerBallTrail, bool:g_bSoccerStatus,
bool:g_bSoccerGame, g_iSoccerScore[2], g_iBitUserSoccer, g_iSoccerBallOwner, g_iSoccerKickOwner, g_iSoccerUserTeam[MAX_PLAYERS + 1];

/* -> Битсуммы, переменные и массивы для бокса -> */
new bool:g_bBoxingStatus, g_iBoxingGame, g_iBitUserBoxing, g_iBoxingTypeKick[MAX_PLAYERS + 1], g_iBoxingUserTeam[MAX_PLAYERS + 1];

/* -> Битсуммы для магазина -> */
new g_iBitSharpening, g_iBitScrewdriver, g_iBitBalisong, g_iBitStileto, g_iBitKatana, g_iBitWeaponStatus, g_iBitLatchkey, g_iBitKokain, g_iBitFrostNade,
g_iBitUserFrozen, g_iBitClothingGuard, g_iBitClothingType, g_iBitHingJump, g_iBitFastRun, g_iBitDoubleJump,
g_iBitRandomGlow, g_iBitAutoBhop, g_iBitDoubleDamage, g_iBitParachute;

/* -> Переменные и массивы для рендеринга -> */
enum _:DATA_RENDERING
{
   RENDER_STATUS,
   RENDER_FX,
   RENDER_RED,
   RENDER_GREEN,
   RENDER_BLUE,
   RENDER_MODE,
   RENDER_AMT
}
new g_eUserRendering[MAX_PLAYERS + 1][DATA_RENDERING];

/* -> Битсуммы, переменные и массивы для работы с дуэлями -> */
new g_iDuelStatus, g_iDuelType, g_iBitUserDuel, g_iDuelUsersId[2], g_iDuelNames[2][32], g_iDuelCountDown, g_iDuelTimerAttack, g_iDuelPrize, g_iDuelPrizeId, g_iDuelTypeFair, g_iDuelTimeToAttack, g_iTimeAttack[] = {5, 10, 15};

new const g_szDuelLang[][] =
{
   "JBE_MENU_DUEL_WEAPON_NONE",
   "JBE_MENU_DUEL_WEAPON_DEAGLE",
   "JBE_MENU_DUEL_WEAPON_M3",
   "JBE_MENU_DUEL_WEAPON_HEGRENADE",
   "JBE_MENU_DUEL_WEAPON_M249",
   "JBE_MENU_DUEL_WEAPON_AWP",
   "JBE_MENU_DUEL_WEAPON_KNIFE"
};

new const g_szDuelPrizeLang[][] =
{
   "JBE_DUEL_PRIZE_NONE",
   "JBE_DUEL_PRIZE_FREEDAY",
   "JBE_DUEL_PRIZE_VOICE",
   "JBE_DUEL_PRIZE_EXP",
   "JBE_DUEL_PRIZE_MONEY",
   "JBE_DUEL_PRIZE_HOOK"
};

/* -> Битсуммы, переменные и массивы для работы с донатом -> */
new g_iVipRespawn[MAX_PLAYERS + 1], g_iVipMoney[MAX_PLAYERS + 1], g_iVipHealth[MAX_PLAYERS + 1], g_iVipSpeed[MAX_PLAYERS + 1], g_iVipFree[MAX_PLAYERS + 1], g_iVipKnife[MAX_PLAYERS + 1];

new g_iDSpawn[33], g_iDGren[33],  g_iDHealth[33], g_iDGrav[33], g_iDSpeed[33];

new g_iSuperVipRespawn[MAX_PLAYERS + 1], g_iSuperVipMoney[MAX_PLAYERS + 1], g_iSuperVipHealth[MAX_PLAYERS + 1], g_iSuperVipGravity[MAX_PLAYERS + 1],
g_iSuperVipGlow[MAX_PLAYERS + 1], g_iSuperVipSharpening[MAX_PLAYERS + 1], g_iPremiumStileto[MAX_PLAYERS + 1], g_iSuperVipAutobhop[MAX_PLAYERS + 1];

new g_iPremiumRespawn[MAX_PLAYERS + 1], g_iPremiumHolo[MAX_PLAYERS + 1], g_iPremiumDamage[MAX_PLAYERS + 1], g_iPremiumGm[MAX_PLAYERS + 1], g_iPremiumMask[MAX_PLAYERS + 1],
g_iPremiumMegaJump[MAX_PLAYERS + 1], g_iPremiumWanted[MAX_PLAYERS + 1];

new g_iSuperAdminTrail[MAX_PLAYERS + 1], g_iSuperAdminGrenade[MAX_PLAYERS + 1], g_iSuperAdminInvis[MAX_PLAYERS + 1], g_iSuperAdminMoney[MAX_PLAYERS + 1], g_iSuperAdminDj[MAX_PLAYERS + 1];

new g_iOwnerMoney[MAX_PLAYERS + 1];

new g_bShopStatus, g_bGuardStatus, g_iBossStatusTrue[3], g_iBossAura[MAX_PLAYERS + 1], g_iBossBayonet[MAX_PLAYERS + 1], g_bHookStatus, g_iBitBayonet;

/* -> Битсуммы, переменные и массивы для рабботы с информером -> */
new g_iInfoStatus[MAX_PLAYERS + 1][3], g_iInfoColor[MAX_PLAYERS + 1][3];

// LVL SYSTEM
enum _:CVARS_LVL
{
   KILL_CT,
   KILL_CHIEF,
   RIOT_START,
   KILL_TT,
   KILL_WT,
   MONEY_BONUS,
   HEALTH_BONUS,
   PLAYERS_NEED
}
new g_iLevelCvars[CVARS_LVL];

#define TOTAL_PLAYER_LEVELS 15
#define MAX_LEVEL 14
static const g_szExp[TOTAL_PLAYER_LEVELS] =
{
   0,          // 0  Уровень
   20,       // 1  Уровень
   60,       // 2  Уровень
   105,       // 3  Уровень
   200,       // 4  Уровень
   320,       // 5  Уровень
   500,       // 6  Уровень
   700,       // 7  Уровень
   1000,       // 8  Уровень
   2000,       // 9 Уровень
   4000,       // 10 Уровень
   6000,       // 11 Уровень
   8000,       // 12 Уровень
   10000,       // 13 Уровень
   12000       // 14 Уровень
   
};

static const g_szRankName[TOTAL_PLAYER_LEVELS][] =
{
   "JBE_ID_HUD_RANK_NAME_1",
   "JBE_ID_HUD_RANK_NAME_2",
   "JBE_ID_HUD_RANK_NAME_3",
   "JBE_ID_HUD_RANK_NAME_4",
   "JBE_ID_HUD_RANK_NAME_5",
   "JBE_ID_HUD_RANK_NAME_6",
   "JBE_ID_HUD_RANK_NAME_7",
   "JBE_ID_HUD_RANK_NAME_8",
   "JBE_ID_HUD_RANK_NAME_9",
   "JBE_ID_HUD_RANK_NAME_10",
   "JBE_ID_HUD_RANK_NAME_11",
   "JBE_ID_HUD_RANK_NAME_12",
   "JBE_ID_HUD_RANK_NAME_13",
   "JBE_ID_HUD_RANK_NAME_14",
   "JBE_ID_HUD_RANK_NAME_15"
};

new g_szRankHost[32], g_szRankUser[32], g_szRankPassword[32], g_szRankDataBase[32], g_szRankTable[32];

new g_szQuery[2048] , g_szSteamID[MAX_PLAYERS + 1][34];
new Handle:g_hDBTuple, Handle:g_hConnect;

new g_iLevel[MAX_PLAYERS + 1];

new g_iExpName[MAX_PLAYERS + 1];
public SQL_QueryConnection(iState, Handle:hQuery, szError[], iErrcode, iParams[] , iParamsSize)
{
   new pPlayer = iParams[0];
   if(SQL_NumResults(hQuery) < 1)
   {
      if(equal(g_szSteamID[pPlayer], "ID_PENDING"))
      return PLUGIN_HANDLED;
      g_iLevel[pPlayer] = 0;
      g_iExpName[pPlayer] = 0;
      g_iUserMoney[pPlayer] = 0;
      format
      (
         g_szQuery, charsmax(g_szQuery),
         
         "INSERT INTO `%s`(`SteamID`, `user_level`, `user_exp`) VALUES ('%s' ,'%i' ,'%i');",
         g_szRankTable, g_szSteamID[pPlayer], 
         g_iLevel[pPlayer], g_iExpName[pPlayer]
      );
      SQL_ThreadQuery(g_hDBTuple, "ThreadQueryHandler", g_szQuery);
      return PLUGIN_HANDLED;
   }
   else
   {
      g_iLevel[pPlayer] = SQL_ReadResult(hQuery, 1);
      g_iExpName[pPlayer] = SQL_ReadResult(hQuery, 2);
   }
   return PLUGIN_HANDLED;
}

public ThreadQueryHandler(iState, Handle:hQuery, szError[], iError, iParams[], iParamsSize)
{
   if(iState == 0)
   return;
}

/* -> Битсуммы, переменные и массивы для работы с хуком -> */
new const g_szHookSound[][][] =
{
   {"1", "jb_engine/hook/rope.wav"},
   {"2", "jb_engine/hook/ball.wav"},
   {"3", "jb_engine/hook/bun.wav"},
   {"4", "jb_engine/hook/pay.wav"},
   {"5", "jb_engine/hook/lightning.wav"},
   {"6", "jb_engine/hook/laser.wav"},
   {"7", "jb_engine/hook/kick.wav"},
   {"8", "jb_engine/hook/jump.wav"},
   {"9", "jb_engine/boxing/gong.wav"}
};

new const g_szHookSprite[][][] =
{
   {"1", "sprites/jb_engine/hook/hook_v.spr"},
   {"2", "sprites/jb_engine/hook/hook_n.spr"},
   {"3", "sprites/jb_engine/hook/hook_c.spr"},
   {"4", "sprites/jb_engine/hook/hook_b.spr"},
   {"5", "sprites/jb_engine/hook/hook_av.spr"},
   {"6", "sprites/jb_engine/hook/hook_an.spr"},
   {"7", "sprites/jb_engine/hook/hook_am.spr"},
   {"8", "sprites/jb_engine/hook/hook_ac.spr"},
   {"9", "sprites/jb_engine/hook/hook_ab.spr"},
   {"10", "sprites/jb_engine/hook/hook_aa.spr"},
   {"11", "sprites/jb_engine/hook/hook_axe_v2.spr"},
   {"12", "sprites/jb_engine/hook/rainbow.spr"},
   {"13", "sprites/jb_engine/hook/lgtning.spr"}
};

new const g_szHookEnd[][][] =
{
   {"1", "sprites/jb_engine/hook/richo2.spr"},
   {"2", "sprites/jb_engine/hook/love.spr"},
   {"3", "sprites/jb_engine/hook/balls.spr"},
   {"4", "sprites/jb_engine/hook/half-life.spr"},
   {"5", "sprites/jb_engine/hook/end_6.spr"},
   {"6", "sprites/jb_engine/hook/Biohazard.spr"},
   {"7", "sprites/jb_engine/hook/frostgib.spr"},
   {"8", "sprites/jb_engine/hook/cake_explosion.spr"}
};

new const g_szHookSpeed[][][] =
{
   {"СРЕДНЯЯ", "160.0"},
   {"НИЗКАЯ", "120.0"},
   {"ВЫСОКАЯ", "250.0"}
};

new const g_szHookColor[][][] =
{
   {"БЕЛЫЙ", "255", "255", "255"},
   {"КРАСНЫЙ", "255", "0", "0"},
   {"ФИОЛЕТОВЫЙ", "255", "0", "255"},
   {"ЖЁЛТЫЙ", "255", "255", "0"},
   {"ЗЕЛЁНЫЙ", "0", "255", "0"},
   {"ГОЛУБОЙ", "0", "255", "255"},
   {"СИНИЙ", "0", "0", "255"},
   {"ОРАНЖЕВЫЙ", "255", "60", "0"}
};

new const g_szHookSize[][][] =
{
   {"СРЕДНИЙ", "45"},
   {"МАЛЕНЬКИЙ", "25"},
   {"БОЛЬШОЙ", "75"}
};

new const g_szHookType[][][] =
{
   {"ПРЯМАЯ", "0"},
   {"ЗМЕЙКА", "10"},
   {"МОЛНИЯ", "30"}
};

new g_iHookSound[33], g_iHookSprite[33], g_iHookEnd[33], g_iHookSpeed[33], g_iHookColor[33], g_iHookSize[33], g_iHookType[33];
new g_iHookSpriteEff[64], g_iHookSpriteEnd[64];

enum _:DATA_QUEST
{
   QUEST_TEXT[64],
   QUEST_ANSWER[64],
   QUEST_PRIZE[16]
}
new Array:g_aQuestList;
new g_iQuestListSize;
new g_iCountDownQuest;
new g_iAnswer[64], g_szMath[196], g_iPrize;

/* -> Остальное -> */
new g_iUserChoose[MAX_PLAYERS + 1], g_iUserModel[MAX_PLAYERS + 1];

new g_iSvetoforColor[MAX_PLAYERS + 1], g_iSvetoforSound, g_iUserCamera[MAX_PLAYERS + 1],
g_iUserParaEnt[MAX_PLAYERS + 1], g_iUserParaUse[MAX_PLAYERS + 1], g_iUserWarning[MAX_PLAYERS + 1], g_iPlayer_GameTime[MAX_PLAYERS + 1], g_iHookTimeNum;

new g_iBonusHealth[MAX_PLAYERS + 1], g_iBonusMoney[MAX_PLAYERS + 1], g_iBonusGravSpeed[MAX_PLAYERS + 1], g_iBonusGrenade[MAX_PLAYERS + 1], g_iBonusGlock[MAX_PLAYERS + 1], g_iBonusBayonet[MAX_PLAYERS + 1];

/* -> Глобальные игры -> */
static const g_szGlobalType[][] =
{
   "JBE_GLOBAL_GAME_HUNGER_GAME",
   "JBE_GLOBAL_GAME_RIOT"
};

static const g_szGlobalWeapon[][] =
{
   "JBE_GLOBAL_GAME_AK47",
   "JBE_GLOBAL_GAME_M4A1",
   "JBE_GLOBAL_GAME_AWP",
   "JBE_GLOBAL_GAME_M3"
};

static const g_szGlobalDay[][] =
{
   "JBE_GLOBAL_GAME_DAY",
   "JBE_GLOBAL_GAME_NOON",
   "JBE_GLOBAL_GAME_EVENING",
   "JBE_GLOBAL_GAME_NIGHT"
};

static const g_szGlobalMusic[][] =
{
   "Majlo x Tim Heart - Bounce",
   "Masuria - Yuza"
};

new g_szGlobalTime[] = {10, 20, 30}, g_szGlobalHp[] = {100, 150, 200, 255, 300};
new g_iGlobalGame, g_iGlobalType, g_iGlobalWeapon, g_iGlobalTime, g_iGlobalTimer, g_iGlobalDay, g_iGlobalHp[2], g_iGlobalMusic;
/* <- Глобальные игры <- */

/* -> Массивы для работы с заданиями -> */
enum _:DATA_USER_QUEST
{
   ENABLED,
   INDEX,
   PROGRESS
};

new g_iUserQuest[MAX_PLAYERS + 1][DATA_USER_QUEST], g_iQuestPrize;

new const g_szQuestPrizeLang[][] =
{
   "JBE_QUEST_PRIZE_MONEY",
   "JBE_QUEST_PRIZE_EXP"
};
/* <- Массивы для работы с заданиями <- */

/* <- Дуэли <- */
new Float:fDuelOriginPrison[3], Float:fDuelOriginGuard[3];

new g_iUserBet[MAX_PLAYERS + 1], g_iUserBetId[MAX_PLAYERS + 1], g_iBitUserBet, g_iCountMoney[2];
/* -> Дуэли -> */
/*===== <- Битсуммы, переменные и массивы для работы с игроками <- =====*///}

public plugin_precache()
{
   files_precache();
   models_precache();
   sounds_precache();
   sprites_precache();
   jbe_create_buyzone();
   g_tButtonList = TrieCreate();
   g_iFakeMetaKeyValue = register_forward(FM_KeyValue, "FakeMeta_KeyValue_Post", 1);
   g_tRemoveEntities = TrieCreate();
   new const szRemoveEntities[][] = {"func_hostage_rescue", "info_hostage_rescue", "func_bomb_target", "info_bomb_target", "func_vip_safetyzone", "info_vip_start", "func_escapezone", "hostage_entity", "monster_scientist", "func_buyzone"};
   for(new i; i < sizeof(szRemoveEntities); i++) TrieSetCell(g_tRemoveEntities, szRemoveEntities[i], i);
   g_iFakeMetaSpawn = register_forward(FM_Spawn, "FakeMeta_Spawn_Post", 1);
}

// Секции mode_settings.ini
enum
{
   SELECT_FLAGS = 1,
   SELECT_HEALTH_GR,
   SELECT_PR_SKINS,
   SELECT_INFORMER
};

// Флаги доступа
enum _:FLAGS
{
   VIP = 0,
   SUPER_VIP,
   PREMIUM,
   ADMIN,
   SUPER_ADMIN,
   BOSS,
   MANAGING,
   IRON,
   OWNER,
   HOOK,
   PREFIX,
   MODELM,
   BUILD,
   OAIO
};
new g_iFlagAccess[FLAGS];

// Здоровье охраны
enum _:HEALTH_GR
{
   GUARD_HP,
   CHIEF_HP
};
new g_iHealthGuard[HEALTH_GR];

// Одежда заключенных
enum _:PR_SKINS
{
   SKIN_ADMIN,
   SKIN_FREEDAY,
   SKIN_WANTED,
   SKIN_FOOTBAL_RED,
   SKIN_FOOTBAL_BLUE
};
new g_iPrisonerSkin[PR_SKINS];

// Настройка информера
enum _:INFORMER
{
   COLOR_RED,
   COLOR_GREEN,
   COLOR_BLUE
};
new g_iInformer[INFORMER];

// Секции mode_precache.ini
enum
{
   SELECT_MODELS = 1,
   SELECT_SOUNDS,
   SELECT_SPRITES
};

// Модели
enum _:MODELS
{
   V_PR_HAND,
   P_PR_HAND,
   V_GR_HAND,
   P_GR_HAND,
   V_GLOVE_RED,
   P_GLOVE_RED,
   V_GLOVE_BLUE,
   P_GLOVE_BLUE,
   BALL,
   V_HAND_BALL,
   V_RS,
   PARACHUTE,
   V_ICE,
   P_ICE,
   V_SYRINGE,
   V_SHARPENING,
   P_SHARPENING,
   V_SCREWDRIVER,
   P_SCREWDRIVER,
   V_BALISONG,
   P_BALISONG,
   V_CRIMSON,
   P_CRIMSON,
   V_STILETO,
   P_STILETO,
   V_KATANA,
   P_KATANA
};
new g_szModels[MODELS][128];

// Модели игроков
enum _:PLAYER_MODELS
{
   PRISONER,
   GUARD,
   CHIEF,
   BUY_MODEL_1,
   BUY_MODEL_2,
   BUY_MODEL_3,
   BUY_MODEL_4,
   BUY_MODEL_5,
   BUY_MODEL_6,
   BUY_MODEL_7,
   BUY_MODEL_8
};
new g_szPlayerModels[PLAYER_MODELS][32];

// Звуки
enum _:SOUNDS
{
   HAND_HIT,
   HAND_SLASH,
   HAND_DEPLOY,
   BATON_DEPLOY,
   BATON_HITWALL,
   BATON_SLASH,
   BATON_STAB,
   BATON_HIT,
   BOUNCE_BALL,
   GRAB_BALL,
   KICK_BALL,
   WHITLE_START,
   WHITLE_END,
   CROWD,
   GLOVES_HIT,
   SUPER_HIT,
   GONG,
   GRENADE_FROST_EXPLOSION,
   FREEZE_PLAYER,
   DEFROST_PLAYER,
   SHARPENING_DEPLOY,
   SHARPENING_HITWALL,
   SHARPENING_SLASH,
   SHARPENING_HIT,
   SCREWDRIVER_DEPLOY,
   SCREWDRIVER_HITWALL,
   SCREWDRIVER_SLASH,
   SCREWDRIVER_HIT,
   BALISONG_DEPLOY,
   BALISONG_HITWALL,
   BALISONG_SLASH,
   BALISONG_HIT,
   CRIMSON_DEPLOY,
   CRIMSON_HITWALL,
   CRIMSON_SLASH,
   CRIMSON_HIT,
   PRISON_RIOT,
   BUTTON_SOUND,
   MEGA_JUMP,
   FREEDAY_START,
   FREEDAY_END,
   START_END,
   RIGHT,
   COUNT,
   GIVE_HOOK,
   DUEL_SOUND,
   GLOBAL_1,
   GLOBAL_2,
   KATANA_DEPLOY,
   KATANA_HITWALL,
   KATANA_SLASH,
   KATANA_HIT
   
};
new g_szSounds[SOUNDS][128];

enum _:SPRITES
{
   HAS_BALL,
   DUEL_RED,
   DUEL_BLUE,
   MEGA_JUMP_LINE,
   ICEG
};
new g_szSprites[SPRITES][128];

public plugin_init()
{
   //SQL_SetAffinity("sqlite"); //sqlx
   main_init();
   cvars_init();
   event_init();
   clcmd_init();
   menu_init();
   message_init();
   door_init();
   fakemeta_init();
   hamsandwich_init();
   game_mode_init();
}

public plugin_end()
{
   // LVL SYSTEM
   if(g_hDBTuple) SQL_FreeHandle(g_hDBTuple);
   if(g_hConnect) SQL_FreeHandle(g_hConnect);
   return;
}
/*===== -> Файлы -> =====*///{
files_precache()
{
   new szCfgDir[64], szCfgFile[128];
   get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
   formatex(szCfgFile, charsmax(szCfgFile), "%s/jb_engine/ini/quests.ini", szCfgDir);
   switch(file_exists(szCfgFile))
   {
      case 0: log_to_file("%s/jb_engine/log_error.log", "File ^"%s^" not found!", szCfgDir, szCfgFile);
      case 1: jbe_quest_read_file(szCfgFile);
   }
   formatex(szCfgFile, charsmax(szCfgFile), "%s/jb_engine/ini/round_sound.ini", szCfgDir);
   switch(file_exists(szCfgFile))
   {
      case 0: log_to_file("%s/jb_engine/log_error.log", "File ^"%s^" not found!", szCfgDir, szCfgFile);
      case 1:
      {
         new aDataRoundSound[DATA_ROUND_SOUND], szBuffer[128], iLine, iLen;
         g_aDataRoundSound = ArrayCreate(DATA_ROUND_SOUND);
         while(read_file(szCfgFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
         {
            if(!iLen || szBuffer[0] == ';') continue;
            parse
            (
               szBuffer,
               aDataRoundSound[FILE_NAME], charsmax(aDataRoundSound[FILE_NAME]),
               aDataRoundSound[TRACK_NAME], charsmax(aDataRoundSound[TRACK_NAME])
            );
            formatex(szBuffer, charsmax(szBuffer), "%s.mp3", aDataRoundSound[FILE_NAME]);
            engfunc(EngFunc_PrecacheGeneric, szBuffer);
            ArrayPushArray(g_aDataRoundSound, aDataRoundSound);
         }
         g_iRoundSoundSize = ArraySize(g_aDataRoundSound);
      }
   }
   formatex(szCfgFile, charsmax(szCfgFile), "%s/jb_engine/ini/costumes_list.ini", szCfgDir);
   switch(file_exists(szCfgFile))
   {
      case 0: log_to_file("%s/jb_engine/log_error.log", "File ^"%s^" not found!", szCfgDir, szCfgFile);
      case 1:
      {
         new aDataCostumesRead[DATA_COSTUMES_PRECACHE], szBuffer[256], iLine, iLen;
         g_aCostumesList = ArrayCreate(DATA_COSTUMES_PRECACHE);
         while(read_file(szCfgFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
         {
            if(!iLen || szBuffer[0] == ';') continue;
            parse
            (
               szBuffer,
               aDataCostumesRead[MODEL_NAME],       charsmax(aDataCostumesRead[MODEL_NAME]),
               aDataCostumesRead[SUB_MODEL],       charsmax(aDataCostumesRead[SUB_MODEL]),
               aDataCostumesRead[NAME_COSTUME],   charsmax(aDataCostumesRead[NAME_COSTUME]),
               aDataCostumesRead[FLAG_COSTUME],   charsmax(aDataCostumesRead[FLAG_COSTUME]),
               aDataCostumesRead[WARNING_MSG],      charsmax(aDataCostumesRead[WARNING_MSG])
            );
            format(szBuffer, charsmax(szBuffer), "models/jb_engine/costumes/%s.mdl", aDataCostumesRead[MODEL_NAME]);
            if(file_exists(szBuffer)) engfunc(EngFunc_PrecacheModel, szBuffer);
            ArrayPushArray(g_aCostumesList, aDataCostumesRead);
         }
         g_iCostumesListSize = ArraySize(g_aCostumesList);
      }
   }
   
   new szMapName[64]; get_mapname(szMapName, charsmax(szMapName));
   formatex(szCfgFile, charsmax(szCfgFile), "%s/jb_engine/duels/%s.ini", szCfgDir, szMapName);
   switch(file_exists(szCfgFile))
   {
      case 1:
      {
         new iFile = fopen(szCfgFile, "rt");
         new sStringBuf[512];
         new GetFloatString[3][64], GetString[2][64];
         while(!feof(iFile))
         {
            fgets(iFile, sStringBuf, charsmax(sStringBuf));
            if(sStringBuf[0] && sStringBuf[0] != ';' && parse(sStringBuf, GetString[0], charsmax(GetString[]), GetString[1], charsmax(GetString[])))
            {
               parse(GetString[0], GetFloatString[0], charsmax(GetFloatString[]), GetFloatString[1], charsmax(GetFloatString[]), GetFloatString[2], charsmax(GetFloatString[]));
               fDuelOriginPrison[0] = str_to_float(GetFloatString[0]);
               fDuelOriginPrison[1] = str_to_float(GetFloatString[1]);
               fDuelOriginPrison[2] = str_to_float(GetFloatString[2]);
               parse(GetString[1], GetFloatString[0], charsmax(GetFloatString[]), GetFloatString[1], charsmax(GetFloatString[]), GetFloatString[2], charsmax(GetFloatString[]));
               fDuelOriginGuard[0] = str_to_float(GetFloatString[0]);
               fDuelOriginGuard[1] = str_to_float(GetFloatString[1]);
               fDuelOriginGuard[2] = str_to_float(GetFloatString[2]);
            }
         }
      }
      default:
      {
         for(new i = 0; i < 3; i++) fDuelOriginPrison[i] = 0.0;
         for(new i = 0; i < 3; i++) fDuelOriginGuard[i] = 0.0;
         log_to_file("%s/jb_engine/log_error.log", "File ^"%s^" not found!", szCfgDir, szCfgFile);
      }
   }
   
   formatex(szCfgFile, charsmax(szCfgFile), "%s/jb_engine/ini/mode_settings.ini", szCfgDir);
   if(!file_exists(szCfgFile))
   {
      new szError[100];
      formatex(szError, charsmax(szError), "[MJB] Отсутсвтует файл: %s", szCfgFile);
      set_fail_state(szError);
      return;
   }
   new szBuffer[128], szKey[64], szValue[960], iSectrion;
   new iFile = fopen(szCfgFile, "rt");
   while(iFile && !feof(iFile))
   {
      fgets(iFile, szBuffer, charsmax(szBuffer));
      replace(szBuffer, charsmax(szBuffer), "^n", "");
      if(!szBuffer[0] || szBuffer[0] == ';' || szBuffer[0] == '{' || szBuffer[0] == '}' || szBuffer[0] == '#') continue;
      if(szBuffer[0] == '[')
      {
         iSectrion++;
         continue;
      }         
      parse(szBuffer, szKey, charsmax(szKey), szValue, charsmax(szValue));
      trim(szKey);
      trim(szValue);
      switch(iSectrion)
      {
         case SELECT_FLAGS:
         {
            if(equal(szKey, "VIP"))             g_iFlagAccess[VIP]          = read_flags(szValue);
            else if(equal(szKey, "SUPER_VIP"))      g_iFlagAccess[SUPER_VIP]   = read_flags(szValue);
            else if(equal(szKey, "PREMIUM"))         g_iFlagAccess[PREMIUM]       = read_flags(szValue);
            else if(equal(szKey, "ADMIN"))            g_iFlagAccess[ADMIN]       = read_flags(szValue);
            else if(equal(szKey, "SUPER_ADMIN"))      g_iFlagAccess[SUPER_ADMIN]    = read_flags(szValue);
            else if(equal(szKey, "BOSS"))            g_iFlagAccess[BOSS]        = read_flags(szValue);
            else if(equal(szKey, "MANAGING"))      g_iFlagAccess[MANAGING]    = read_flags(szValue);
            else if(equal(szKey, "IRON"))         g_iFlagAccess[IRON]       = read_flags(szValue);
            else if(equal(szKey, "OWNER"))            g_iFlagAccess[OWNER]       = read_flags(szValue);
            else if(equal(szKey, "HOOK"))            g_iFlagAccess[HOOK]        = read_flags(szValue);
            else if(equal(szKey, "PREFIX"))            g_iFlagAccess[PREFIX]       = read_flags(szValue);
            else if(equal(szKey, "MODELM"))            g_iFlagAccess[MODELM]       = read_flags(szValue);
            else if(equal(szKey, "BUILD"))            g_iFlagAccess[BUILD]       = read_flags(szValue);
            else if(equal(szKey, "OAIO"))            g_iFlagAccess[OAIO]       = read_flags(szValue);
         }
         case SELECT_HEALTH_GR:
         {
            if(equal(szKey, "GUARD_HP"))          g_iHealthGuard[GUARD_HP]   = str_to_num(szValue);
            else if(equal(szKey, "CHIEF_HP"))      g_iHealthGuard[CHIEF_HP]   = str_to_num(szValue);
         }
         case SELECT_PR_SKINS:
         {
            if(equal(szKey, "SKIN_ADMIN"))          g_iPrisonerSkin[SKIN_ADMIN] = str_to_num(szValue);
            else if(equal(szKey, "SKIN_FREEDAY"))    g_iPrisonerSkin[SKIN_FREEDAY] = str_to_num(szValue);
            else if(equal(szKey, "SKIN_WANTED"))    g_iPrisonerSkin[SKIN_WANTED] = str_to_num(szValue);
            else if(equal(szKey, "SKIN_FOOTBAL_RED"))    g_iPrisonerSkin[SKIN_FOOTBAL_RED] = str_to_num(szValue);
            else if(equal(szKey, "SKIN_FOOTBAL_BLUE"))    g_iPrisonerSkin[SKIN_FOOTBAL_BLUE] = str_to_num(szValue);
         }
         case SELECT_INFORMER:
         {
            if(equal(szKey, "COLOR_RED"))          g_iInformer[COLOR_RED] = str_to_num(szValue);
            else if(equal(szKey, "COLOR_GREEN"))    g_iInformer[COLOR_GREEN] = str_to_num(szValue);
            else if(equal(szKey, "COLOR_BLUE"))    g_iInformer[COLOR_BLUE] = str_to_num(szValue);
         }
      }
   }
   fclose(iFile);
   
   formatex(szCfgFile, charsmax(szCfgFile), "%s/jb_engine/ini/mode_precache.ini", szCfgDir);
   if(!file_exists(szCfgFile))
   {
      new szError[100];
      formatex(szError, charsmax(szError), "[MJB] Отсутсвтует файл: %s", szCfgFile);
      set_fail_state(szError);
      return;
   }
   iSectrion = 0;
   iFile = fopen(szCfgFile, "rt");
   while(iFile && !feof(iFile))
   {
      fgets(iFile, szBuffer, charsmax(szBuffer));
      replace(szBuffer, charsmax(szBuffer), "^n", "");
      if(!szBuffer[0] || szBuffer[0] == ';' || szBuffer[0] == '{' || szBuffer[0] == '}' || szBuffer[0] == '#') continue;
      if(szBuffer[0] == '[')
      {
         iSectrion++;
         continue;
      }
      parse(szBuffer, szKey, charsmax(szKey), szValue, charsmax(szValue));
      trim(szKey);
      trim(szValue);
      switch(iSectrion)
      {
         case SELECT_MODELS:
         {
            if(equal(szKey, "V_PR_HAND")) formatex(g_szModels[V_PR_HAND], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_PR_HAND")) formatex(g_szModels[P_PR_HAND], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_GR_HAND")) formatex(g_szModels[V_GR_HAND], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_GR_HAND"))   formatex(g_szModels[P_GR_HAND],   charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_GLOVE_RED")) formatex(g_szModels[V_GLOVE_RED], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_GLOVE_RED")) formatex(g_szModels[P_GLOVE_RED], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_GLOVE_BLUE")) formatex(g_szModels[V_GLOVE_BLUE], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_GLOVE_BLUE")) formatex(g_szModels[P_GLOVE_BLUE], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "BALL")) formatex(g_szModels[BALL], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_HAND_BALL")) formatex(g_szModels[V_HAND_BALL], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_RS")) formatex(g_szModels[V_RS], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "PARACHUTE")) formatex(g_szModels[PARACHUTE], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_ICE")) formatex(g_szModels[V_ICE], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_ICE")) formatex(g_szModels[P_ICE], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_SYRINGE")) formatex(g_szModels[V_SYRINGE], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_SHARPENING")) formatex(g_szModels[V_SHARPENING], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_SHARPENING")) formatex(g_szModels[P_SHARPENING], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_SCREWDRIVER")) formatex(g_szModels[V_SCREWDRIVER], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_SCREWDRIVER")) formatex(g_szModels[P_SCREWDRIVER], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_BALISONG")) formatex(g_szModels[V_BALISONG], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_BALISONG")) formatex(g_szModels[P_BALISONG], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_CRIMSON")) formatex(g_szModels[V_CRIMSON], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_CRIMSON")) formatex(g_szModels[P_CRIMSON], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_STILETO")) formatex(g_szModels[V_STILETO], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_STILETO")) formatex(g_szModels[P_STILETO], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "V_KATANA")) formatex(g_szModels[V_KATANA], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "P_KATANA")) formatex(g_szModels[P_KATANA], charsmax(g_szModels[]), szValue);
            else if(equal(szKey, "PRISONER")) formatex(g_szPlayerModels[PRISONER], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "GUARD")) formatex(g_szPlayerModels[GUARD], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "CHIEF")) formatex(g_szPlayerModels[CHIEF], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "BUY_MODEL_1")) formatex(g_szPlayerModels[BUY_MODEL_1], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "BUY_MODEL_2")) formatex(g_szPlayerModels[BUY_MODEL_2], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "BUY_MODEL_3")) formatex(g_szPlayerModels[BUY_MODEL_3], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "BUY_MODEL_4")) formatex(g_szPlayerModels[BUY_MODEL_4], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "BUY_MODEL_5")) formatex(g_szPlayerModels[BUY_MODEL_5], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "BUY_MODEL_6")) formatex(g_szPlayerModels[BUY_MODEL_6], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "BUY_MODEL_7")) formatex(g_szPlayerModels[BUY_MODEL_7], charsmax(g_szPlayerModels[]), szValue);
            else if(equal(szKey, "BUY_MODEL_8")) formatex(g_szPlayerModels[BUY_MODEL_8], charsmax(g_szPlayerModels[]), szValue);
         }
         case SELECT_SOUNDS:
         {
            if(equal(szKey, "HAND_HIT")) formatex(g_szSounds[HAND_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "HAND_SLASH")) formatex(g_szSounds[HAND_SLASH], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "HAND_DEPLOY")) formatex(g_szSounds[HAND_DEPLOY], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BATON_DEPLOY")) formatex(g_szSounds[BATON_DEPLOY], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BATON_HITWALL")) formatex(g_szSounds[BATON_HITWALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BATON_SLASH")) formatex(g_szSounds[BATON_SLASH], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BATON_STAB")) formatex(g_szSounds[BATON_STAB], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BATON_HIT")) formatex(g_szSounds[BATON_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BOUNCE_BALL")) formatex(g_szSounds[BOUNCE_BALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "GRAB_BALL")) formatex(g_szSounds[GRAB_BALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "KICK_BALL")) formatex(g_szSounds[KICK_BALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "WHITLE_START")) formatex(g_szSounds[WHITLE_START], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "WHITLE_END")) formatex(g_szSounds[WHITLE_END], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "CROWD")) formatex(g_szSounds[CROWD], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "GLOVES_HIT")) formatex(g_szSounds[GLOVES_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SUPER_HIT")) formatex(g_szSounds[SUPER_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "GONG")) formatex(g_szSounds[GONG], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "GRENADE_FROST_EXPLOSION")) formatex(g_szSounds[GRENADE_FROST_EXPLOSION], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "FREEZE_PLAYER")) formatex(g_szSounds[FREEZE_PLAYER], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "DEFROST_PLAYER")) formatex(g_szSounds[DEFROST_PLAYER], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SHARPENING_DEPLOY")) formatex(g_szSounds[SHARPENING_DEPLOY], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SHARPENING_HITWALL")) formatex(g_szSounds[SHARPENING_HITWALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SHARPENING_SLASH")) formatex(g_szSounds[SHARPENING_SLASH], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SHARPENING_HIT")) formatex(g_szSounds[SHARPENING_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SCREWDRIVER_DEPLOY")) formatex(g_szSounds[SCREWDRIVER_DEPLOY], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SCREWDRIVER_HITWALL")) formatex(g_szSounds[SCREWDRIVER_HITWALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SCREWDRIVER_SLASH")) formatex(g_szSounds[SCREWDRIVER_SLASH], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "SCREWDRIVER_HIT")) formatex(g_szSounds[SCREWDRIVER_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BALISONG_DEPLOY")) formatex(g_szSounds[BALISONG_DEPLOY], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BALISONG_HITWALL")) formatex(g_szSounds[BALISONG_HITWALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BALISONG_SLASH")) formatex(g_szSounds[BALISONG_HITWALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BALISONG_HIT")) formatex(g_szSounds[BALISONG_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "KATANA_DEPLOY")) formatex(g_szSounds[KATANA_DEPLOY], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "KATANA_HITWALL")) formatex(g_szSounds[KATANA_HITWALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "KATANA_SLASH")) formatex(g_szSounds[KATANA_SLASH], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "KATANA_HIT")) formatex(g_szSounds[KATANA_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "CRIMSON_DEPLOY")) formatex(g_szSounds[CRIMSON_DEPLOY], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "CRIMSON_HITWALL")) formatex(g_szSounds[CRIMSON_HITWALL], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "CRIMSON_SLASH")) formatex(g_szSounds[CRIMSON_SLASH], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "CRIMSON_HIT")) formatex(g_szSounds[CRIMSON_HIT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "PRISON_RIOT")) formatex(g_szSounds[PRISON_RIOT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "BUTTON_SOUND")) formatex(g_szSounds[BUTTON_SOUND], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "MEGA_JUMP")) formatex(g_szSounds[MEGA_JUMP], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "FREEDAY_START")) formatex(g_szSounds[FREEDAY_START], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "FREEDAY_END")) formatex(g_szSounds[FREEDAY_END], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "START_END")) formatex(g_szSounds[START_END], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "RIGHT")) formatex(g_szSounds[RIGHT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "COUNT")) formatex(g_szSounds[COUNT], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "GIVE_HOOK")) formatex(g_szSounds[GIVE_HOOK], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "DUEL_SOUND")) formatex(g_szSounds[DUEL_SOUND], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "GLOBAL_1")) formatex(g_szSounds[GLOBAL_1], charsmax(g_szSounds[]), szValue);
            else if(equal(szKey, "GLOBAL_2")) formatex(g_szSounds[GLOBAL_2], charsmax(g_szSounds[]), szValue);
         }
         case SELECT_SPRITES:
         {
            if(equal(szKey, "HAS_BALL")) formatex(g_szSprites[HAS_BALL], charsmax(g_szSprites[]), szValue);
            else if(equal(szKey, "DUEL_RED")) formatex(g_szSprites[DUEL_RED], charsmax(g_szSprites[]), szValue);
            else if(equal(szKey, "DUEL_BLUE")) formatex(g_szSprites[DUEL_BLUE], charsmax(g_szSprites[]), szValue);
            else if(equal(szKey, "MEGA_JUMP_LINE")) formatex(g_szSprites[MEGA_JUMP_LINE], charsmax(g_szSprites[]), szValue);
            else if(equal(szKey, "ICEG")) formatex(g_szSprites[ICEG], charsmax(g_szSprites[]), szValue);
         }
      }
   }
   fclose(iFile);
}

jbe_quest_read_file(szCfgFile[])
{
   new aDataQuestRead[DATA_QUEST], szBuffer[128];
   g_aQuestList = ArrayCreate(DATA_QUEST);
   new file = fopen(szCfgFile, "rt");
   while(file && !feof(file))
   {
      fgets(file, szBuffer, charsmax(szBuffer));
      if(szBuffer[0] == ';' || szBuffer[0] == '#') continue;
      parse
      (
         szBuffer,
         aDataQuestRead[QUEST_TEXT],   charsmax(aDataQuestRead[QUEST_TEXT]),
         aDataQuestRead[QUEST_ANSWER], charsmax(aDataQuestRead[QUEST_ANSWER]),
         aDataQuestRead[QUEST_PRIZE], charsmax(aDataQuestRead[QUEST_PRIZE])
      );
      if(!aDataQuestRead[QUEST_TEXT]) continue;
      ArrayPushArray(g_aQuestList, aDataQuestRead);
   }
   g_iQuestListSize = ArraySize(g_aQuestList);
   fclose(file);
}
/*===== <- Файлы <- =====*///}

/*===== -> Модели -> =====*///{
models_precache()
{
   g_pModelGlass = engfunc(EngFunc_PrecacheModel, "models/glassgibs.mdl");
   engfunc(EngFunc_PrecacheModel, "models/rpgrocket.mdl");
   
   engfunc(EngFunc_PrecacheModel, g_szModels[V_PR_HAND]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_PR_HAND]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_GR_HAND]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_GR_HAND]);
   
   engfunc(EngFunc_PrecacheModel, g_szModels[V_GLOVE_RED]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_GLOVE_RED]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_GLOVE_BLUE]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_GLOVE_BLUE]);
   
   engfunc(EngFunc_PrecacheModel, g_szModels[BALL]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_HAND_BALL]);
   
   engfunc(EngFunc_PrecacheModel, g_szModels[V_RS]);
   engfunc(EngFunc_PrecacheModel, g_szModels[PARACHUTE]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_ICE]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_ICE]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_SYRINGE]);
   
   engfunc(EngFunc_PrecacheModel, g_szModels[V_SHARPENING]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_SHARPENING]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_SCREWDRIVER]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_SCREWDRIVER]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_BALISONG]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_BALISONG]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_CRIMSON]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_CRIMSON]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_STILETO]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_STILETO]);
   engfunc(EngFunc_PrecacheModel, g_szModels[V_KATANA]);
   engfunc(EngFunc_PrecacheModel, g_szModels[P_KATANA]);
   
   // Модели игроков
   for(new i = 0, szBuffer[64]; i < 11; i++)
   {
      formatex(szBuffer, charsmax(szBuffer), "models/player/%s/%s.mdl", g_szPlayerModels[i], g_szPlayerModels[i]);
      engfunc(EngFunc_PrecacheModel, szBuffer);
   }
}
/*===== <- Модели <- =====*///}

/*===== -> Звуки -> =====*///{
sounds_precache()
{
   engfunc(EngFunc_PrecacheSound, g_szSounds[HAND_HIT]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[HAND_SLASH]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[HAND_DEPLOY]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[BATON_DEPLOY]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[BATON_HITWALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[BATON_SLASH]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[BATON_STAB]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[BATON_HIT]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[BOUNCE_BALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[GRAB_BALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[KICK_BALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[WHITLE_START]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[WHITLE_END]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[CROWD]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[GLOVES_HIT]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[SUPER_HIT]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[GONG]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[GRENADE_FROST_EXPLOSION]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[FREEZE_PLAYER]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[DEFROST_PLAYER]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[SHARPENING_DEPLOY]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[SHARPENING_HITWALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[SHARPENING_SLASH]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[SHARPENING_HIT]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[SCREWDRIVER_DEPLOY]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[SCREWDRIVER_HITWALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[SCREWDRIVER_SLASH]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[SCREWDRIVER_HIT]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[BALISONG_DEPLOY]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[BALISONG_HITWALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[BALISONG_SLASH]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[BALISONG_HIT]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[CRIMSON_DEPLOY]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[CRIMSON_HITWALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[CRIMSON_SLASH]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[CRIMSON_HIT]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[KATANA_DEPLOY]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[KATANA_HITWALL]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[KATANA_SLASH]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[KATANA_HIT]);
   
   engfunc(EngFunc_PrecacheSound, g_szSounds[PRISON_RIOT]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[BUTTON_SOUND]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[MEGA_JUMP]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[FREEDAY_START]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[FREEDAY_END]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[START_END]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[RIGHT]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[COUNT]);
   engfunc(EngFunc_PrecacheSound, g_szSounds[GIVE_HOOK]);
   
   engfunc(EngFunc_PrecacheGeneric, g_szSounds[DUEL_SOUND]);
   engfunc(EngFunc_PrecacheGeneric, g_szSounds[GLOBAL_1]);
   engfunc(EngFunc_PrecacheGeneric, g_szSounds[GLOBAL_2]);
   
   for(new i = 0, szBuffer[64]; i <= 10; i++)
   {
      formatex(szBuffer, charsmax(szBuffer), "jb_engine/countdown_new/%d.wav", i);
      engfunc(EngFunc_PrecacheSound, szBuffer);
   }
   for(new i; i < sizeof(g_szHookSound); i++) precache_sound(g_szHookSound[i][1]);
   
}
/*===== <- Звуки <- =====*///}

/*===== -> Спрайты -> =====*///{
sprites_precache()
{
   g_pSpriteWave = engfunc(EngFunc_PrecacheModel, g_szSprites[ICEG]);
   g_pSpriteBeam = engfunc(EngFunc_PrecacheModel, "sprites/laserbeam.spr");
   g_pSpriteBall = engfunc(EngFunc_PrecacheModel, g_szSprites[HAS_BALL]);
   g_pSpriteDuelRed = engfunc(EngFunc_PrecacheModel, g_szSprites[DUEL_RED]);
   g_pSpriteDuelBlue = engfunc(EngFunc_PrecacheModel, g_szSprites[DUEL_BLUE]);
   g_pSpriteMegaJump = engfunc(EngFunc_PrecacheModel, g_szSprites[MEGA_JUMP_LINE]);
   for(new i = 0; i < sizeof(g_szHookSprite); i++) g_iHookSpriteEff[i] = precache_model(g_szHookSprite[i][1]);
   for(new i = 0; i < sizeof(g_szHookEnd); i++) g_iHookSpriteEnd[i] = precache_model(g_szHookEnd[i][1]);
}
/*===== <- Спрайты <- =====*///}

/*===== -> Основное -> =====*///{
main_init()
{
   register_plugin("[MJB] Core", VERSION, "Sanlerus & Hellmit & qkvander");
   register_dictionary("jbe_core.txt");
   g_iSyncMainInformer = CreateHudSyncObj();
   g_iSyncSecondInformer = CreateHudSyncObj();
   g_iSyncSoccerScore = CreateHudSyncObj();
   g_iSyncStatusText = CreateHudSyncObj();
   g_iSyncDuelInformer = CreateHudSyncObj();
   g_iSyncConnected = CreateHudSyncObj();
   g_iMaxPlayers = get_maxplayers();
   
//      set_task(QUEST_TIME, "jbe_create_quest");
   register_think(CAMERA_CLASSNAME, "fw_camera_think");
   #if defined PING_CONTROL
   set_task(15.0, "jbe_check_ping", TASK_PING_CHECK, _, _, "b");
   #endif
}

public client_putinserver(id)
{
   SetBit(g_iBitUserConnected, id);
   SetBit(g_iBitUserRoundSound, id);
   SetBit(g_iBitUserRoundEffect, id);
   SetBit(g_iBitUserButtonSound, id);
   g_iDublJump[id] = false;
   g_iPlayersNum[g_iUserTeam[id]]++;
   new iFlags = get_user_flags(id);
   if(iFlags & g_iFlagAccess[VIP]) SetBit(g_iBitUserVip, id);
   if(iFlags & g_iFlagAccess[SUPER_VIP]) SetBit(g_iBitUserSuperVip, id);
   if(iFlags & g_iFlagAccess[PREMIUM]) SetBit(g_iBitUserPremium, id);
   if(iFlags & g_iFlagAccess[ADMIN]) SetBit(g_iBitUserAdmin, id);
   if(iFlags & g_iFlagAccess[SUPER_ADMIN]) SetBit(g_iBitUserSuperAdmin, id);
   if(iFlags & g_iFlagAccess[BOSS]) SetBit(g_iBitUserBoss, id);
   if(iFlags & g_iFlagAccess[MANAGING]) SetBit(g_iBitUserManaging, id);
   if(iFlags & g_iFlagAccess[IRON]) SetBit(g_iBitUserIron, id);
   if(iFlags & g_iFlagAccess[OWNER]) SetBit(g_iBitUserOwner, id);
   if(iFlags & g_iFlagAccess[HOOK]) SetBit(g_iBitUserHook, id);
   if(iFlags & g_iFlagAccess[PREFIX]) SetBit(g_iBitUserPrefix, id);
   if(iFlags & g_iFlagAccess[MODELM]) SetBit(g_iBitUserModels, id); 
   if(iFlags & g_iFlagAccess[BUILD]) SetBit(g_iBitUserBuild, id);
   if(iFlags & g_iFlagAccess[OAIO]) SetBit(g_iBitUserOAIO, id);
   
   g_iInfoColor[id][0] = g_iInformer[COLOR_RED];
   g_iInfoColor[id][1] = g_iInformer[COLOR_GREEN];
   g_iInfoColor[id][2] = g_iInformer[COLOR_BLUE];
   
   set_task(1.0, "jbe_main_informer", id+TASK_SHOW_INFORMER_MAIN, _, _, "b");
   set_task(1.0, "jbe_second_informer", id+TASK_SHOW_INFORMER_SECOND, _, _, "b");
   set_task(1.0, "jbe_player_gametime", id+TASK_PLAYER_GAMETIME, _, _, "b");
//      set_task(1.0, "jbe_player_connect", id+TASK_PLAYER_CONNECT);
   
   g_iSvetoforColor[id] = true;
   g_iSvetoforSound = true;
   g_iChiefSteps[id] = true;
   g_iUserWarning[id] = 0;
   g_iUserQuest[id][ENABLED] = false;
   g_iUserQuest[id][INDEX] = -1;
   g_iUserQuest[id][PROGRESS] = 0;
   
   // LVL SYSTEM
   new iParams[1]; iParams[0] = id;
   get_user_authid(id, g_szSteamID[id], charsmax(g_szSteamID[]));
   format(g_szQuery, charsmax(g_szQuery), "SELECT * FROM `%s` WHERE (`%s`.`SteamID` = '%s')", g_szRankTable, g_szRankTable, g_szSteamID[id]);
   SQL_ThreadQuery(g_hDBTuple, "SQL_QueryConnection", g_szQuery, iParams, sizeof iParams);
}

public client_disconnect(id)
{
   if(IsNotSetBit(g_iBitUserConnected, id)) return;
   ClearBit(g_iBitUserConnected, id);
   remove_task(id+TASK_SHOW_INFORMER_MAIN);
   remove_task(id+TASK_SHOW_INFORMER_SECOND);
   remove_task(id+TASK_PLAYER_GAMETIME);
   if(task_exists(id+TASK_PLAYER_CONNECT)) remove_task(id+TASK_PLAYER_CONNECT);
   g_iUserCamera[id] = false;
   g_iPlayersNum[g_iUserTeam[id]]--;
   if(IsSetBit(g_iBitUserAlive, id))
   {
      g_iAlivePlayersNum[g_iUserTeam[id]]--;
      ClearBit(g_iBitUserAlive, id);
   }
   if(id == g_iChiefId)
   {
      g_iChiefId = 0;
      g_iChiefStatus = 3;
      g_szChiefName = "";
      if(g_bSoccerGame) remove_task(id+TASK_SHOW_SOCCER_SCORE);
      g_iChiefSteps[id] = false;
   }
   if(IsSetBit(g_iBitUserFree, id)) jbe_sub_user_free(id);
   if(IsSetBit(g_iBitUserWanted, id)) jbe_sub_user_wanted(id);
   if(g_iUserTeam[id] == 1)
   {
      g_iBonusHealth[id] = 0;
      g_iBonusMoney[id] = 0;
      g_iBonusGravSpeed[id] = 0;
      g_iBonusGrenade[id] = 0;
      g_iBonusGlock[id] = 0;
      g_iBonusBayonet[id] = 0;
   }
   g_iUserTeam[id] = 0;
   g_iUserMoney[id] = 0;
   g_iUserSkin[id] = 0;
   g_iBitKilledUsers[id] = 0;
   
   g_iDublJump[id] = false;
   for(new i = 1; i <= g_iMaxPlayers; i++)
   {
      if(IsNotSetBit(g_iBitKilledUsers[i], id)) continue;
      ClearBit(g_iBitKilledUsers[i], id);
   }
   if(g_eUserCostumes[id][COSTUMES]) jbe_set_user_costumes(id, 0);
   if(task_exists(id+TASK_CHANGE_MODEL)) remove_task(id+TASK_CHANGE_MODEL);
   ClearBit(g_iBitUserModel, id);
   if(task_exists(id+TASK_CHANGE_MODEL)) remove_task(id+TASK_CHANGE_MODEL);
   ClearBit(g_iBitUserFreeNextRound, id);
   ClearBit(g_iBitUserVoice, id);
   ClearBit(g_iBitUserVoiceNextRound, id);
   ClearBit(g_iBitUserHookNextRound, id);
   ClearBit(g_iBitBlockMenu, id);
   ClearBit(g_iBitUserVoteDayMode, id);
   ClearBit(g_iBitUserDayModeVoted, id);
   if(IsSetBit(g_iBitUserSoccer, id))
   {
      ClearBit(g_iBitUserSoccer, id);
      if(id == g_iSoccerBallOwner)
      {
         CREATE_KILLPLAYERATTACHMENTS(id);
         set_pev(g_iSoccerBall, pev_solid, SOLID_TRIGGER);
         set_pev(g_iSoccerBall, pev_velocity, {0.0, 0.0, 0.1});
         g_iSoccerBallOwner = 0;
      }
      if(g_bSoccerGame) remove_task(id+TASK_SHOW_SOCCER_SCORE);
   }
   ClearBit(g_iBitUserBoxing, id);
   ClearBit(g_iBitSharpening, id);
   ClearBit(g_iBitScrewdriver, id);
   ClearBit(g_iBitBalisong, id);
   ClearBit(g_iBitBayonet, id);
   ClearBit(g_iBitWeaponStatus, id);
   ClearBit(g_iBitLatchkey, id);
   ClearBit(g_iBitKokain, id);
   ClearBit(g_iBitUserBuild, id);
   ClearBit(g_iBitUserOAIO, id);
   if(task_exists(id+TASK_REMOVE_SYRINGE)) remove_task(id+TASK_REMOVE_SYRINGE);
   ClearBit(g_iBitFrostNade, id);
   ClearBit(g_iBitUserFrozen, id);
   if(task_exists(id+TASK_FROSTNADE_DEFROST)) remove_task(id+TASK_FROSTNADE_DEFROST);
   ClearBit(g_iBitClothingGuard, id);
   ClearBit(g_iBitClothingType, id);
   ClearBit(g_iBitHingJump, id);
   ClearBit(g_iBitFastRun, id);
   ClearBit(g_iBitDoubleJump, id);
   ClearBit(g_iBitRandomGlow, id);
   ClearBit(g_iBitAutoBhop, id);
   ClearBit(g_iBitDoubleDamage, id);
   ClearBit(g_iBitParachute, id);
   ClearBit(g_iBitMegaJump, id);
   ClearBit(g_iBitAura, id);
   ClearBit(g_iBitUserHook, id);
   g_iUserParaUse[id] = false;
   g_iUserParaEnt[id] = 0;
   
   if(IsSetBit(g_iBitUserVip, id))
   {
      ClearBit(g_iBitUserVip, id);
      g_iVipRespawn[id] = 0;
      g_iVipMoney[id] = 0;
      g_iVipHealth[id] = 0;
      g_iVipSpeed[id] = 0;
      g_iVipFree[id] = 0;
      g_iVipKnife[id] = 0;
   }
   if(IsSetBit(g_iBitUserSuperVip, id))
   {
      ClearBit(g_iBitUserSuperVip, id);
      g_iSuperVipRespawn[id] = 0;
      g_iSuperVipMoney[id] = 0;
      g_iSuperVipHealth[id] = 0;
      g_iSuperVipGravity[id] = 0;
      g_iSuperVipGlow[id] = 0;
      g_iSuperVipSharpening[id] = 0;
      g_iSuperVipAutobhop[id] = 0;
   }
   if(IsSetBit(g_iBitUserAdmin, id))
   {
      g_iDSpawn[id] = 0;
      g_iDGren[id] = 0;
      g_iDHealth[id] = 0;
      g_iDGrav[id] = 0;
      g_iDSpeed[id] = 0;
   }
   if(IsSetBit(g_iBitUserPremium, id))
   {
      ClearBit(g_iBitUserPremium, id);
      g_iPremiumRespawn[id] = 0;
      g_iPremiumHolo[id] = 0;
      g_iPremiumDamage[id] = 0;
      g_iPremiumGm[id] = 0;
      g_iPremiumMask[id] = 0;
      g_iPremiumMegaJump[id] = 0;
      g_iPremiumWanted[id] = 0;
      g_iPremiumStileto[id] = 0;
   }
   ClearBit(g_iBitUserAdmin, id);
   if(IsSetBit(g_iBitUserSuperAdmin, id))
   {
      ClearBit(g_iBitUserSuperAdmin, id);
      g_iSuperAdminTrail[id] = false;
      if(task_exists(id+INDEX_POSITION_TASK)) remove_task(id+INDEX_POSITION_TASK);
      g_iSuperAdminGrenade[id] = 0;
      g_iSuperAdminInvis[id] = 0;
      g_iSuperAdminMoney[id] = 0;
      g_iSuperAdminDj[id] = 0;
   }
   if(IsSetBit(g_iBitUserBoss, id))
   {
      ClearBit(g_iBitUserBoss, id);
      g_iBossAura[id] = 0;
      g_iBossBayonet[id] = 0;
      if(task_exists(id+TASK_BOSS_AURA)) remove_task(id+TASK_BOSS_AURA);
   }
   if(IsSetBit(g_iBitUserOwner, id))
   {
      ClearBit(g_iBitUserOwner, id);
      g_iOwnerMoney[id] = 0;
   }
   ClearBit(g_iBitUserIron, id);
   ClearBit(g_iBitUserManaging, id);
   ClearBit(g_iBitUserOwner, id);
   ClearBit(g_iBitHookRound, id);
   if(IsSetBit(g_iBitUserHookTime, id))
   {
      ClearBit(g_iBitUserHookTime, id);
      g_iHookTimeNum--;
   }
   ClearBit(g_iBitUserPrefix, id);
   ClearBit(g_iBitUserModels, id);
   if(g_iDuelStatus && IsSetBit(g_iBitUserDuel, id)) jbe_duel_ended(id);
   #if defined OLD_WEAPONS_GUARD
   ClearBit(g_iBitUserAutoWeapon, id);
   #endif
   
   g_iSvetoforColor[id] = false;
   if(g_bGuardStatus && g_iBossStatusTrue[1] == id)
   {
      UTIL_SayText(0, "%L %L", LANG_PLAYER, "JBE_CHAT_PREFIX", LANG_PLAYER, "JBE_CHAT_ALL_BOSS_OFF_SHOP_ON");
      g_iBossStatusTrue[1] = 0;
      g_bGuardStatus = false;
   }
   if(g_bShopStatus && g_iBossStatusTrue[0] == id)
   {
      UTIL_SayText(0, "%L %L", LANG_PLAYER, "JBE_CHAT_PREFIX", LANG_PLAYER, "JBE_CHAT_ALL_BOSS_OFF_GUARD_ON");
      g_iBossStatusTrue[0] = 0;
      g_bShopStatus = false;
   }
   if(g_bHookStatus && g_iBossStatusTrue[2] == id)
   {
      UTIL_SayText(0, "%L %L", LANG_PLAYER, "JBE_CHAT_PREFIX", LANG_PLAYER, "JBE_CHAT_ALL_BOSS_OFF_HOOK_ON");
      g_iBossStatusTrue[2] = 0;
      g_bHookStatus = false;
   }
   
   // LVL SYSTEM
   format(g_szQuery, charsmax(g_szQuery), "UPDATE `%s` SET `user_level` = '%i', `user_exp` = '%i' WHERE `%s`.`SteamID` = '%s';", g_szRankTable, g_iLevel[id], g_iExpName[id], g_szRankTable, g_szSteamID[id]);
   SQL_ThreadQuery(g_hDBTuple, "ThreadQueryHandler", g_szQuery);
   g_iLevel[id] = 0;
   g_iExpName[id] = 0;
   
   g_iPlayer_GameTime[id] = 0;
   g_iUserModel[id] = 0;
   g_iUserBet[id] = 0;
   g_iUserBetId[id] = 0;
   ClearBit(g_iBitUserBet, id);
}

#if defined PING_CONTROL
public jbe_check_ping()
{
   static i, iPing, iLoss;
   for(i = 1; i <= g_iMaxPlayers; i++)
   {
      if(IsNotSetBit(g_iBitUserConnected, i)) continue;
      
      get_user_ping(i, iPing, iLoss);
      if(iPing > float(g_iAllCvars[MAX_PING]))
      {
         if(++g_iUserWarning[i] >= 3)
         {
            new szName[32];
            get_user_name(i, szName, charsmax(szName));
            UTIL_SayText(0, "%L %L", LANG_PLAYER, "JBE_CHAT_PREFIX", LANG_PLAYER, "JBE_CHAT_ALL_KICK_OF_PING", szName);
            server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(i));           
         }
      }   
      else if(g_iUserWarning[i]) g_iUserWarning[i]--;
   }
}
#endif

public jbe_player_gametime(pPlayer)
{
   pPlayer -= TASK_PLAYER_GAMETIME;
   
   g_iPlayer_GameTime[pPlayer]++;
}

/*===== <- Основное <- =====*///}

/*===== -> Квары -> =====*///{
cvars_init()
{
   register_cvar("jbe_pn_price_sharpening", "250");
   register_cvar("jbe_pn_price_screwdriver", "200");
   register_cvar("jbe_pn_price_balisong", "320");
   register_cvar("jbe_pn_price_stileto", "600");
   register_cvar("jbe_pn_price_katana", "777");
   register_cvar("jbe_pn_price_usp", "400");
   register_cvar("jbe_pn_price_deagle", "420");
   register_cvar("jbe_pn_price_hegrenade", "120");
   register_cvar("jbe_pn_price_latchkey", "150");
   register_cvar("jbe_pn_price_flashbang", "80");
   register_cvar("jbe_pn_price_kokain", "200");
   register_cvar("jbe_pn_price_stimulator", "230");
   register_cvar("jbe_pn_price_frostnade", "170");
   register_cvar("jbe_pn_price_armor", "70");
   register_cvar("jbe_pn_price_clothing_guard", "300");
   register_cvar("jbe_pn_price_fast_run", "240");
   register_cvar("jbe_pn_price_double_jump", "280");
   register_cvar("jbe_pn_price_random_glow", "100");
   register_cvar("jbe_pn_price_auto_bhop", "180");
   register_cvar("jbe_pn_price_double_damage", "250");
   register_cvar("jbe_pn_price_low_gravity", "220");
   register_cvar("jbe_pn_price_close_case", "250");
   register_cvar("jbe_pn_price_free_day", "300");
   register_cvar("jbe_pn_price_resolution_voice", "400");
   register_cvar("jbe_pn_price_prank_prisoner", "350");
   register_cvar("jbe_pn_price_parachute", "200");
   register_cvar("jbe_gr_price_stimulator", "230");
   register_cvar("jbe_gr_price_random_glow", "100");
   register_cvar("jbe_gr_price_kokain", "200");
   register_cvar("jbe_gr_price_double_jump", "280");
   register_cvar("jbe_gr_price_fast_run", "240");
   register_cvar("jbe_gr_price_low_gravity", "250");
   register_cvar("jbe_gr_price_parachute", "200");
   
   register_cvar("jbe_free_day_id_time", "120");
   register_cvar("jbe_free_day_all_time", "240");
   register_cvar("jbe_team_balance", "4");
   register_cvar("jbe_day_mode_vote_time", "15");
   register_cvar("jbe_restart_game_time", "40");
   register_cvar("jbe_riot_start_money", "30");
   register_cvar("jbe_killed_guard_money", "40");
   register_cvar("jbe_killed_chief_money", "65");
   register_cvar("jbe_round_free_money", "10");
   register_cvar("jbe_round_alive_money", "20");
   register_cvar("jbe_last_prisoner_money", "300");
   register_cvar("jbe_last_prisoner_exp", "10");
   register_cvar("jbe_night_discount_shop", "5");
   register_cvar("jbe_max_ping", "150");
   register_cvar("jbe_last_prisoner_timer", "20");
   register_cvar("jbe_bonus_health_round", "2");
   register_cvar("jbe_bonus_health_num", "70");
   register_cvar("jbe_bonus_money_round", "3");
   register_cvar("jbe_bonus_money_num", "150");
   register_cvar("jbe_bonus_gravspeed_round", "3");
   register_cvar("jbe_bonus_grenade_round", "4");
   register_cvar("jbe_bonus_glock_round", "6");
   register_cvar("jbe_bonus_bayonet_round", "5");
   
   register_cvar("jbe_respawn_players_num", "3");
   register_cvar("jbe_vip_discount_shop", "10");
   register_cvar("jbe_vip_respawn_num", "2");
   register_cvar("jbe_vip_money_round", "3");
   register_cvar("jbe_vip_money_num", "200");
   register_cvar("jbe_vip_health_round", "2");
   register_cvar("jbe_vip_health_num", "70");
   register_cvar("jbe_vip_speed_round", "3");
   register_cvar("jbe_vip_free_round", "5");
   register_cvar("jbe_vip_voice_round", "1");
   register_cvar("jbe_super_vip_discount_shop", "20");
   register_cvar("jbe_super_vip_respawn_num", "2");
   register_cvar("jbe_super_vip_money_round", "4");
   register_cvar("jbe_super_vip_money_num", "260");
   register_cvar("jbe_super_vip_health_round", "3");
   register_cvar("jbe_super_vip_health_num", "80");
   register_cvar("jbe_super_vip_gravity_round", "3");
   register_cvar("jbe_super_vip_glow_round", "2");
   register_cvar("jbe_super_vip_sharpening_round", "4");
   register_cvar("jbe_super_vip_autobhop_round", "3");
   register_cvar("jbe_d_spawn", "1");
   register_cvar("jbe_d_gren", "2");    
   register_cvar("jbe_d_health", "2");    
   register_cvar("jbe_d_grav", "1");    
   register_cvar("jbe_d_speed", "1");
   register_cvar("jbe_premium_respawn_num", "5");
   register_cvar("jbe_premium_holo_round", "2");
   register_cvar("jbe_premium_damage_round", "3");
   register_cvar("jbe_premium_gm_round", "5");
   register_cvar("jbe_premium_mask_round", "3");
   register_cvar("jbe_premium_mega_jump_round", "2");
   register_cvar("jbe_premium_wanted_round", "3");
   register_cvar("jbe_premium_stileto_round", "3");
   register_cvar("jbe_boss_aura_round", "2");
   register_cvar("jbe_boss_bayonet_round", "3");
   register_cvar("jbe_super_admin_grenade_round", "3");
   register_cvar("jbe_super_admin_invis_round", "2");
   register_cvar("jbe_super_admin_money_round", "4");
   register_cvar("jbe_super_admin_money_num", "260");
   register_cvar("jbe_super_admin_dj", "2");
   register_cvar("jbe_owner_money_num", "100000");
   register_cvar("jbe_owner_money_round", "5");
   
   // LVL SYSTEM
   register_cvar("jbe_sql_host", "");
   register_cvar("jbe_sql_user", "");
   register_cvar("jbe_sql_password", "");
   register_cvar("jbe_sql_database", "");
   register_cvar("jbe_sql_table", "");
   register_cvar("jbe_rank_kill_ct", "2");
   register_cvar("jbe_rank_kill_chief", "4");
   register_cvar("jbe_rank_riot_start", "1");
   register_cvar("jbe_rank_kill_tt", "1");
   register_cvar("jbe_rank_kill_wanted", "2");
   register_cvar("jbe_rank_money_bonus", "5");
   register_cvar("jbe_rank_health_bonus", "5");
   register_cvar("jbe_rank_players_need", "8");
}

public plugin_cfg()
{
   
   new szIp[25];
   get_user_ip(0, szIp, charsmax(szIp), 1);

   new szCfgDir[64];
   get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
   server_cmd("exec %s/jb_engine/cfg/shop_cvars.cfg", szCfgDir);
   server_cmd("exec %s/jb_engine/cfg/all_cvars.cfg", szCfgDir);
   server_cmd("exec %s/jb_engine/cfg/lvl_cvars.cfg", szCfgDir);
   server_cmd("exec %s/jb_engine/cfg/donate_cvars.cfg", szCfgDir);
   set_task(0.1, "jbe_get_cvars");
}

public jbe_get_cvars()
{
   g_iShopCvars[SHARPENING] = get_cvar_num("jbe_pn_price_sharpening");
   g_iShopCvars[SCREWDRIVER] = get_cvar_num("jbe_pn_price_screwdriver");
   g_iShopCvars[BALISONG] = get_cvar_num("jbe_pn_price_balisong");
   g_iShopCvars[STILETO] = get_cvar_num("jbe_pn_price_stileto");
   g_iShopCvars[KATANA] = get_cvar_num("jbe_pn_price_katana");
   g_iShopCvars[USP] = get_cvar_num("jbe_pn_price_usp");
   g_iShopCvars[DEAGLE] = get_cvar_num("jbe_pn_price_deagle");
   g_iShopCvars[HEGRENADE] = get_cvar_num("jbe_pn_price_hegrenade");
   g_iShopCvars[LATCHKEY] = get_cvar_num("jbe_pn_price_latchkey");
   g_iShopCvars[FLASHBANG] = get_cvar_num("jbe_pn_price_flashbang");
   g_iShopCvars[KOKAIN] = get_cvar_num("jbe_pn_price_kokain");
   g_iShopCvars[STIMULATOR] = get_cvar_num("jbe_pn_price_stimulator");
   g_iShopCvars[FROSTNADE] = get_cvar_num("jbe_pn_price_frostnade");
   g_iShopCvars[ARMOR] = get_cvar_num("jbe_pn_price_armor");
   g_iShopCvars[CLOTHING_GUARD] = get_cvar_num("jbe_pn_price_clothing_guard");
   g_iShopCvars[FAST_RUN] = get_cvar_num("jbe_pn_price_fast_run");
   g_iShopCvars[DOUBLE_JUMP] = get_cvar_num("jbe_pn_price_double_jump");
   g_iShopCvars[RANDOM_GLOW] = get_cvar_num("jbe_pn_price_random_glow");
   g_iShopCvars[AUTO_BHOP] = get_cvar_num("jbe_pn_price_auto_bhop");
   g_iShopCvars[DOUBLE_DAMAGE] = get_cvar_num("jbe_pn_price_double_damage");
   g_iShopCvars[LOW_GRAVITY] = get_cvar_num("jbe_pn_price_low_gravity");
   g_iShopCvars[CLOSE_CASE] = get_cvar_num("jbe_pn_price_close_case");
   g_iShopCvars[FREE_DAY_SHOP] = get_cvar_num("jbe_pn_price_free_day");
   g_iShopCvars[RESOLUTION_VOICE] = get_cvar_num("jbe_pn_price_resolution_voice");
   g_iShopCvars[PRANK_PRISONER] = get_cvar_num("jbe_pn_price_prank_prisoner");
   g_iShopCvars[PARACHUTE_PN] = get_cvar_num("jbe_pn_price_parachute");
   g_iShopCvars[STIMULATOR_GR] = get_cvar_num("jbe_gr_price_stimulator");
   g_iShopCvars[RANDOM_GLOW_GR] = get_cvar_num("jbe_gr_price_random_glow");
   g_iShopCvars[KOKAIN_GR] = get_cvar_num("jbe_gr_price_kokain");
   g_iShopCvars[DOUBLE_JUMP_GR] = get_cvar_num("jbe_gr_price_double_jump");
   g_iShopCvars[FAST_RUN_GR] = get_cvar_num("jbe_gr_price_fast_run");
   g_iShopCvars[LOW_GRAVITY_GR] = get_cvar_num("jbe_gr_price_low_gravity");
   g_iShopCvars[PARACHUTE_GR] = get_cvar_num("jbe_gr_price_parachute");
   
   g_iAllCvars[FREE_DAY_ID] = get_cvar_num("jbe_free_day_id_time");
   g_iAllCvars[FREE_DAY_ALL] = get_cvar_num("jbe_free_day_all_time");
   g_iAllCvars[TEAM_BALANCE] = get_cvar_num("jbe_team_balance");
   g_iAllCvars[DAY_MODE_VOTE_TIME] = get_cvar_num("jbe_day_mode_vote_time");
   g_iAllCvars[RESTART_GAME_TIME] = get_cvar_num("jbe_restart_game_time");
   g_iAllCvars[RIOT_START_MONEY] = get_cvar_num("jbe_riot_start_money");
   g_iAllCvars[KILLED_GUARD_MONEY] = get_cvar_num("jbe_killed_guard_money");
   g_iAllCvars[KILLED_CHIEF_MONEY] = get_cvar_num("jbe_killed_chief_money");
   g_iAllCvars[ROUND_FREE_MONEY] = get_cvar_num("jbe_round_free_money");
   g_iAllCvars[ROUND_ALIVE_MONEY] = get_cvar_num("jbe_round_alive_money");
   g_iAllCvars[LAST_PRISONER_MONEY] = get_cvar_num("jbe_last_prisoner_money");
   g_iAllCvars[LAST_PRISONER_EXP] = get_cvar_num("jbe_last_prisoner_exp");
   g_iAllCvars[NIGHT_DISCOUNT_SHOP] = get_cvar_num("jbe_night_discount_shop");
   g_iAllCvars[MAX_PING] = get_cvar_num("jbe_max_ping");
   g_iAllCvars[LAST_PR_TIMER] = get_cvar_num("jbe_last_prisoner_timer");
   g_iAllCvars[BONUS_HEALTH_ROUND] = get_cvar_num("jbe_bonus_health_round");
   g_iAllCvars[BONUS_HEALTH_NUM] = get_cvar_num("jbe_bonus_health_num");
   g_iAllCvars[BONUS_MONEY_ROUND] = get_cvar_num("jbe_bonus_money_round");
   g_iAllCvars[BONUS_MONEY_NUM] = get_cvar_num("jbe_bonus_money_num");
   g_iAllCvars[BONUS_GRAVSPEED_ROUND] = get_cvar_num("jbe_bonus_gravspeed_round");
   g_iAllCvars[BONUS_GRENADE_ROUND] = get_cvar_num("jbe_bonus_grenade_round");
   g_iAllCvars[BONUS_GLOCK_ROUND] = get_cvar_num("jbe_bonus_glock_round");
   g_iAllCvars[BONUS_BAYONET_ROUND] = get_cvar_num("jbe_bonus_bayonet_round");
   
   g_iDonateCvars[RESPAWN_PLAYERS_NUM] = get_cvar_num("jbe_respawn_players_num");
   g_iDonateCvars[VIP_DISCOUNT_SHOP] = get_cvar_num("jbe_vip_discount_shop");
   g_iDonateCvars[VIP_RESPAWN_NUM] = get_cvar_num("jbe_vip_respawn_num");
   g_iDonateCvars[VIP_MONEY_ROUND] = get_cvar_num("jbe_vip_money_round");
   g_iDonateCvars[VIP_MONEY_NUM] = get_cvar_num("jbe_vip_money_num");
   g_iDonateCvars[VIP_HEALTH_ROUND] = get_cvar_num("jbe_vip_health_round");
   g_iDonateCvars[VIP_HEALTH_NUM] = get_cvar_num("jbe_vip_health_num");
   g_iDonateCvars[VIP_SPEED_ROUND] = get_cvar_num("jbe_vip_speed_round");
   g_iDonateCvars[VIP_FREE_ROUND] = get_cvar_num("jbe_vip_free_round");
   g_iDonateCvars[VIP_VOICE_ROUND] = get_cvar_num("jbe_vip_voice_round");
   g_iDonateCvars[SUPER_VIP_DISCOUNT_SHOP] = get_cvar_num("jbe_super_vip_discount_shop");
   g_iDonateCvars[SUPER_VIP_RESPAWN_NUM] = get_cvar_num("jbe_super_vip_respawn_num");
   g_iDonateCvars[SUPER_VIP_MONEY_ROUND] = get_cvar_num("jbe_super_vip_money_round");
   g_iDonateCvars[SUPER_VIP_MONEY_NUM] = get_cvar_num("jbe_super_vip_money_num");
   g_iDonateCvars[SUPER_VIP_HEALTH_ROUND] = get_cvar_num("jbe_super_vip_health_round");
   g_iDonateCvars[SUPER_VIP_HEALTH_NUM] = get_cvar_num("jbe_super_vip_health_num");
   g_iDonateCvars[SUPER_VIP_GRAVITY_ROUND] = get_cvar_num("jbe_super_vip_gravity_round");
   g_iDonateCvars[SUPER_VIP_GLOW_ROUND] = get_cvar_num("jbe_super_vip_glow_round");
   g_iDonateCvars[SUPER_VIP_SHARPENING_ROUND] = get_cvar_num("jbe_super_vip_sharpening_round");
   g_iDonateCvars[SUPER_VIP_AUTOBHOP_ROUND] = get_cvar_num("jbe_super_vip_autobhop_round");
   g_iDonateCvars[D_SPAWN] = get_cvar_num("jbe_d_spawn");
   g_iDonateCvars[D_GREN] = get_cvar_num("jbe_d_gren");      
   g_iDonateCvars[D_HEALTH] = get_cvar_num("jbe_d_health");   
   g_iDonateCvars[D_GRAV] = get_cvar_num("jbe_d_grav");            
   g_iDonateCvars[D_SPEED] = get_cvar_num("jbe_d_speed");
   g_iDonateCvars[PREMIUM_RESPAWN_NUM] = get_cvar_num("jbe_premium_respawn_num");
   g_iDonateCvars[PREMIUM_HOLO_ROUND] = get_cvar_num("jbe_premium_holo_round");
   g_iDonateCvars[PREMIUM_DAMAGE_ROUND] = get_cvar_num("jbe_premium_damage_round");
   g_iDonateCvars[PREMIUM_GM_ROUND] = get_cvar_num("jbe_premium_gm_round");
   g_iDonateCvars[PREMIUM_MASK_ROUND] = get_cvar_num("jbe_premium_mask_round");
   g_iDonateCvars[PREMIUM_MEGA_JUMP_ROUND] = get_cvar_num("jbe_premium_mega_jump_round");
   g_iDonateCvars[PREMIUM_WANTED_ROUND] = get_cvar_num("jbe_premium_wanted_round");
   g_iDonateCvars[PREMIUM_STILETO_ROUND] = get_cvar_num("jbe_super_vip_sharpening_round");
   g_iDonateCvars[BOSS_AURA_ROUND] = get_cvar_num("jbe_boss_aura_round");
   g_iDonateCvars[BOSS_BAYONET_ROUND] = get_cvar_num("jbe_boss_bayonet_round");
   g_iDonateCvars[SUPER_ADMIN_GRENADE_ROUND] = get_cvar_num("jbe_super_admin_grenade_round");
   g_iDonateCvars[SUPER_ADMIN_INVIS_ROUND] = get_cvar_num("jbe_super_admin_invis_round");
   g_iDonateCvars[SUPER_ADMIN_MONEY_ROUND] = get_cvar_num("jbe_super_admin_money_round");
   g_iDonateCvars[SUPER_ADMIN_MONEY_NUM] = get_cvar_num("jbe_super_admin_money_num");
   g_iDonateCvars[SUPER_ADMIN_DJ] = get_cvar_num("jbe_super_admin_dj");
   g_iDonateCvars[OWNER_MONEY_NUM] = get_cvar_num("jbe_owner_money_num");
   g_iDonateCvars[OWNER_MONEY_ROUND] = get_cvar_num("jbe_owner_money_round");
   
   // LVL SYSTEM
   g_iLevelCvars[KILL_CT] = get_cvar_num("jbe_rank_kill_ct");
   g_iLevelCvars[KILL_CHIEF] = get_cvar_num("jbe_rank_kill_chief");
   g_iLevelCvars[RIOT_START] = get_cvar_num("jbe_rank_riot_start");
   g_iLevelCvars[KILL_TT] = get_cvar_num("jbe_rank_kill_tt");
   g_iLevelCvars[KILL_WT] = get_cvar_num("jbe_rank_kill_wanted");
   g_iLevelCvars[MONEY_BONUS] = get_cvar_num("jbe_rank_money_bonus");
   g_iLevelCvars[HEALTH_BONUS] = get_cvar_num("jbe_rank_health_bonus");
   g_iLevelCvars[PLAYERS_NEED] = get_cvar_num("jbe_rank_players_need");
   
   get_cvar_string("jbe_sql_host", g_szRankHost, charsmax(g_szRankHost));
   get_cvar_string("jbe_sql_user",   g_szRankUser, charsmax(g_szRankUser));
   get_cvar_string("jbe_sql_password", g_szRankPassword, charsmax(g_szRankPassword));
   get_cvar_string("jbe_sql_database", g_szRankDataBase, charsmax(g_szRankDataBase));
   get_cvar_string("jbe_sql_table", g_szRankTable, charsmax(g_szRankTable));
   
   new szError[512], iErrorCode;
   g_hDBTuple = SQL_MakeDbTuple(g_szRankHost, g_szRankUser, g_szRankPassword, g_szRankDataBase);
   g_hConnect = SQL_Connect(g_hDBTuple, iErrorCode, szError, charsmax(szError));
   
   new Handle:Queries;
   new Query[1024];
   format(Query, 1023, "CREATE TABLE IF NOT EXISTS `%s` (SteamID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, user_level INT NOT NULL, user_exp INT NOT NULL)", g_szRankTable);

      Queries = SQL_PrepareQuery(g_hConnect, Query);
   if(!SQL_Execute(Queries))
   {
      SQL_QueryError(Queries, szError, charsmax(szError));
   }
   SQL_FreeHandle(Queries);
Помощь в индустрии CS 1.6
Продажа личных плагинов/сборок - vk.com/qkvander

Привет!
Аватара пользователя
qkvanderr
 
Сообщения: 1
Зарегистрирован: 29 авг 2019, 17:37
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Опыт программирования: Меньше месяца
Языки программирования: С++, SMALL, HTML

Re: Проблема с db на моде jbe_

Сообщение Ragamafona » 14 июл 2021, 03:27

Автор мода - Hellmith

Брехня ;)

Если говорить о деле, тогда нужно знать в чем ошибка, а её нет.
-> Разработка различных модификаций для CS 1.6.
https://vk.com/ragashop

-> Мои контакты
VK: https://vk.com/felhalas
Telegram: https://t.me/nikolaygaus
Discord: Ragamafona#7101

пс на счет телеги: Лучше сразу писать по делу.
Аватара пользователя
Ragamafona
 
Сообщения: 68
Зарегистрирован: 15 янв 2018, 16:54
Откуда: Україна
Благодарил (а): 0 раз.
Поблагодарили: 19 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn
C++
C#


Вернуться в Вопросы по AMXX и его плагинам

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8