Не компилируется

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
49
Реакции
0
Предупреждения
5
Ошибка
Не компилируется
Компилятор
Локальный
Amx Mod X
1.9.0
Исходный код
#include <amxmodx>
#include <reapi>
#include <json>
#include <hamsandwich>
#include <VipM/ItemsController>

#define MAP_NAME_MAX_LEN 32
#define PLUGIN_NAME_MAX_LEN 64

enum (+= 100) {
TASK_RESTARTS_AFTER_WARMUP,
TASK_WARMUP_END,
TASK_TIMER,
}

enum _:S_WarmupMode {
WM_Title[64],
// TODO: WM_Duration, // Разная длительность у разных режимов
WM_Music[PLATFORM_MAX_PATH],
// TODO: WM_Cvars[S_CvarData], // Переопределение кваров на время разминки
Array:WM_Items,
}

enum E_Cvars {
Cvar_Duration,
Cvar_RestartsNum,
Float:Cvar_RestartInterval,
bool:Cvar_DisableStats,
bool:Cvar_CleanupMap,
bool:Cvar_WeaponsPickupBlock,
bool:Cvar_OncePerMap,
bool:Cvar_StartAfterSvRestart,

bool:Cvar_DeathMatch_Enable,
Cvar_DeathMatch_SpawnProtectionDuration,
}
new g_Cvars[E_Cvars];
#define Cvar(%1) g_Cvars[Cvar_%1]

#define Lang(%1) fmt("%l", %1)

new bool:g_bDebug = false;
new g_sDebugFilePath[PLATFORM_MAX_PATH];

new HookChain:fwd_RRound;

new HamHook:fwd_Equip,
HamHook:fwd_WpnStrip,
HamHook:fwd_Entity;

new HookChain:fwd_NewRound,
HookChain:fwd_RoundEnd,
HookChain:fwd_BlockEntity,
HookChain:fwd_Spawn,
HookChain:fwd_GiveC4;

new g_iHud_Stats, g_iHud_Timer;

new Array:g_aDisablePlugins = Invalid_Array;
new Array:g_aMusic = Invalid_Array;

new bool:g_bWarupInProgress = false;
new Array:g_aModes = Invalid_Array;

new g_SelectedMode[S_WarmupMode];

new fwOnStarted;
new fwOnFinished;

new g_iTimer = -1;

public plugin_precache() {
register_plugin("Random Weapons WarmUP", "3.3.1", "neugomon/h1k3/ArKaNeMaN");
register_dictionary("rww.ini");
InitDebug();

if (IsMapIgnored()) {
log_amx("[INFO] WarmUP disabled on this map.");
pause("ad");
return;
}

VipM_IC_Init();

DisablePluginsLoad();
WarmupModesLoad();
MusicLoad();
RegisterCvars();

fwOnStarted = CreateMultiForward("RWW_OnStarted", ET_IGNORE);
fwOnFinished = CreateMultiForward("RWW_OnFinished", ET_IGNORE);

EnableHookChain(fwd_RoundEnd = RegisterHookChain(RG_RoundEnd, "fwdRoundEnd", true));
DisableHookChain(fwd_NewRound = RegisterHookChain(RG_CSGameRules_CheckMapConditions, "fwdRoundStart", false));
DisableHookChain(fwd_Spawn = RegisterHookChain(RG_CBasePlayer_Spawn, "fwdPlayerSpawnPost", true));
DisableHookChain(fwd_GiveC4 = RegisterHookChain(RG_CSGameRules_GiveC4, "fwdGiveC4", false));
DisableHookChain(fwd_BlockEntity = RegisterHookChain(RG_CBasePlayer_HasRestrictItem, "fwdHasRestrictItemPre", false));
DisableHookChain(fwd_RRound = RegisterHookChain(RG_CSGameRules_RestartRound, "fwdRestartRound_Pre"));

DisableHamForward(fwd_Equip = RegisterHam(Ham_Use, "game_player_equip", "CGamePlayerEquip_Use", false));
DisableHamForward(fwd_WpnStrip = RegisterHam(Ham_Use, "player_weaponstrip", "CStripWeapons_Use", false));
DisableHamForward(fwd_Entity = RegisterHam(Ham_CS_Restart, "armoury_entity", "CArmoury_Restart", false));

register_clcmd("drop", "ClCmd_Drop");

g_iHud_Stats = CreateHudSyncObj();
g_iHud_Timer = CreateHudSyncObj();

g_bWarupInProgress = false;
}

