Dev cs ошибки компилятора

error 001 expected token: «%s», but found «%s» ожидался символ: «%s», но был найден «%s» error 002 only a single statement (or expression) can follow each «case» только одно заявление (или выражение) могут следовать за «case» error 003 declaration of a local variable must appear in a compound block объявленная локальная переменная должна использоваться в этом же блоке error 004 function «%s» is not implemented функция %s не реализована error 005 function may not have arguments функция не имеет аргументов error 006 must be assigned to an array должен быть присвоен массив error 007 operator cannot be redefined оператор не может быть установлен еще раз error 008 must be a constant expression; assumed zero должно быть постоянным выражением; равным нулю error 009 invalid array size (negative or zero) неверный размер массива (отрицательный или 0) error 010 invalid function or declaration неизвестная функция или декларация error 011 invalid outside functions неверно вне функции error 012 invalid function call, not a valid address неверный вызов функции, неверный адрес error 013 no entry point (no public functions) нет точки входа (не public функция) error 014 invalid statement; not in switch неверный оператор; не в switch error 015 default case must be the last case in switch statement default должен быть последним условием в switch error 016 multiple defaults in «switch» несколько «default» в switch error 017 undefined symbol «%s» неизвестный символ «%s» error 018 initialization data exceeds declared size данные массива превышают его размер error 019 not a label: «%s» не метка «%s» error 020 invalid symbol name «%s» неверное имя символа «%s» error 021 symbol already defined: «%s» символ уже объявлен: «%s» error 022 must be lvalue (non-constant) должно быть левосторонним (нет постоянной) error 023 array assignment must be simple assignment назначение массива должно быть простым error 024 break or «continue» is out of context break или «continue» вне контекста error 025 function heading differs from prototype функция заголовка отличается от прототипа error 026 no matching «#if…» не найдено «#if…» error 027 invalid character constant недопустимый символ в постоянной error 028 invalid subscript (not an array or too many subscripts): «%s» неверный индекс (это не массив или слишком много индексов): «%s» error 029 invalid expression, assumed zero неверное выражение, нет результата error 030 compound statement not closed at the end of file составной оператор не закрыт в конце файла error 031 unknown directive неизвестная директива error 032 array index out of bounds (variable «%s») индекс массива превышен error 033 array must be indexed (variable «%s») массив должен быть проиндексирован error 034 argument does not have a default value (argument %d) аргумент не имеет начального значения (аргумент %d) error 035 argument type mismatch (argument %d) несоответствие типа аргумента (аргумент %d) error 036 empty statement пустой оператор error 037 invalid string (possibly non-terminated string) неправильная строка error 038 extra characters on line лишние символы в строке error 039 constant symbol has no size символьная константа не имеет размера error 040 duplicate «case» label (value %d) несколько раз объявлен «case» с одним тем же параметром error 041 invalid ellipsis, array size is not known размер массива неизвестен error 042 invalid combination of class specifiers недопустимое сочетание класса error 043 character constant exceeds range for packed string символьная константа превышает размер строки error 044 positional parameters must precede all named parameters позиционные параметры должны предшествовать всем именованным параметрам error 045 too many function arguments слишком много аргументов у функции error 046 unknown array size (variable «%s») неизвестный размер массива error 047 array sizes do not match, or destination array is too small размеры массива конфликтуют, либо целевой массив слишком маленький error 048 array dimensions do not match размеры массива не совпадают error 049 invalid line continuation неправильное продолжение строки error 050 invalid range неверный диапазон error 051 invalid subscript, use «[ ]» operators on major dimensions неправильный индекс, используйте «[]» error 052 multi-dimensional arrays must be fully initialized много-размерные массивы должны быть полностью определены error 053 exceeding maximum number of dimensions превышение максимального числа измерений error 054 unmatched closing brace не найдена закрывающаяся скобка error 055 start of function body without function header начало функции без заголовка error 056 arrays, local variables and function arguments cannot be public (variable «%s») массивы, локальные переменные и аргументы функции не могут быть общедоступными (переменная «% s») error 057 unfinished expression before compiler directive который недействителен. error 058 duplicate argument; same argument is passed twice дублирование аргумента; аргумент передается несколько раз error 059 function argument may not have a default value (variable «%s») аргумент не может иметь значение по-умолчанию error 060 multiple «#else» directives between «#if … #endif» несколько «#else» между «#if и #endif» error 061 #elseif directive follows an «#else» directive #else перед «#elseif» error 062 number of operands does not fit the operator Количество операторов не соотвествует оператору error 063 function result tag of operator «%s» must be «%s» Результат функции %s должен быть %s error 064 cannot change predefined operators невозможно изменить уже определенные операторы error 065 function argument may only have a single tag (argument %d) в этой функции может быть только один аргумент error 066 function argument may not be a reference argument or an array (argument «%s») аргумент функции не может быть ссылкой или массивом error 067 variable cannot be both a reference and an array (variable «%s») Переменная не может быть как массив или ссылка error 068 invalid rational number precision in #pragma неверное число в #pragma error 069 rational number format already defined формат рационального числа уже определен error 070 rational number support was not enabled рациональное число не поддерживается error 071 user-defined operator must be declared before use (function «%s») объявленный оператор должен быть перед использованием error 072 sizeof operator is invalid on «function» symbols оператор «sizeof» не может быть использован для символов функции error 073 function argument must be an array (argument «%s») аргумент %s должен быть массивом error 074 #define pattern must start with an alphabetic character #define должен начинаться с буквы error 075 input line too long (after substitutions) введенная строка слишком длинная error 076 syntax error in the expression, or invalid function call неправильный синтаксис или неправильный вызов функции error 077 malformed UTF-8 encoding, or corrupted file: %s плохая кодировка UTF-8 или плохой файл: %s error 078 «»}»>function uses both «return» and «return <value>» «»}»>функция использует «return» и «return <значение>» error 079 inconsistent return types (array & non-array) несовместимость типов возвращенных результатов error 080 unknown symbol, or not a constant symbol (symbol «%s») неизвестный или непостоянный символ: %s error 081 cannot take a tag as a default value for an indexed array parameter (symbol «%s») Нельзя взять значение в массив %s error 082 user-defined operators and native functions may not have states созданные функции или операторы не имеют состояния error 083 a function may only belong to a single automaton (symbol «%s») функция может принадлежать только к одной автоматизации error 084 state conflict: one of the states is already assigned to another implementation (symbol «%s») для функции %s уже определенна данная state error 085 no states are defined for function «%s» нет состояний, определенных для функции «%s» error 086 unknown automaton «%s» неизвестная автоматизация «%s» error 087 unknown state «%s» for automaton «%s» неизвестное состояние «%s» в автоматизации «%s» error 088 number of arguments does not match definitionn количество аргументов не совпадает с объявленными в функции
/**
* Micro Army Rank System by Ge3eR
* 13.11.2017
* v1.29Hz
*/
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <csx> // По умолчанию включает и <csstats>. не трогать.
#if AMXX_VERSION_NUM < 183
#include <colorchat> // colorchat.inc от aghl.ru
#define MAX_NAME_LENGTH 32
#endif