public plugin_end() {
if (g_bWarupInProgress) {
finishWarmUp();
}
}

public fwdHasRestrictItemPre() {
SetHookChainReturn(ATYPE_BOOL, true);
return HC_SUPERCEDE;
}

public ClCmd_Drop() {
return (g_bWarupInProgress && Cvar(WeaponsPickupBlock))
? PLUGIN_HANDLED
: PLUGIN_CONTINUE;
}

public fwdRoundEnd(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay) {
if (g_bWarupInProgress) {

return;
}

static bool:bWasStarted;

if (Cvar(OncePerMap) && bWasStarted) {
return;
}

if (
event == ROUND_GAME_COMMENCE
|| (Cvar(StartAfterSvRestart) && event == ROUND_GAME_RESTART)
) {
ExecuteForward(fwOnStarted);
bWasStarted = true;
g_bWarupInProgress = true;

// Выключаем, т.к. далее будет рестарт с commence
// Чтобы оно не сработало ещё раз
DisableHookChain(fwd_RoundEnd);

// Включаем хук нового раунда, чтобы при рестарте строкой ниже началась разминка
EnableHookChain(fwd_NewRound);

RestartGame();
}
}

public fwdRoundStart() {
RemoveAllTasks();

if (Cvar(CleanupMap)) {
DebugLog(" *clean map*");
EnableHamForward(fwd_Equip);
EnableHamForward(fwd_WpnStrip);
EnableHamForward(fwd_Entity);
}

// До следующей разминки оно нам не надо
// Поэтому выключаем
DisableHookChain(fwd_NewRound);

EnableHookChain(fwd_RRound);
EnableHookChain(fwd_Spawn);
EnableHookChain(fwd_GiveC4);

set_cvar_num("mp_forcerespawn", Cvar(DeathMatch_Enable));
set_cvar_num("mp_respawn_immunitytime", Cvar(DeathMatch_SpawnProtectionDuration));

if (Cvar(DeathMatch_Enable)) {
set_cvar_num("mp_round_infinite", 1);

g_iTimer = Cvar(Duration);
set_task(1.0, "Show_Timer", TASK_TIMER, .flags = "a", .repeat = Cvar(Duration));
} else {
set_task(1.0, "Hud_Message", TASK_TIMER, .flags = "a", .repeat = 25 );
}

if (Cvar(DisableStats)) {
set_cvar_num("csstats_pause", 1);
}

if (Cvar(WeaponsPickupBlock)) {
EnableHookChain(fwd_BlockEntity);
}

PluginController(true);

new rnd = random_num(0, ArraySize(g_aModes) - 1);
ArrayGetArray(g_aModes, rnd, g_SelectedMode);
DebugLog(" rnd = %d (%s)", rnd, g_SelectedMode[WM_Title]);

PlayWarmupMusic();
}

PlayWarmupMusic() {
if (g_SelectedMode[WM_Music][0]) {
client_cmd(0, "mp3 play ^"%s^"", g_SelectedMode[WM_Music]);
} else if (g_aMusic != Invalid_Array && ArraySize(g_aMusic)) {
new sMusicPath[PLATFORM_MAX_PATH];
ArrayGetString(g_aMusic, random_num(0, ArraySize(g_aMusic) - 1), sMusicPath, charsmax(sMusicPath));
client_cmd(0, "mp3 play ^"%s^"", sMusicPath);
}
}

public fwdPlayerSpawnPost(const id) {
// DebugLog("fwdPlayerSpawnPost(%d(%n)) [begin]", id, id);

if (!is_user_alive(id)) {
// DebugLog(" *player is dead*");
return;
}

if (Cvar(CleanupMap)) {
// DebugLog(" *InvisibilityArmourys*");
InvisibilityArmourys();
}

BuyZone_ToogleSolid(SOLID_NOT);
rg_remove_all_items(id);
set_member_game(m_bMapHasBuyZone, true);

// А надо ли выдавать нож, если это явно не указано в кфг?
rg_give_item(id, "weapon_knife");

VipM_IC_GiveItems(id, g_SelectedMode[WM_Items]);

// DebugLog("fwdPlayerSpawnPost(%d(%n)) [end]", id, id);
}

public fwdGiveC4() {
// DebugLog("fwdGiveC4()");
SetHookChainReturn(ATYPE_INTEGER, 0);
return HC_SUPERCEDE;
}