/* Раскомментируйте, для частичной поддержки AES нативов и форвардов */
#define AES_PLUGINS_COMPATIBLE

/* Раскомментируйте, если хотите дополнить HUD инфой о скилле */
#define WITH_SKILLS

/* -- READ_STATS
* Откуда будем считывать статистику?
* 0 - CSX or CSX Extended (Module)
* 1 - CSSTATS MYSQL by SKAJIbnEJIb // автором не тестировалось, но говорят норм )
* 2 - CSSTATSX SQL by serfreeman1337 + CSX_DUMMY Module// учтите, что CSSTATSX SQL должен быть в режиме csstats_sql_forwards 1
*/
#define READ_STATS 0

// Настройки отображения HUD информера
#define HUD_LIVE_COLOR_R 0
#define HUD_LIVE_COLOR_G 128
#define HUD_LIVE_COLOR_B 0
#define HUD_LIVE_AXIS_X 0.01
#define HUD_LIVE_AXIS_Y 0.22

#define HUD_SPEC_COLOR_R 28
#define HUD_SPEC_COLOR_G 90
#define HUD_SPEC_COLOR_B 28
#define HUD_SPEC_AXIS_X 0.01
#define HUD_SPEC_AXIS_Y 0.15

// Промежуток между сообщениями информера
#define HUD_REPEAT_TIME 1.5

/* -- LEVELUP_CONGRATULATION
* Оповещение о повышении уровня
* 0 - отключено
* 1 - включено (оповещает в чат, HUD и звуком)
*/
#define LEVELUP_CONGRATULATION 1

#if LEVELUP_CONGRATULATION == 1
// Настройки отображения HUD сообщения о повышении уровня
#define HUD_LEVELUP_COLOR_R 0
#define HUD_LEVELUP_COLOR_G 128
#define HUD_LEVELUP_COLOR_B 0
#define HUD_LEVELUP_AXIS_X -1.0
#define HUD_LEVELUP_AXIS_Y 0.15
#endif

#define ONSTART_WAIT_TIME /* CS */ 1.6 // задержка перед чтением статистики. (увеличить при плохом соединении с БД)

// автограф
#define PLAGIN "Micro Army Rank System"
#define VERSIA "1.29Hz_p1" // patched
#define AUTHOR "Ge3eR"

// остальное, системное
#if READ_STATS == 1
#include <csstats_mysql>
; // again ...
#endif
#if READ_STATS == 2
#include <csstatsx_sql> // и кто же это у нас пишет либы без semicolon?
; // hot fix by wopox1337
#endif

#if defined AES_PLUGINS_COMPATIBLE
new level_up_forward, dummy;
new client_bonus[33];
#endif

#pragma semicolon 1

#define STATS_KILLS 0
#define STATS_DEATHS 1
/*
#define STATS_HEADSHOTS 2
#define STATS_DAMAGE 6
*/
/* -- EXP_MODE .. будет в следующем релизе )
* Режим чтения опыта
* 0 - считать за опыт фраги (kills)
* 1 - считать за опыт хедшоты (headshots)
* 2 - считать за опыт общий урон (damage)
#define EXP_MODE 0
*/
#define MAX_RANGS sizeof mars_exp
#define IsEntPlayer(%1) (1<=%1<=g_maxplayers)

/* input: level
* output: next exp border
*///level_reqexp
#define level_reqexp(%1) mars_exp[min( (%1 + 1), min(array_size-1, MAX_RANGS-1) )] // 1.29 bug fix

#define LEVEL_NAME_LENGHT 64 // если ранг длинный и обрезается, изменить.

#define MARS_ST_EXP 0
#define MARS_ST_LEVEL 1
#define MARS_ST_NEXTEXP 2
#define MARS_ST_END_DIGIT 3

// ну вы поняли
new const prefix[] = "MARS";

#if defined WITH_SKILLS
new const skill_letters[][] =
{
"L-", "L", "L+", "M-", "M", "M+", "H-",
"H", "H+", "P-", "P", "P+", "G"
};
#endif

// Глобальные
new g_maxplayers;
new Array:rang_list;
new informer_sync_obj;
new array_size;

// оптимизируем запросы к стате засчитывая в оффлайн режиме)
new client_kills[33];
new client_kills_req[33];
new client_level[33];

#if defined WITH_SKILLS
#if READ_STATS == 0 || READ_STATS == 1
new client_deaths[33];
#endif
new Float:client_skill[33] = { 100.0, ... };
#endif

// Так быстрее вычислять ранг игрока. изменить по желанию.
new mars_exp[] = { // при добавлении последней записи, следите чтобы после неё небыло запятой
00000, 00050, 00100, 00200, 00400,
00700, 01000, 02000, 03000, 04000,
05000, 06000, 07000, 08000, 09000,
10000, 11000, 12000, 13000, 14000,
15000, 16000, 17000, 18000, 19000,
20000, 25000, 30000, 40000, 50000
}; // and so on, to infinity...

public plugin_init()
{
register_plugin(PLAGIN, VERSIA, AUTHOR);

rang_list = ArrayCreate(LEVEL_NAME_LENGHT);
informer_sync_obj = CreateHudSyncObj();
g_maxplayers = get_maxplayers();

register_srvcmd("mars_reload_list", "_mars_reload_list"); // Hot reload rank list
register_srvcmd("mars_reload_stats", "_mars_reload_stats"); // Hard reloading stats, for connected players

register_cvar("mars", VERSIA, FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED);

#if defined AES_PLUGINS_COMPATIBLE
level_up_forward = CreateMultiForward("aes_player_levelup",ET_IGNORE,FP_CELL,FP_CELL,FP_CELL);

if(get_cvar_pointer("aes_track_mode") == 0) register_cvar("aes_track_mode","0"); // "-1" ?
#endif

register_dictionary("mars.txt");

set_task(HUD_REPEAT_TIME, "informer", .flags="b");
}

public plugin_cfg()
{
server_print("[%s] Loaded %d Ranks", prefix, ( array_size = load_rangs() ) );
}

public _mars_reload_list()
{
ArrayClear(rang_list);
server_print("[%s] ReLoaded with %d Ranks", prefix, ( array_size = load_rangs() ) );

// пересчёт уровня. это понадобится, если новых уровней меньше чем было раньше // 1.28 bug fix
for(new id = 1; id <= g_maxplayers; id++)
if(is_user_connected(id))
client_level[id] = get_level_index(client_kills[id]);
}

load_rangs()
{
new file;
new lang[3];
new path[256], cfg_path[128];

get_configsdir(cfg_path,charsmax(cfg_path));
get_cvar_string("amx_language", lang, charsmax(lang));

format(path, charsmax(path), "%s/mars_lists/mars_list_%s.ini", cfg_path, lang);

if( !(file = fopen(path, "rt")))
{
format(path, charsmax(path), "%s/mars_list.ini", cfg_path);
file = fopen(path, "rt");
}

if(file)
{
new message[LEVEL_NAME_LENGHT];

while(!feof(file))
{
fgets(file, message, charsmax(message));
trim(message);
if(strlen(message) && message[0] != ';')
ArrayPushString(rang_list, message);
}
fclose(file);

new size = ArraySize(rang_list);
if(!size)
{
server_print("[%s] file^"%s^" is empty! Loaded 1 fake rank.", prefix, path);
ArrayPushString(rang_list, "Марсианин");

return 1;
}
return size;
}

server_print("[%s] File ^"%s^" not found! Loaded 1 fake rank.", prefix, path);
ArrayPushString(rang_list, "Марсианин");

return 1;
}

public informer()
{
static watching;
static stats[MARS_ST_END_DIGIT];
static level_name[LEVEL_NAME_LENGHT];
static output[96+ LEVEL_NAME_LENGHT];
static id;

#if defined WITH_SKILLS
static Float:skill;
#endif

for(id = 1; id <= g_maxplayers; id++)
{
if(!is_user_connected(id) || is_user_bot(id)) continue;

//entity_get_int(id, EV_INT_iuser2); // maybe engine?
watching = pev(id, pev_iuser2);

if(is_user_alive(watching) && !is_user_alive(id))
{
get_player_stats(watching, stats);

#if defined WITH_SKILLS
skill = _get_skill(watching);
#endif
}
else
{
get_player_stats(id, stats);

#if defined WITH_SKILLS
skill = _get_skill(id);
#endif
}

ArrayGetString(rang_list, stats[MARS_ST_LEVEL], level_name, charsmax(level_name));

#if defined WITH_SKILLS
format(output, charsmax(output), "%L^n%L^n%L"
, LANG_SERVER, "MARS_HUD_RANK"
, level_name

, LANG_SERVER, "MARS_HUD_EXP"
, stats[MARS_ST_EXP], max(stats[MARS_ST_EXP], stats[MARS_ST_NEXTEXP]) //Предела нет!

, LANG_SERVER, "MARS_HUD_SKILL"
, skill_letters[skill_id(
skill
)], skill
);
#else
format(output, charsmax(output), "%L^n%L"
, LANG_SERVER, "MARS_HUD_RANK"
, level_name

, LANG_SERVER, "MARS_HUD_EXP"
, stats[MARS_ST_EXP], max(stats[MARS_ST_EXP], stats[MARS_ST_NEXTEXP]) //Предела нет!
);
#endif

ClearSyncHud(id,informer_sync_obj);

if(is_user_alive(id))
{
set_hudmessage(HUD_LIVE_COLOR_R, HUD_LIVE_COLOR_G, HUD_LIVE_COLOR_B, HUD_LIVE_AXIS_X, HUD_LIVE_AXIS_Y, 0
, .holdtime = HUD_REPEAT_TIME, .channel = 3
, .fxtime=0.0, .fadeintime=0.1, .fadeouttime=0.1
);
}
else
{
set_hudmessage(HUD_SPEC_COLOR_R, HUD_SPEC_COLOR_G, HUD_SPEC_COLOR_B, HUD_SPEC_AXIS_X, HUD_SPEC_AXIS_Y, 0
, .holdtime = HUD_REPEAT_TIME, .channel = 3
, .fxtime=0.0, .fadeintime=0.1, .fadeouttime=0.1
);
}

ShowSyncHudMsg(id, informer_sync_obj, output);
}
}

get_player_stats(id, stats[])
{
stats[MARS_ST_EXP] = client_kills[id];
stats[MARS_ST_LEVEL] = client_level[id];
stats[MARS_ST_NEXTEXP] = level_reqexp(client_level[id]);
}

get_level_index(exp)
{
new index = 0;
for(new i = 0; i < array_size && i < MAX_RANGS; i++) // it works!
{
if(mars_exp[i] <= exp)
index = i;
}
return index;
}

stock Float:_get_skill(id)
{
#if READ_STATS == 2
return client_skill[id];
#else
return effec(client_kills[id], client_deaths[id]);
#endif
}

stock Float:effec(kills, deaths) return (100.0 * float(kills) / float(kills + deaths));

stock skill_id(Float:skill)
{
#if READ_STATS == 2
switch(floatround(skill))
{
case 0..59: return 0; case 60..74: return 1; case 75..84: return 2; // L
case 85..99: return 3; case 100..114: return 4; case 115..129: return 5; // M
case 130..139: return 6; case 140..149: return 7; case 150..164: return 8; // H
case 165..179: return 9; case 180..194: return 10; case 195..209: return 11;// P
case 210..999: return 12; // G
}
#else // будет нормально отображать букву для простых смертных с READ_STATS 0
switch(floatround(skill))
{
case 0..14: return 0; case 15..29: return 1; case 30..44: return 2; // L
case 45..51: return 3; case 52..63: return 4; case 64..69: return 5; // M
case 70..74: return 6; case 75..79: return 7; case 80..85: return 8; // H
case 86..89: return 9; case 90..94: return 10; case 95..97: return 11;// P
case 98..100: return 12; // G
}
#endif
return 0;
}