public Show_Timer() {
DebugLog("Show_Timer() [begin]");

if (--g_iTimer <= 0) {
DebugLog(" *finishWarmUp (--g_iTimer == 0)*");
finishWarmUp();

DebugLog("Show_Timer() [end]");
return;
}
DebugLog(" --g_iTimer = %d", g_iTimer);

if (Cvar(DisableStats)) {
DebugLog(" *show disable stats hud*");
set_hudmessage(255, 0, 0, .x = -1.0, .y = 0.05, .holdtime = 0.9, .channel = -1);
ShowSyncHudMsg(0, g_iHud_Stats, "%l", "RWW_HUD_STATS_OFF");
}

set_hudmessage(135, 206, 235, .x = -1.0, .y = 0.08, .holdtime = 0.9, .channel = -1);
ShowSyncHudMsg(0, g_iHud_Timer, "%l", "RWW_HUD_DM_TIMER", g_SelectedMode[WM_Title], g_iTimer);

DebugLog("Show_Timer() [end]");
}

public fwdRestartRound_Pre() {
DebugLog("fwdRestartRound_Pre()");
finishWarmUp();
}

public Hud_Message() {
if (Cvar(DisableStats)) {
set_hudmessage(255, 0, 0, .x = -1.0, .y = 0.05, .holdtime = 0.9, .channel = -1);
ShowSyncHudMsg(0, g_iHud_Stats, "%l", "RWW_HUD_STATS_OFF");
}

set_hudmessage(135, 206, 235, .x = -1.0, .y = 0.08, .holdtime = 0.9, .channel = -1);
ShowSyncHudMsg(0, g_iHud_Timer, "%l", "RWW_HUD_NOT_DM", g_SelectedMode[WM_Title]);
}

public CArmoury_Restart(const pArmoury) {
return HAM_SUPERCEDE;
}

public CGamePlayerEquip_Use() {
return HAM_SUPERCEDE;
}

public CStripWeapons_Use() {
return HAM_SUPERCEDE;
}

InvisibilityArmourys() {
new pArmoury = NULLENT;
while ((pArmoury = rg_find_ent_by_class(pArmoury, "armoury_entity"))) {
if (get_member(pArmoury, m_Armoury_iCount) > 0) {
set_entvar(pArmoury, var_effects, get_entvar(pArmoury, var_effects) | EF_NODRAW);
set_entvar(pArmoury, var_solid, SOLID_NOT);
set_member(pArmoury, m_Armoury_iCount, 0);
}
}
}

finishWarmUp() {
g_bWarupInProgress = false;
RemoveAllTasks();

BuyZone_ToogleSolid(SOLID_TRIGGER);
if (Cvar(CleanupMap)) {
DisableHamForward(fwd_Equip);
DisableHamForward(fwd_WpnStrip);
DisableHamForward(fwd_Entity);
}

DisableHookChain(fwd_Spawn);
DisableHookChain(fwd_GiveC4);
DisableHookChain(fwd_RRound);

set_cvar_num("mp_forcerespawn", 0);
set_cvar_num("mp_respawn_immunitytime", 0);
set_cvar_num("mp_round_infinite", 0);

if (Cvar(DisableStats)) {
set_cvar_num("csstats_pause", 0);
}

if (Cvar(WeaponsPickupBlock)) {
DisableHookChain(fwd_BlockEntity);
}

PluginController(false);

ExecuteForward(fwOnFinished);

@Task_Restart();
if (Cvar(RestartsNum) > 1) {
set_task(Cvar(RestartInterval), "@Task_Restart", TASK_RESTARTS_AFTER_WARMUP, .flags = "a", .repeat = Cvar(RestartsNum) - 1);
}
set_task(Cvar(RestartInterval) * float(Cvar(RestartsNum) - 1) + 0.1, "@Task_WarmupEnd", TASK_WARMUP_END);
}

RemoveAllTasks() {
remove_task(TASK_RESTARTS_AFTER_WARMUP);
remove_task(TASK_WARMUP_END);
remove_task(TASK_TIMER);
}

@Task_Restart() {
DebugLog("Task_Restart()");
RestartGame();
}

@Task_WarmupEnd() {
DebugLog("Task_WarmupEnd()");
DebugLog(" Cvar(DisableStats) = %s", Cvar(DisableStats) ? "true" : "false");

if (Cvar(DisableStats)) {
set_hudmessage(255, 0, 0, .x = -1.0, .y = 0.05, .holdtime = 5.0, .channel = -1);
ShowSyncHudMsg(0, g_iHud_Stats, "%l", "RWW_HUD_STATS_ON");
}

set_hudmessage(135, 206, 235, .x = -1.0, .y = 0.08, .holdtime = 5.0, .channel = -1);
ShowSyncHudMsg(0, g_iHud_Timer, "%l", "RWW_HUD_WARMUP_END");

// После всех рестартов включаем обратно хук RoundEnd
// Чтобы можно было ловить следующий commence
EnableHookChain(fwd_RoundEnd);
}

PluginController(const bool:bState) {
if (g_aDisablePlugins == Invalid_Array) {
return;
}

new sPluginName[PLUGIN_NAME_MAX_LEN];
for (new i; i < ArraySize(g_aDisablePlugins); i++) {
ArrayGetString(g_aDisablePlugins, i, sPluginName, charsmax(sPluginName));

if (bState) {
pause("ac", sPluginName);
} else {
unpause("ac", sPluginName);
}
}
}

WarmupModesLoad() {
new const MODES_FILE_PATH[] = "Modes.json";

g_aModes = ArrayCreate(S_WarmupMode, 4);

new JSON:jModes = Json_GetFile(GetConfigPath(MODES_FILE_PATH));

if (jModes == Invalid_JSON) {
set_fail_state("Can't load warmup modes from config file.");
return;
}

if (!json_is_array(jModes)) {
log_amx("[ERROR] File '%s' must contains array of warmup modes.", GetConfigPath(MODES_FILE_PATH));
set_fail_state("Can't load warmup modes from config file.");
json_free(jModes);
return;
}

for (new i = 0, ii = json_array_get_count(jModes); i < ii; i++) {
new Mode[S_WarmupMode];

new JSON:jMode = json_array_get_value(jModes, i);
if (!json_is_object(jMode)) {
log_amx("[WARNING] Warmup mode must be object. File '%s', item #%d.", GetConfigPath(MODES_FILE_PATH), i);
json_free(jMode);
continue;
}

json_object_get_string(jMode, "Title", Mode[WM_Title], charsmax(Mode[WM_Title]));

Mode[WM_Items] = VipM_IC_JsonGetItems(json_object_get_value(jMode, "Items"));
if (Mode[WM_Items] == Invalid_Array) {
log_amx("[WARNING] Warmup items array is empty. File '%s', item #%d.", GetConfigPath(MODES_FILE_PATH), i);
json_free(jMode);
continue;
}

if (json_object_has_value(jMode, "Music", JSONString)) {
json_object_get_string(jMode, "Music", Mode[WM_Music], charsmax(Mode[WM_Music]));
if (!file_exists(Mode[WM_Music])) {
log_amx("[WARNING] Music file '%s' not found. File '%s', item #%d.", GetConfigPath(MODES_FILE_PATH), i);
Mode[WM_Music][0] = 0;
}
} else {
Mode[WM_Music][0] = 0;
}

json_free(jMode);

ArrayPushArray(g_aModes, Mode);
}

json_free(jModes);
}

DisablePluginsLoad() {
g_aDisablePlugins = ArrayCreate(PLUGIN_NAME_MAX_LEN, 4);

new JSON:jDisablePlugins = Json_GetFile(GetConfigPath("DisablePlugins.json"), "[]");

if (jDisablePlugins == Invalid_JSON) {
log_amx("[WARNING] Disabling plugins will be skipped.");
return;
}

if (!json_is_array(jDisablePlugins)) {
log_amx("[ERROR] File '%s' must contains array of plugin names.", GetConfigPath("DisablePlugins.json"));
log_amx("[WARNING] Disabling plugins will be skipped.");
json_free(jDisablePlugins);
return;
}

new sPluginName[PLUGIN_NAME_MAX_LEN];
for (new i = 0, ii = json_array_get_count(jDisablePlugins); i < ii; i++) {
json_array_get_string(jDisablePlugins, i, sPluginName, charsmax(sPluginName));

if (!is_plugin_loaded(sPluginName)) {
log_amx("[WARNING] Plugin '%s' is not loaded.", sPluginName);
continue;
}

ArrayPushString(g_aDisablePlugins, sPluginName);
}

json_free(jDisablePlugins);
}