public client_death(killer,victim)
{
if(!(IsEntPlayer(killer)) || !(IsEntPlayer(victim))
|| killer == victim
) return;

// зачтём
client_kills[killer]++;

#if defined WITH_SKILLS // немного больше вычислений...

#if READ_STATS == 0 || READ_STATS == 1
client_deaths[victim]++;
#endif

#if READ_STATS == 2 // The ELO Method

static Float:delta; delta = 1.0 / (1.0 + floatpower(10.0,(client_skill[killer] - client_skill[victim]) / 100.0));
static Float:koeff; koeff = 0.0;

if(client_kills[killer] < 100) koeff = 2.0; else koeff = 1.5;

client_skill[killer] += (koeff * delta);
client_skill[victim] -= (koeff * delta);

// log_amx("[MARS %d] %f (Client k)", killer, client_skill[killer]);
// log_amx("[MARS %d] %f (Client v)", victim, client_skill[victim]);

#endif

#endif

if(--client_kills_req[killer]) return; // пропускаем, пока игрок не достигнет нового уровня

// учтём
if(client_level[killer]< MAX_RANGS && client_level[killer]< array_size) client_level[killer]++;

client_kills_req[killer] = level_reqexp(client_level[killer])-client_kills[killer]; // 1.27 bug fixed

#if defined AES_PLUGINS_COMPATIBLE
// set event levelup
ExecuteForward(level_up_forward, dummy, killer, client_level[killer], client_level[killer] - 1);
#endif

// покажем
#if LEVELUP_CONGRATULATION == 1
static local_client_name[MAX_NAME_LENGTH];
static local_level_name[LEVEL_NAME_LENGHT];

get_user_name(killer, local_client_name,charsmax(local_client_name));
ArrayGetString(rang_list, client_level[killer], local_level_name, charsmax(local_level_name));

set_hudmessage(HUD_LEVELUP_COLOR_R, HUD_LEVELUP_COLOR_G, HUD_LEVELUP_COLOR_B, HUD_LEVELUP_AXIS_X, HUD_LEVELUP_AXIS_Y, 0,.holdtime = 8.0);
show_hudmessage(0, "%L", LANG_SERVER, "MARS_HUD_CONGRATULATION", local_client_name, local_level_name);

client_print_color(0, print_team_default
, "^4[^1%s^4] %L", prefix, LANG_SERVER, "MARS_TXT_CONGRATULATION", local_client_name, local_level_name);

client_cmd(0, "spk gonarch/gon_step1.wav");
#endif
}

public client_putinserver(id)
{
// немного подождём, а вдруг ещё не загрузилась инфа?
set_task(ONSTART_WAIT_TIME, "onstart_set_exp", id + 129);
}

public onstart_set_exp(index)
{
new id = index - 129;

if(!is_user_connected(id)) return;

// обнуляем
client_kills[id] = 0;

#if defined WITH_SKILLS
#if READ_STATS != 2
client_deaths[id] = 0;
#endif
client_skill[id] = 100.0;
#endif

#if defined AES_PLUGINS_COMPATIBLE
client_bonus[id] = 0;
#endif
// и считываем
_read_stats(id);
}

_read_stats(id)
{
#if READ_STATS == 0
static stats[8];
static bh[8];

if(!get_user_stats(id,stats,bh))
client_kills[id] = 0;
else
client_kills[id] = stats[STATS_KILLS];
#endif
#if READ_STATS == 1
static stats[22];

if(csstats_get_user_stats(id, stats) <= 0)
client_kills[id] = 0;
else
client_kills[id] = stats[STATS_KILLS];
#endif
#if READ_STATS == 2
static stats[8];
static bh[8];

if(!get_user_stats_sql(id,stats,bh))
client_kills[id] = 0;
else
client_kills[id] = stats[STATS_KILLS];
#endif

// оптимизируем подсчёт уровня
client_level[id] = get_level_index(client_kills[id]);
client_kills_req[id] = level_reqexp(get_level_index(client_kills[id]))-client_kills[id];

#if defined WITH_SKILLS

#if READ_STATS == 0 || READ_STATS == 1
client_deaths[id] = stats[STATS_DEATHS];
client_skill[id] = (100.0 * float(stats[STATS_KILLS]) / float(stats[STATS_KILLS] + stats[STATS_DEATHS]));
#endif

#if READ_STATS == 2
if(!get_user_skill(id,client_skill[id]))
client_skill[id] = 100.0;
if(!client_skill[id]) client_skill[id] = 100.0;
#endif
// log_amx("[MARS %d] %f (FirstRead)", id, client_skill[id]);
#endif
}
/*
#if AMXX_VERSION_NUM < 183
#define client_disconnected client_disconnect
#endif
public client_disconnected(id)
{
log_amx("[MARS %d] %f (Disconnect)", id, client_skill[id]);
}
*/

public _mars_reload_stats() /* постарайтесь не юзать эту функцию без надобности. Обновление статистики в модуле csx или других плагинах
не мгновенно, а зачастую настраивается на запись под конец карты или при дисконнекте. так что вы рискуете временно сбить счёт уже успевшим
его набить игрокам. */
{
for(new id = 1; id <= g_maxplayers; id++)
{
if(is_user_connected(id)) _read_stats(id);
}
server_print("stats reloaded");
}

// Проброс натив ... конец плагина )

public plugin_natives()
{
register_library("mars_main");

#if defined WITH_SKILLS
register_native("mars_get_skill", "_mars_get_skill", true); // get Real-Time skill
#endif

#if defined AES_PLUGINS_COMPATIBLE
register_library("mars_to_aes_main");

// Совместимость с плагинами использующими AES 0.5 Vega..
register_native("aes_get_player_level", "_mars_get_player_level", true);
register_native("aes_get_player_exp", "_mars_get_player_exp", true);
register_native("aes_get_player_reqexp", "_mars_get_player_reqexp", true);
register_native("aes_get_level_name", "_mars_get_level_name");
register_native("aes_get_level_reqexp", "_mars_get_level_reqexp", true);
register_native("aes_get_max_level", "_mars_get_max_level", true);
register_native("aes_get_exp_level", "_mars_get_exp_level", true);

// fake natives ?
register_native("aes_set_player_bonus", "_mars_set_player_bonus");
register_native("aes_get_player_bonus", "_mars_get_player_bonus", true);
register_native("aes_set_player_level", "_mars_set_player_level");
register_native("aes_set_player_exp", "_mars_set_player_exp");
// mega fake native :)
register_native("aes_find_stats_thread", "_mars_find_stats_thread"); // mega fake :D

// Совместимость с AES 0.4
register_native("aes_get_stats", "_mars_get_player_stats"); // do not use it anymore (in aes 0.5 Vega, will be return false)
register_native("aes_get_player_stats", "_mars_get_player_stats");
register_native("aes_get_exp_to_next_level","_mars_get_level_reqexp", true);
register_native("aes_get_level_for_exp", "_mars_get_exp_level", true);

// aes_cstrike_exp for AES: STATSX CSTRIKE plugin
register_native("aes_get_exp_for_stats_f","_mars_get_exp_for_stats_f");
register_native("aes_get_exp_for_stats","_mars_get_exp_for_stats");
#endif
}

#if defined WITH_SKILLS
public Float:_mars_get_skill(id)
{
if ( !IsEntPlayer(id) )
{
log_error(AMX_ERR_NATIVE, "player out of range (%d)", id);
return -1.0;
}
return _get_skill(id);
}
#endif

#if defined AES_PLUGINS_COMPATIBLE
// Returns required experience to pass level
// @lvl - level
//
// @return - required experience value or -1.0 on fail
//
//native Float:aes_get_level_reqexp(level)
public Float:_mars_get_level_reqexp(level_index)
{
return float( level_reqexp( min( level_index, min( array_size-1, MAX_RANGS ) ) ) );
}

//native aes_get_level_for_exp(exp) AES 0.4
//
// Returns level for experience
// @exp - experience value
//
// @return - level num or -1 of fail
//
//native aes_get_exp_level(Float:exp)
public _mars_get_exp_level(Float:exp)
{
return get_level_index( floatround(exp) );
}

//
// Returns maximum level
//
//native aes_get_max_level()
public _mars_get_max_level()
{
return min(array_size, MAX_RANGS);
}

//
// Returns player experience
// @player - player id
//
// @return - player experience or -1.0 if player not tracked yet
//
//native Float:aes_get_player_exp(player)
public Float:_mars_get_player_exp(player_id)
{
if ( !IsEntPlayer(player_id) )
{
log_error(AMX_ERR_NATIVE, "player out of range (%d)", player_id);
return -1.0;
}

return float(client_kills[player_id]);
}

//
// Returns player required experience to next level
// @player - player id
//
// @return - required experience value
//
//native Float:aes_get_player_reqexp(player)
public Float:_mars_get_player_reqexp(player_id)
{
if ( !IsEntPlayer(player_id) )
{
log_error(AMX_ERR_NATIVE, "player out of range (%d)", player_id);
return -1.0;
}

return float( level_reqexp(client_level[ player_id ]) );
}

//native aes_set_player_stats(id,stats[3])
public _mars_get_player_stats(plugin,params)
{
if(params < 2)
{
log_error(AMX_ERR_NATIVE,"bad arguments num, expected 2, passed %d", params);

return 0;
}

new id = get_param(1);

if ( !IsEntPlayer(id) )
{
log_error(AMX_ERR_NATIVE, "player out of range (%d)", id);
return 0;
}

new ret[4];

ret[0] = client_kills[id]; // exp
ret[1] = client_level[id];//get_level_index(ret[0]); // level
ret[2] = client_bonus[id];//313374; // bonus
ret[3] = level_reqexp(ret[1]); // next exp

set_array(2, ret, 4);

return 1;
}

//
// Returns current player level
// @player - player id
//
// @return - current player level or -1 if player not tracked yet
//
//native aes_get_player_level(player)
public _mars_get_player_level(player_id)
{
if(!IsEntPlayer(player_id))
{
log_error(AMX_ERR_NATIVE,"player index %d, out of bounds", player_id);

return -1;
}

return client_level[player_id];
}

// +
// Returns level name for level num.
//
// @level - level number
// @level[] - level name output
// @len - len
// @idLang - language id
//
// @return - len
//
//native aes_get_level_name(level,level_name[],len,idLang = LANG_SERVER)
public _mars_get_level_name(plugin,params)
{
if(params < 3)
{
log_error(AMX_ERR_NATIVE,"bad arguments num, expected 3, passed %d", params);

return 0;
}

new level_index = get_param(1);
new level_name[LEVEL_NAME_LENGHT];

ArrayGetString(rang_list, min(level_index,array_size-1), level_name, charsmax(level_name));

set_string(2, level_name, get_param(3));

return 1;
}

//
// Returns player bonus points
// @player - player id
//
// @return - player bonus points or -1 if player
//
//native aes_get_player_bonus(player)
public _mars_get_player_bonus(player_id)
{
if(!IsEntPlayer(player_id))
{
log_error(AMX_ERR_NATIVE,"player index %d, out of bounds", player_id);

return -1;
}

return client_bonus[player_id];
}

//
// Sets player bonus points
// @player - player id
// @bonus - bonus value
// @force - force even if track paused
//
// @return
// AES_RT_NO - on track pause or player not tracked yet
// AES_RT_YES - on success
//
//native aes_set_player_bonus(player,bonus,bool:force = false)
public _mars_set_player_bonus(plugin,params)
{
if(params < 2)
{
log_error(AMX_ERR_NATIVE,"bad arguments num, expected 2, passed %d", params);

return 0;
}

new player_id = get_param(1);

if(!IsEntPlayer(player_id))
{
log_error(AMX_ERR_NATIVE,"player index %d, out of bounds", player_id);

return 0;
}

client_bonus[player_id] = get_param(2);

return 1;
}

//
// Sets player level
// @player - player id
// @level - level
// @force - force even if track paused
//
// @return
// AES_RT_NO - on track pause or player not tracked yet
// AES_RT_YES - on success
//
//native aes_set_player_level(player,level,bool:force = false)
public _mars_set_player_level(plugin,params)
{
if(params < 2)
{
log_error(AMX_ERR_NATIVE,"bad arguments num, expected 2, passed %d", params);

return 0;
}

new player_id = get_param(1);

if(!IsEntPlayer(player_id))
{
log_error(AMX_ERR_NATIVE,"player index %d, out of bounds", player_id);

return 0;
}

client_level[player_id] = min( get_param(2), min(array_size, MAX_RANGS) );

return 1;
}

//
// Sets player experience
// @player - player id
// @exp - experience value
// @no_forward - dont trigger forward functions on level up or level down
// @force - force even if track paused
//
// @return
// AES_RT_NO - on track pause or player not tracked yet
// AES_RT_YES - on success
// AES_RT_LEVLE_DOWN - on level down
// AES_RT_LEVEL_UP - on level up
//
//native aes_set_player_exp(player,Float:exp,bool:no_forward = false,bool:force = false)
public _mars_set_player_exp(plugin,params)
{
if(params < 2)
{
log_error(AMX_ERR_NATIVE,"bad arguments num, expected 2, passed %d", params);

return 0;
}

new player_id = get_param(1);

if(!IsEntPlayer(player_id))
{
log_error(AMX_ERR_NATIVE,"player index %d, out of bounds", player_id);

return 0;
}

client_kills[player_id] = min( floatround(get_param_f(2)), mars_exp[MAX_RANGS-1] );

return 1;
}

//
// Thread search for aes stats witch given array track_ids
// @id - player id
// @track_ids - dynamic array with track ids for search
// @callback - your callback function
// public my_callback(id,Array:aes_stats,stats_data[])
// @data[] - custom data
// @data_size - custom data size
//
// @return - true or false
//
//native aes_find_stats_thread(id = 0,Array:track_ids,callback[],data[] = "",datasize = 0)
public _mars_find_stats_thread() return false;

// aes exp cstrike

public Float:_mars_get_exp_for_stats_f(plugin_id,params)
{
if(params != 2)
{
log_error(AMX_ERR_NATIVE,"bad arguments num, expected 2, passed %d",params);
return 0.0;
}
return float(client_kills[get_param(1)]);//- 0.005; // в данный момент опыт и убийства - одно и тоже
}

public _mars_get_exp_for_stats(plugin_id,params)
{
if(params != 2)
{
log_error(AMX_ERR_NATIVE,"bad arguments num, expected 2, passed %d",params);
return 0;
}
return client_kills[get_param(1)];
}
#endif


Автор: minimiller
Перевод и редактирование: DJ_WEST

Список ошибок:

CODE

/*001*/ «expected token: «%s», but found «%s»n»,
/*002*/ «only a single statement (or expression) can follow each «case»n»,
/*003*/ «declaration of a local variable must appear in a compound blockn»,
/*004*/ «function «%s» is not implementedn»,
/*005*/ «function may not have argumentsn»,
/*006*/ «must be assigned to an arrayn»,
/*007*/ «operator cannot be redefinedn»,
/*008*/ «must be a constant expression; assumed zeron»,
/*009*/ «invalid array size (negative or zero)n»,
/*010*/ «invalid function or declarationn»,
/*011*/ «invalid outside functionsn»,
/*012*/ «invalid function call, not a valid addressn»,
/*013*/ «no entry point (no public functions)n»,
/*014*/ «invalid statement; not in switchn»,
/*015*/ «»default» case must be the last case in switch statementn»,
/*016*/ «multiple defaults in «switch»n»,
/*017*/ «undefined symbol «%s»n»,
/*018*/ «initialization data exceeds declared sizen»,
/*019*/ «not a label: «%s»n»,
/*020*/ «invalid symbol name «%s»n»,
/*021*/ «symbol already defined: «%s»n»,
/*022*/ «must be lvalue (non-constant)n»,
/*023*/ «array assignment must be simple assignmentn»,
/*024*/ «»break» or «continue» is out of contextn»,
/*025*/ «function heading differs from prototypen»,
/*026*/ «no matching «#if…»n»,
/*027*/ «invalid character constantn»,
/*028*/ «invalid subscript (not an array or too many subscripts): «%s»n»,
/*029*/ «invalid expression, assumed zeron»,
/*030*/ «compound statement not closed at the end of filen»,
/*031*/ «unknown directiven»,
/*032*/ «array index out of bounds (variable «%s»)n»,
/*033*/ «array must be indexed (variable «%s»)n»,
/*034*/ «argument does not have a default value (argument %d)n»,
/*035*/ «argument type mismatch (argument %d)n»,
/*036*/ «empty statementn»,
/*037*/ «invalid string (possibly non-terminated string)n»,
/*038*/ «extra characters on linen»,
/*039*/ «constant symbol has no sizen»,
/*040*/ «duplicate «case» label (value %d)n»,
/*041*/ «invalid ellipsis, array size is not knownn»,
/*042*/ «invalid combination of class specifiersn»,
/*043*/ «character constant exceeds range for packed stringn»,
/*044*/ «positional parameters must precede all named parametersn»,
/*045*/ «too many function argumentsn»,
/*046*/ «unknown array size (variable «%s»)n»,
/*047*/ «array sizes do not match, or destination array is too smalln»,
/*048*/ «array dimensions do not matchn»,
/*049*/ «invalid line continuationn»,
/*050*/ «invalid rangen»,
/*051*/ «invalid subscript, use «[ ]» operators on major dimensionsn»,
/*052*/ «multi-dimensional arrays must be fully initializedn»,
/*053*/ «exceeding maximum number of dimensionsn»,
/*054*/ «unmatched closing bracen»,
/*055*/ «start of function body without function headern»,
/*056*/ «arrays, local variables and function arguments cannot be public (variable «%s»)n»,
/*057*/ «unfinished expression before compiler directiven»,
/*058*/ «duplicate argument; same argument is passed twicen»,
/*059*/ «function argument may not have a default value (variable «%s»)n»,
/*060*/ «multiple «#else» directives between «#if … #endif»n»,
/*061*/ «»#elseif» directive follows an «#else» directiven»,
/*062*/ «number of operands does not fit the operatorn»,
/*063*/ «function result tag of operator «%s» must be «%s»n»,
/*064*/ «cannot change predefined operatorsn»,
/*065*/ «function argument may only have a single tag (argument %d)n»,
/*066*/ «function argument may not be a reference argument or an array (argument «%s»)n»,
/*067*/ «variable cannot be both a reference and an array (variable «%s»)n»,
/*068*/ «invalid rational number precision in #pragman»,
/*069*/ «rational number format already definedn»,
/*070*/ «rational number support was not enabledn»,
/*071*/ «user-defined operator must be declared before use (function «%s»)n»,
/*072*/ «»sizeof» operator is invalid on «function» symbolsn»,
/*073*/ «function argument must be an array (argument «%s»)n»,
/*074*/ «#define pattern must start with an alphabetic charactern»,
/*075*/ «input line too long (after substitutions)n»,
/*076*/ «syntax error in the expression, or invalid function calln»,
/*077*/ «malformed UTF-8 encoding, or corrupted file: %sn»,
/*078*/ «function uses both «return» and «return <value>»n»,
/*079*/ «inconsistent return types (array & non-array)n»,
/*080*/ «unknown symbol, or not a constant symbol (symbol «%s»)n»,
/*081*/ «cannot take a tag as a default value for an indexed array parameter (symbol «%s»)n»,
/*082*/ «user-defined operators and native functions may not have statesn»,
/*083*/ «a function may only belong to a single automaton (symbol «%s»)n»,
/*084*/ «state conflict: one of the states is already assigned to another implementation (symbol «%s»)n»,
/*085*/ «no states are defined for function «%s»n»,
/*086*/ «unknown automaton «%s»n»,
/*087*/ «unknown state «%s» for automaton «%s»n»,
/*088*/ «number of arguments does not match definitionn»

Разбор ошибок
Рассмотрим пример нахождения и самостоятельного решения ошибок при компиляции.
Допустим у нас есть ошибка:

Цитата

C:AMXXexample.sma(107) : error 035: argument type mismatch (argument 2)

Теперь давайте попытаемся разобрать эту ошибку по частям:
1) C:AMXXexample.sma — это директория, где находится исходник (.sma) нашего плагина.
2) (107) — это номер строки, в которой есть ошибка. Большинство современных редакторов текста имеют панель с пронумерованными строками (Notepad++, AMXX-Studio и другие).
3) error 035 — это код ошибки (список ошибок указан выше).
4) argument type mismatch — это описание ошибки с кодом, указанным до этого. В данном случае нам говорится, что «аргумент имеет неверный тип».
5) (argument 2) — это более подробное описание ошибки. В данном случае нам указывается, что ошибка во 2 аргументе.

Итого, получаем: в файле example.sma, который находится в директории C:AMXX, в строке под номером 107 есть ошибка с кодом 035, которая означает, что аргумент 2 имеет неверный тип данных.

Решение ошибок
Теперь попытаемся исправить нашу ошибку. Идем в строку под номером 107 и видим следующий код:

Код

client_print(0, «Welcome to the server!»)

Идем на http://www.amxmodx.org/funcwiki.php?go=func&id=22 и читаем описание функции:

Цитата

client_print — Sends a message to a player.

Syntax:
client_print ( index, type, const message[], … )

id is a player index from 1 to 32. If 0, the message will be sent to all players.

The type is one of three types:
print_chat — chat text
print_console — console message
print_notify — console in dev mode
print_center — center say

Смотрим синтаксис команды client_print и видим, что первый аргумент index — это номер игрока (id), который может быть от 1 до 32, если же он 0, то сообщение будет отсылаться всем игрокам на сервере. Второй аргумент type — это тип сообщения, который может быть:

Цитата

print_chat — текст в чат
print_console — текст в консоль
print_notify — текст в консоль в режиме разработчика
print_center — текст по центру

Третий аргумент message — это и есть текст нашего сообщения. Теперь вернемся, к нашему, коду. Мы видим, что у нас нет второго аргумента (тип сообщения), а сразу идет текст сообщения, исправляем на:

Код

client_print(0, print_center, «Welcome to the server!»)

Теперь компиляция прошла успешно.

Описание ошибок:

error 001: expected token: «X», but found «Y»

Ошибка означает, что не найден X, когда найден Y. Наиболее часто возникает, когда забывают поставить недостающие знаки ; { } ( ).
Пример ошибки:

Код

public Function(id)
{
    if (is_user_bot(id)
    return PLUGIN_HANDLED

        // код

        return PLUGIN_CONTINUE
}

error 017: undefined symbol «X»

Ошибка означает, что X — неизвестный сивол/команда/переменная/функция. Поэтому такую функцию или переменную нужно объявить перед использованием. Например, функция is_user_hacker не существует.
Пример ошибки:

Код

public Function(id)
{
    if (is_user_hacker(id))
    return PLUGIN_HANDLED

        // код

        return PLUGIN_CONTINUE
}

error 032: array index out of bounds (variable X)

Ошибка означает, что в мы вышли за предел размера массива X.
Пример ошибки:

Код

new s_Name[32]
s_Name[33] = «*»

error 033: array must be indexed (variable X)

Ошибка означает, что массив должен быть проиндексирован. Например, мы не указали размер массива при его объявлении.
Пример ошибки:

Код

new s_String = «My string»

error 035: argument type mismatch (argument X)

Ошибка означает, что аргумент X имеет неверный тип данных. Например, когда вместо целочисленного аргумента передаем строку.
Пример ошибки:

Код

public Function1(id)
{
    Function2(id, «10»)
}

public Function2(id, count)
{
    // код
}

error 040: duplicate «case» label (value X)

Ошибка означает, что имеется дубль оператора case со значением X.
Пример ошибки:

Код

public Function(id)
{
    switch(count)
    {
        case 1: count += 1
    case 2: count += 2
    case 2: count += 3
    }
}

error 075: input line too long (after substitutions)

Ошибка означает, что указанная строка слишком длинная. Например, около 500 символов.
Пример ошибки:

Код

public Function(id)
{
    server_print(«AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
A
AAAAAAAAAAAAAAAAAAA»)
}

error 078: function uses both «return» and «return <value>»

Ошибка означает, что функция использует, как return, так и return <значение>.
Пример ошибки:

Код

public Function(id)
{
    if (is_user_alive(id))    
        return

        return PLUGIN_HANDLED
}

error 088: number of arguments does not match definition

Ошибка означает, что количество переданных аргументов не соответсвует количеству объявленных аргументов.
Пример ошибки:

Код

public Function1(id)
{
    Function2(id)
}

public Function2(id, count)
{
    // код
}

Источник: http://amx-x.ru

Contents

  • 1 Общие термины
  • 2 Основные ошибки
  • 3 BSP (vbsp.exe)
  • 4 VIS (vvis.exe)
  • 5 RAD (vrad.exe)
  • 6 См. также
  • 7 Внешние ссылки

Note.png Примечание: Данная статья описывает компиляцию карт в редакторе Hammer, а не в исходном коде.

Общие термины

  • Node – Браш, сторона, зона, место и т.д., которые рассчитывает компилятор.
  • XXX – Номер браша или другой уникальный идентификатор.

Основные ошибки

The system cannot find the file specified (Система не находит указанный файл)
Ошибка возникает в конце компиляции, когда отсутствует файл .BSP, который должен быть скопирован, или не существует каталога назначения. Часто это означает, что VBSP перед записью файла .BSP столкнулся с ошибкой. Проверьте вывод VBSP на наличие ошибок.
Убедитесь, что имя файла введено правильно, без точек, тире, пробелов и т.д. Если ошибка остаётся, введите расширение файла вручную и сохраните его. Проверьте журнал ошибок в Хаммере, зачастую он указывает правильное направление.
Если у вас нет каталога, куда компилятор должен поместить файл .BSP, то ошибка возникает как результат неспособности Хаммера создавать папки. Чаще всего, такое происходит после неожиданной перезагрузки компьютера, его смерти, действия вирусов или других неприятностей. В этом случае, вам нужно просто запустить игру, или с помощью диспетчера файлов создать папку, которая указана в качестве вывода файла .BSP.
Error opening mapname.bsp (Ошибка открытия mapname.bsp)
Компилятор не находит файл .BSP, или он повреждён. Возможно, произошла ошибка при создании Vbsp. Проверьте путь к файлу.
SteamStartup() failed
SteamStartup(0xf,0x12eac4) failed with error 1: The registry is in use by another process, timeout expired (регистр занят другим процессом)
Повторите компиляцию или перезапустите Steam.
WARNING node with unbounded volume (узел с бесконечным объёмом)
Это происходит, когда часть вашей карты касается края сетки Хаммера или находится за её переделами. Отодвиньтесь от краёв сетки, и перекомпилируйте карту.
Также ошибку вызывает карта, содержащая func_instance с включенным в ней кордоном.

BSP (vbsp.exe)

**** leaked ****
Самая распространённая ошибка. На вашей карте минимум одна утечка. Внутренность карты смотрит во внешний мир (в «пустоту»). Загрузите в Хаммере pointfile. Через место утечки будет проходить красная линия, начинаясь от ближайшей энтити. С помощью 3D-окна устраните утечку, и перекомпилируйте карту.
Brush XXX
WARNING, microbrush (браш ХХХ: микробраш)
Браш слишком мал для компиляции (обычно, менее 1 единицы Хаммера). Найдите браш с указанным номером. Удалите его и создайте в большем масштабе.
Brush XXX
FloatPlane: bad normal (браш ххх: не в порядке)
Браш имеет лишнюю вершину на «плоской» грани. Возможно, это результат работы с Vertex Tool. Найдите браш с указанным номером. Снова задействуйте Vertex Tool, чтобы объединить лишнюю вершину с другой.
Can’t find surfaceprop for material, using default (не найден материал поверхности)
Это текстура, которая не имеет свойств материала. Возможно, вы наложили на браш текстуру «модели» . С помощью диалога замены текстуры, найдите «модельную» текстуру, и замените её. Если вы используете собственные текстуры, убедитесь, что они имеют значение $surfaceprop.
Error displacement found on a(n) (entityname) entity — not supported (деформированная энтитя – не поддерживается)
Брашевая энтитя на вашей карте имеет деформацию. Брашевые энтити нельзя деформировать. Найдите их и удалите деформации, или преобразуйте в обычные браши.
Error! To use model «filename.mdl» with static_prop, it must be compiled with $staticprop!
Это когда prop_static использует физическую модель. Модель не появится в игре. Вместо этого используйте prop_physics или prop_dynamic_override.
Error loading studio model «»! (ошибка загрузка модели)
На вашей карте есть «prop_» с отсутствующей моделью или моделью с неправильным именем.
Face List Count >= OVERLAY_BSP_FACE_COUNT (ошибка оверлея)
На поверхности слишком много оверлеев, или оверлей наложен на большое число поверхностей.
Также возможно, что вы сделали низкое значение lightmap (1-8) на огромном браше с несколькими info_overlays.
material «» not found (материал не найден)
Поверхность или оверлей используют отсутствующую текстуру или неверное имя текстуры.
Memory leak
mempool blocks left in memory: (утечка памяти)
Хроническая ошибка, которая не влияет на вашу карту. Игнорируйте.
Bad planenum
Редактор неправильно сохранил файл – пересохранитесь и скомпилируйте карту снова. Также возможно, что в результате неудачного вырезания некоторые браши налезают один на другой.
Tried parent
Узел в компиляции не имеет родителя – весьма редко, но может быть вызвано ошибкой при работе с вершинами, которые переходят систему безопасности Хаммера. Он видит коробку только как одну сторону.
XXX with splits
Поверхность браша разрезана на множество мелких частей. The best way to try and fix it is to look for tiny brush penetrations, such as the tip of a spike on touching the side of a 1 x 1 x 1 brush.
vbsp.exe crash potential causes (no error message) (vbsp.exe случайно закрылся)
На браше с деформацией используется текстура playerclip.

Note.png Примечание: Чтобы найти ошибку, снимите флажки со всех visgroups, кроме «Clip/player»

.

VIS (vvis.exe)

loadportals
couldn’t read filename.prt
Vvis не нашёл файл порталов, созданный vbsp. Либо vbsp его не создал из-за ошибки (утечки?), либо vvis использует неправильный путь к файлу. (Убедитесь, что имя файла не содержит заглавных букв.)

Или: вы создали несколько новых Areaportals, но скомпилировали BSP «Only entities» (только энтити).

Или: вы поместили/сдвинули энтитю light_environment за пределы скайбокса.

Leaf (portal XXX) with too many portals.
Присутствует область со слишком сложной геометрией. Попробуйте упростить некоторые комнаты и коридоры, а также сделайте маленькие структуры деталью.

RAD (vrad.exe)

Texture axis perpendicular to face at (XXX, XXX, XXX)
Поверхность с указанными координатами имеет неправильные значения текстуры. Найдите эту поверхность и убедитесь, что в графе Align стоит галочка World.
WARNING: Too many light styles on a face (XXX,XXX,XXX)
Поверхность с указанными координатами имеет слишком сильный «эффект» освещённости. Он включает в себя именованные огни (которые компилируются как в выключенном, так и включённом состоянии), или же огни с эффектом, например, мерцания. Удалите некоторые из них, отключите мерцание или уберите у них имена.

Note.png Примечание: Поверхность может быть освещена не более чем 4 огнями с разными именами. Это означает, что стилей огней может быть сколько угодно, но имён только 4.

<number> degenerate faces

Todo:Тесты показали, что это связано с прозрачными материалами. Найдите браши и замените на них текстуры, чтобы исключить ошибку.

warning — face vectors parallel to face normal. bad lighting will be produced
Может возникать, когда к текстуре применяется выравнивание (Alt + RMB), и чтобы исправить проблему, найдите этот браш, примените выравнивание World или Face, и вручную поменяйте настройки текстуры.

См. также

  • Теория компиляции карт

Внешние ссылки

  • Interlopers.net — Automatic Error Check — you can also upload your compile log.
  • HL.LOGOUT.FR — Automatic Error Check — an alternative to the above tool (in French).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <windows.h>
 
/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
 
/*  Make the class name into a global variable  */
char szClassName[ ] = "WindowsApp";
 
int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)
 
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
 
    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);
 
    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
 
    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;
 
    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );
 
    /* Make the window visible on the screen */
    ShowWindow (hwnd, nFunsterStil);
 
    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
 
    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}
 
 
/*  This function is called by the Windows function DispatchMessage()  */
 
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }
 
    return 0;
}

Понравилась статья? Поделить с друзьями:
  • Deus ex ошибка при запуске приложения 0xc0000142
  • Deus ex ошибка 0xc0000142 при запуске игры
  • Deus ex revision ошибка
  • Deus ex mankind divided ошибка при запуске приложения
  • Deus ex mankind divided ошибка драйвера дисплея