MusicLoad() {
new const MUSIC_FILE_PATH[] = "Music.json";
g_aMusic = ArrayCreate(PLATFORM_MAX_PATH, 4);

new JSON:jMusic = Json_GetFile(GetConfigPath(MUSIC_FILE_PATH), "[]");

if (jMusic == Invalid_JSON) {
log_amx("[WARNING] Can't load music for warm-up.");
return;
}

if (!json_is_array(jMusic)) {
log_amx("[ERROR] File '%s' must contains array of .mp3 file paths.", GetConfigPath(MUSIC_FILE_PATH));
log_amx("[WARNING] Can't load music for warm-up.");
json_free(jMusic);
return;
}

new sMusicPath[PLUGIN_NAME_MAX_LEN];
for (new i = 0, ii = json_array_get_count(jMusic); i < ii; i++) {
json_array_get_string(jMusic, i, sMusicPath, charsmax(sMusicPath));

if (!file_exists(sMusicPath)) {
log_amx("[WARNING] Music file '%s' not found.", sMusicPath);
continue;
}

precache_generic(sMusicPath);
ArrayPushString(g_aMusic, sMusicPath);
}

json_free(jMusic);
}

bool:IsMapIgnored() {
new JSON:jIgnoredMaps = Json_GetFile(GetConfigPath("IgnoredMaps.json"), "[]");

if (jIgnoredMaps == Invalid_JSON) {
log_amx("[WARNING] Check for ignored maps will be skipped.");
return false;
}

if (!json_is_array(jIgnoredMaps)) {
log_amx("[ERROR] File '%s' must contains array of map names.", GetConfigPath("IgnoredMaps.json"));
log_amx("[WARNING] Check for ignored maps will be skipped.");
json_free(jIgnoredMaps);
return false;
}

new sMapName[MAP_NAME_MAX_LEN];
rh_get_mapname(sMapName, charsmax(sMapName), MNT_TRUE);

new sIgnoredMapName[MAP_NAME_MAX_LEN];
for (new i = 0, ii = json_array_get_count(jIgnoredMaps); i < ii; i++) {
json_array_get_string(jIgnoredMaps, i, sIgnoredMapName, charsmax(sIgnoredMapName));

if (equali(sMapName, sIgnoredMapName, strlen(sIgnoredMapName))) {
json_free(jIgnoredMaps);
return true;
}
}

json_free(jIgnoredMaps);
return false;
}

BuyZone_ToogleSolid(const solid) {
new entityIndex = 0;
while ((entityIndex = rg_find_ent_by_class(entityIndex, "func_buyzone"))) {
set_entvar(entityIndex, var_solid, solid);
}
}

RestartGame() {
set_member_game(m_bCompleteReset, true);
set_member_game(m_bGameStarted, true);

rg_round_end(
.tmDelay = 0.0,
.st = WINSTATUS_NONE,
.event = ROUND_GAME_COMMENCE,
.message = "",
.sentence = "",
.trigger = true
);
rg_restart_round();
}

JSON:Json_GetFile(const sPath[], const sDefaultContent[] = NULL_STRING) {
if (!file_exists(sPath)) {
if (!sDefaultContent[0]) {
log_amx("[ERROR] File '%s' not found.", sPath);
return Invalid_JSON;
}

write_file(sPath, sDefaultContent);
log_amx("[INFO] File '%s' not found and was created with default content.", sPath);
}

new JSON:jFile = json_parse(sPath, true, true);

if (jFile == Invalid_JSON) {
log_amx("[ERROR] JSON syntax error in '%s'.", sPath);
return Invalid_JSON;
}

return jFile;
}

GetConfigPath(const sPath[] = NULL_STRING) {
static __amxx_configsdir[PLATFORM_MAX_PATH];
if (!__amxx_configsdir[0]) {
get_localinfo("amxx_configsdir", __amxx_configsdir, charsmax(__amxx_configsdir));
}

new sOut[PLATFORM_MAX_PATH];
formatex(sOut, charsmax(sOut), "%s/plugins/RWW%s%s", __amxx_configsdir, sPath[0] ? "/" : "", sPath);

return sOut;
}

InitDebug(const bool:bForceEnable = false) {
g_bDebug = bForceEnable || bool:(plugin_flags() & AMX_FLAG_DEBUG);

if (!g_bDebug) {
return;
}

get_localinfo("amxx_logs", g_sDebugFilePath, charsmax(g_sDebugFilePath));
add(g_sDebugFilePath, charsmax(g_sDebugFilePath), "/RWW/");
if (!dir_exists(g_sDebugFilePath)) {
mkdir(g_sDebugFilePath);
}

new sFileName[64];
get_time("%Y-%m-%d.log", sFileName, charsmax(sFileName));
add(g_sDebugFilePath, charsmax(g_sDebugFilePath), sFileName);

new sMapName[MAP_NAME_MAX_LEN];
rh_get_mapname(sMapName, charsmax(sMapName), MNT_TRUE);

log_amx("Debug mode enabled (%s)", g_sDebugFilePath);
log_to_file(g_sDebugFilePath, "--- Start debug logging (Map: %s) ---", sMapName);
}

DebugLog(const sFmt[], any:...) {
if (!g_bDebug) {
return;
}

static sMsg[512];

vformat(sMsg, charsmax(sMsg), sFmt, 2);
format(sMsg, charsmax(sMsg), "[RWW][DEBUG] %s", sMsg);

log_to_file(g_sDebugFilePath, "%s", sMsg);
}

RegisterCvars() {
bind_pcvar_num(create_cvar(
"RWW_Duration", "40", FCVAR_NONE,
Lang("RWW_CVAR_DURATION"),
true, 1.0
), Cvar(Duration));

bind_pcvar_num(create_cvar(
"RWW_RestartsNum", "2", FCVAR_NONE,
Lang("RWW_CVAR_RESTARTS_NUM"),
true, 1.0
), Cvar(RestartsNum));

bind_pcvar_float(create_cvar(
"RWW_RestartInterval", "1.5", FCVAR_NONE,
Lang("RWW_CVAR_RESTART_INTERVAL"),
true, 1.0
), Cvar(RestartInterval));

bind_pcvar_num(create_cvar(
"RWW_CleanupMap", "0", FCVAR_NONE,
Lang("RWW_CVAR_CLEANUP_MAP"),
true, 0.0, true, 1.0
), Cvar(CleanupMap));

bind_pcvar_num(create_cvar(
"RWW_WeaponsPickupBlock", "0", FCVAR_NONE,
Lang("RWW_CVAR_WEAPONS_PICKUP_BLOCK"),
true, 0.0, true, 1.0
), Cvar(WeaponsPickupBlock));

bind_pcvar_num(create_cvar(
"RWW_DisableStats", "0", FCVAR_NONE,
Lang("RWW_CVAR_DISABLE_STATS"),
true, 0.0, true, 1.0
), Cvar(DisableStats));

bind_pcvar_num(create_cvar(
"RWW_OncePerMap", "1", FCVAR_NONE,
Lang("RWW_CVAR_ONCE_PER_MAP"),
true, 0.0, true, 1.0
), Cvar(OncePerMap));

bind_pcvar_num(create_cvar(
"RWW_StartAfterSvRestart", "0", FCVAR_NONE,
Lang("RWW_CVAR_START_AFTER_SV_RESTART"),
true, 0.0, true, 1.0
), Cvar(StartAfterSvRestart));


bind_pcvar_num(create_cvar(
"RWW_DeathMatch_Enable", "1", FCVAR_NONE,
Lang("RWW_CVAR_DM_ENABLE"),
true, 0.0, true, 1.0
), Cvar(DeathMatch_Enable));

bind_pcvar_num(create_cvar(
"RWW_DeathMatch_SpawnProtectionDuration", "2", FCVAR_NONE,
Lang("RWW_CVAR_DM_SPAWN_PROTECTION_DURATION"),
true, 0.0
), Cvar(DeathMatch_SpawnProtectionDuration));

AutoExecConfig(true, "Cvars", "RWW");
}

public plugin_natives() {
register_native("RWW_IsWarmupInProgress", "@_IsWarmupInProgress");
}

bool:@_IsWarmupInProgress() {
return g_bWarupInProgress;
}
//AMXXPC compile.exe
// by the AMX Mod X Dev Team


//// random_weapons_warmup.sma
//
// C:\Users\Admin\Desktop\╩юьяшы ЄюЁ фы яырушэют 1.9.0_5294\random_weapons_warmup.sma(5) : fatal error 100: cannot read from file: "VipM/ItemsController"
//
// Compilation aborted.
// 1 Error.
// Could not locate output file compiled\random_weapons_warmup.amx (compile failed).
//
// Compilation Time: 0,59 sec
// ----------------------------------------

Press enter to exit ...
 
В этой теме было размещено решение! Перейти к решению.

fgd

Сообщения
88
Реакции
25
Помог
10 раз(а)
cobres, прикрепи файл VipM/ItemsController.ini
9 Июл 2024
cobres, скорей всего у тебя нет VipM/ItemsController.ini .
Если что взять её можно тут Тык
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу