После исправления не компилируется

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
29
Реакции
15
Основная информация

Проблема: После исправления не компилируется

Ошибка:
Ошибка компиляции:
Welcome to the AMX Mod X 1.8.2 Compiler.
Copyright (c) 1997-2013 ITB CompuPhase, AMX Mod X Team

chatmanager.sma(496) : error 017: undefined symbol "g_iBlackListSize"
chatmanager.sma(498) : error 017: undefined symbol "g_aBlackList"
chatmanager.sma(498) : warning 215: expression has no effect
chatmanager.sma(498) : warning 215: expression has no effect
chatmanager.sma(498) : warning 215: expression has no effect
chatmanager.sma(498) : error 001: expected token: ";", but found ")"
chatmanager.sma(498) : error 029: invalid expression, assumed zero
chatmanager.sma(498) : fatal error 107: too many error messages on one line

Compilation aborted.
5 Errors.
Done.
Дополнительная информация

Amx Mod X: 1.8.2

Компилятор: WEB-компилятор

Исходник:
Код:
/**
* Credits: BlackRose, Ian Cammarata, PRoSToTeM@.
*/
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

#define PLUGIN "Chat Manager"
#define VERSION "1.1.1-11"
#define AUTHOR "Mistrick"

#pragma semicolon 1

#define ADMIN_FLAG ADMIN_BAN

//Colors: DEFAULT, TEAM, GREEN
#define PRETEXT_COLOR DEFAULT
#define PLAYER_CHAT_COLOR DEFAULT
#define ADMIN_CHAT_COLOR GREEN
#define PLAYER_NAME_COLOR TEAM
#define ADMIN_NAME_COLOR GREEN

#define FUNCTION_ALL_CHAT

#if defined FUNCTION_ALL_CHAT
//Flags: ALIVE_SEE_DEAD, DEAD_SEE_ALIVE, TEAM_SEE_TEAM
#define PLAYER_CHAT_FLAGS (ALIVE_SEE_DEAD|DEAD_SEE_ALIVE)
#define ADMIN_CHAT_FLAGS (ALIVE_SEE_DEAD|DEAD_SEE_ALIVE|TEAM_SEE_TEAM)
#endif

#define FUNCTION_PLAYER_PREFIX
//#define FUNCTION_ADD_TIME_CODE
#define FUNCTION_LOG_MESSAGES
#define FUNCTION_HIDE_SLASH
//#define FUNCTION_TRANSLITE
//#define FUNCTION_AES_TAGS
#define FUNCTION_BETA_SUPPORT

#define FUNCTION_ADD_STEAM_PREFIX

#if defined FUNCTION_ADD_STEAM_PREFIX
new const STEAM_PREFIX[] = "^1[^4Steam^1] ";
#endif

#define PREFIX_MAX_LENGTH 32
#define AES_MAX_LENGTH 32

//DONT CHANGE!!!
#define COLOR_BUFFER 6
#define TEXT_LENGTH 128
#define MESSAGE_LENGTH 189

#if defined FUNCTION_AES_TAGS
native aes_get_player_stats(id,data[4]);
native aes_get_level_name(lvlnum,level[],len,idLang = 0);
new const AES_TAG_FORMAT[] = "^1[^3%s^1] ";
#endif

const ALIVE_SEE_DEAD = (1 << 0);
const DEAD_SEE_ALIVE = (1 << 1);
const TEAM_SEE_TEAM = (1 << 2);

enum
{
DEFAULT = 1,
TEAM = 3,
GREEN = 4
};

enum _:FLAG_PREFIX_INFO
{
m_Flag,
m_Prefix[PREFIX_MAX_LENGTH]
};

new const g_TextChannels[][] =
{
"#Cstrike_Chat_All",
"#Cstrike_Chat_AllDead",
"#Cstrike_Chat_T",
"#Cstrike_Chat_T_Dead",
"#Cstrike_Chat_CT",
"#Cstrike_Chat_CT_Dead",
"#Cstrike_Chat_Spec",
"#Cstrike_Chat_AllSpec"
};

new g_SayText;
new g_sMessage[MESSAGE_LENGTH];

#if defined FUNCTION_PLAYER_PREFIX
new const FILE_PREFIXES[] = "chatmanager_prefixes.ini";

new g_bCustomPrefix[33], g_sPlayerPrefix[33][PREFIX_MAX_LENGTH];
new Trie:g_tSteamPrefixes, g_iTrieSteamSize;
new Trie:g_tNamePrefixes, g_iTrieNameSize;
new Array:g_aFlagPrefixes, g_iArrayFlagSize;
#endif

#if defined FUNCTION_LOG_MESSAGES
new g_szLogFile[128];
#endif

#if defined FUNCTION_TRANSLITE
new g_bTranslite[33];
#endif

#if defined FUNCTION_ADD_STEAM_PREFIX
new g_bSteamPlayer[33];
#endif

enum Forwards
{
SEND_MESSAGE
};

enum _:MessageReturn
{
MESSAGE_IGNORED,
MESSAGE_CHANGED,
MESSAGE_BLOCKED
};

new g_iForwards[Forwards];
new g_sNewMessage[MESSAGE_LENGTH];

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR);

#if defined FUNCTION_PLAYER_PREFIX
register_concmd("cm_set_prefix", "Command_SetPrefix", ADMIN_RCON, "<name or #userid> <prefix>");
#endif

#if defined FUNCTION_TRANSLITE
register_clcmd("say /rus", "Command_LangChange");
register_clcmd("say /eng", "Command_LangChange");
#endif

register_clcmd("say", "Command_SayHandler");
register_clcmd("say_team", "Command_SayHandler");

register_message((g_SayText = get_user_msgid("SayText")), "Message_SayText");

// cm_player_send_message(id, message[], team_chat);
g_iForwards[SEND_MESSAGE] = CreateMultiForward("cm_player_send_message", ET_STOP, FP_CELL, FP_STRING, FP_CELL);
}
public plugin_cfg()
{
#if defined FUNCTION_LOG_MESSAGES
new szDir[] = "addons/amxmodx/logs/chatmanager";
if(!dir_exists(szDir))
{
mkdir(szDir);
}
new szDate[16]; get_time("%Y%m%d", szDate, charsmax(szDate));
formatex(g_szLogFile, charsmax(g_szLogFile), "%s/chatlog_%s.html", szDir, szDate);
if(!file_exists(g_szLogFile))
{
write_file(g_szLogFile, "<meta charset=utf-8><title>ChatManager Log</title>");
}
#endif

#if defined FUNCTION_PLAYER_PREFIX
LoadPlayersPrefixes();
#endif

#if defined FUNCTION_AES_TAGS
register_dictionary("aes.txt");
#endif
}
#if defined FUNCTION_PLAYER_PREFIX
LoadPlayersPrefixes()
{
new szDir[128]; get_localinfo("amxx_configsdir", szDir, charsmax(szDir));
new szFile[128]; formatex(szFile, charsmax(szFile), "%s/%s", szDir, FILE_PREFIXES);

if(!file_exists(szFile))
{
log_amx("Prefixes file doesn't exist!");
return;
}

g_tSteamPrefixes = TrieCreate();
g_tNamePrefixes = TrieCreate();
g_aFlagPrefixes = ArrayCreate(FLAG_PREFIX_INFO);

new file = fopen(szFile, "rt");

if(file)
{
new szText[128], szType[6], szAuth[32], szPrefix[PREFIX_MAX_LENGTH + COLOR_BUFFER], eFlagPrefix[FLAG_PREFIX_INFO];
while(!feof(file))
{
fgets(file, szText, charsmax(szText));
parse(szText, szType, charsmax(szType), szAuth, charsmax(szAuth), szPrefix, charsmax(szPrefix));

if(!szType[0] || szType[0] == ';' || !szAuth[0] || !szPrefix[0]) continue;

replace_color_tag(szPrefix);

switch(szType[0])
{
case 's'://steam
{
TrieSetString(g_tSteamPrefixes, szAuth, szPrefix);
g_iTrieSteamSize++;
}
case 'n'://name
{
TrieSetString(g_tNamePrefixes, szAuth, szPrefix);
g_iTrieNameSize++;
}
case 'f'://flag
{
eFlagPrefix[m_Flag] = read_flags(szAuth);
copy(eFlagPrefix[m_Prefix], charsmax(eFlagPrefix[m_Prefix]), szPrefix);
ArrayPushArray(g_aFlagPrefixes, eFlagPrefix);
g_iArrayFlagSize++;
}
}
}
fclose(file);
}
}
#endif
public plugin_natives()
{
register_native("cm_set_player_message", "native_set_player_message");
}
public native_set_player_message(plugin, params)
{
enum { arg_new_message = 1 };
get_string(arg_new_message, g_sNewMessage, charsmax(g_sNewMessage));
}
public client_putinserver(id)
{
#if defined FUNCTION_TRANSLITE
g_bTranslite[id] = false;
#endif

#if defined FUNCTION_PLAYER_PREFIX
g_sPlayerPrefix[id] = "";
g_bCustomPrefix[id] = false;

new szSteam[32]; get_user_authid(id, szSteam, charsmax(szSteam));
if(g_iTrieSteamSize && TrieKeyExists(g_tSteamPrefixes, szSteam))
{
g_bCustomPrefix[id] = true;
TrieGetString(g_tSteamPrefixes, szSteam, g_sPlayerPrefix[id], charsmax(g_sPlayerPrefix[]));
}
#endif

#if defined FUNCTION_ADD_STEAM_PREFIX
g_bSteamPlayer[id] = is_user_steam(id);
#endif
}
#if defined FUNCTION_PLAYER_PREFIX
public Command_SetPrefix(id, level, cid)
{
if(!cmd_access(id, level, cid, 2)) return PLUGIN_HANDLED;

new szArg[32]; read_argv(1, szArg, charsmax(szArg));
new player = cmd_target(id, szArg, CMDTARGET_ALLOW_SELF);

if(!player) return PLUGIN_HANDLED;

new szPrefix[PREFIX_MAX_LENGTH + COLOR_BUFFER]; read_argv(2, szPrefix, charsmax(szPrefix));
replace_color_tag(szPrefix);

console_print(id, "You changed player prefix from %s to %s.", g_sPlayerPrefix[player], szPrefix);

copy(g_sPlayerPrefix[player], charsmax(g_sPlayerPrefix[]), szPrefix);
g_bCustomPrefix[player] = true;

return PLUGIN_HANDLED;
}
#endif
#if defined FUNCTION_TRANSLITE
public Command_LangChange(id)
{
g_bTranslite[id] = !g_bTranslite[id];
color_print(id, "^4[ChatManager]^1 You changed language to ^3%s^1.", g_bTranslite[id] ? "rus" : "eng");
return PLUGIN_HANDLED;
}
#endif
public Command_SayHandler(id)
{
if (!is_user_connected(id)) return PLUGIN_HANDLED;

new message[TEXT_LENGTH];

read_argv(0, message, charsmax(message));
new is_team_msg = (message[3] == '_');

read_args(message, charsmax(message));
remove_quotes(message);
replace_wrong_simbols(message);
trim(message);

if(!message[0]) return PLUGIN_HANDLED;

#if defined FUNCTION_HIDE_SLASH
if(message[0] == '/') return PLUGIN_HANDLED_MAIN;
#endif

new flags = get_user_flags(id);

new name[32]; get_user_name(id, name, charsmax(name));

#if defined FUNCTION_PLAYER_PREFIX
if(!g_bCustomPrefix[id])
{
if(g_iTrieNameSize && TrieKeyExists(g_tNamePrefixes, name))
{
TrieGetString(g_tNamePrefixes, name, g_sPlayerPrefix[id], charsmax(g_sPlayerPrefix[]));
}
else if(g_iArrayFlagSize)
{
new eFlagPrefix[FLAG_PREFIX_INFO], bFoundPrefix = false;
for(new i; i < g_iArrayFlagSize; i++)
{
ArrayGetArray(g_aFlagPrefixes, i, eFlagPrefix);
if(check_flags(flags, eFlagPrefix[m_Flag]))
{
bFoundPrefix = true;
copy(g_sPlayerPrefix[id], charsmax(g_sPlayerPrefix[]), eFlagPrefix[m_Prefix]);
break;
}
}

if(!bFoundPrefix)
{
g_sPlayerPrefix[id] = "";
}
}
}
#endif

#if defined FUNCTION_TRANSLITE
if(g_bTranslite[id])
{
if(message[0] == '/')
{
copy(message, charsmax(message), message[1]);
}
else
{
new szTranslitedText[TEXT_LENGTH];
translite_string(szTranslitedText, charsmax(szTranslitedText), message);
copy(message, charsmax(message), szTranslitedText);
}
}
#endif

new ret; ExecuteForward(g_iForwards[SEND_MESSAGE], ret, id, message, is_team_msg);

if(ret)
{
if(ret == MESSAGE_BLOCKED)
{
return PLUGIN_HANDLED;
}
copy(message, charsmax(message), g_sNewMessage);
}

if(!message[0])
{
return PLUGIN_HANDLED;
}

new name_color = flags & ADMIN_FLAG ? ADMIN_NAME_COLOR : PLAYER_NAME_COLOR;
new chat_color = flags & ADMIN_FLAG ? ADMIN_CHAT_COLOR : PLAYER_CHAT_COLOR;

new time_code[16]; get_time("[%H:%M:%S] ", time_code, charsmax(time_code));

new is_sender_alive = is_user_alive(id);
new CsTeams:sender_team = cs_get_user_team(id);

new channel = get_user_text_channel(is_sender_alive, is_team_msg, sender_team);

FormatMessage(id, sender_team, channel, name_color, chat_color, time_code, message);

#if defined FUNCTION_ALL_CHAT
new players[32], players_num; get_players(players, players_num, "ch");
new player, is_player_alive, CsTeams:player_team, player_flags;

for(new i; i < players_num; i++)
{
player = players;

if(player == id) continue;

is_player_alive = is_user_alive(player);
player_team = cs_get_user_team(player);
player_flags = get_user_flags(player) & ADMIN_FLAG ? ADMIN_CHAT_FLAGS : PLAYER_CHAT_FLAGS;

if(player_flags & ALIVE_SEE_DEAD && !is_sender_alive && is_player_alive && (!is_team_msg || is_team_msg && sender_team == player_team) //flag ALIVE_SEE_DEAD
|| player_flags & DEAD_SEE_ALIVE && is_sender_alive && !is_player_alive && (!is_team_msg || is_team_msg && sender_team == player_team) //flag DEAD_SEE_ALIVE
|| player_flags & TEAM_SEE_TEAM && is_team_msg && sender_team != player_team) //flag TEAM_SEE_TEAM
{
emessage_begin(MSG_ONE, g_SayText, _, player);
ewrite_byte(id);
ewrite_string(g_TextChannels[channel]);
ewrite_string("");
ewrite_string("");
emessage_end();
}
}
#endif

#if defined FUNCTION_LOG_MESSAGES
static const szTeamColor[CsTeams][] = {"gray", "red", "blue", "gray"};
new szLogMessage[256];
formatex(szLogMessage, charsmax(szLogMessage), "<br><font color=black>%s %s %s <font color=%s><b>%s</b> </font>:</font><font color=%s> %s </font>", time_code, is_sender_alive ? "" : (_:sender_team == 1 || _:sender_team == 2 ? "*DEAD*" : "*SPEC*"), is_team_msg ? "(TEAM)" : "", szTeamColor[sender_team], name, chat_color == GREEN ? "green" : "#FFB41E", message);
write_file(g_szLogFile, szLogMessage);
#endif

return PLUGIN_CONTINUE;
}
public FormatMessage(sender, CsTeams:sender_team, channel, name_color, chat_color, time_code[], message[])
{
static const szTeamNames[CsTeams][] = {"(Spectator)", "(Terrorist)", "(Counter-Terrorist)", "(Spectator)"};

new szText[MESSAGE_LENGTH], len = 1;
szText[0] = PRETEXT_COLOR;

if(channel % 2)
{
len += formatex(szText[len], charsmax(szText) - len, "%s", channel != 7 ? "*DEAD*" : "*SPEC*");
}

if(channel > 1 && channel < 7)
{
len += formatex(szText[len], charsmax(szText) - len, "%s ", szTeamNames[sender_team]);
}
else if(channel)
{
len += formatex(szText[len], charsmax(szText) - len, " ");
}

#if defined FUNCTION_ADD_TIME_CODE
len += formatex(szText[len], charsmax(szText) - len, "%s", time_code);
#endif

for(new i, len, place, word[64]; i < g_iBlackListSize; i++)
{
ArrayGetString(g_aBlackList, i, word, charsmax(word));
len = strlen(word);
while((place = containi(low_message, word)) > -1)
{
if((!place || is_separator(low_message[place - 1]))
{
changed = true;
replace_blocked_word(new_message, strlen(new_message), place, len);
replace_blocked_word(low_message, strlen(low_message), place, len);
}
}
}


is_separator(ch)
{
new symbols[] = {' ', ',', '.', ':', ';', '?', '!'};
for(new i; i < sizeof symbols; i++)
{
if(ch == symbols) return true;
}
return false;
}

#if defined FUNCTION_AES_TAGS
new data[4], szAesTag[AES_MAX_LENGTH]; aes_get_player_stats(sender, data); aes_get_level_name(data[1], szAesTag, charsmax(szAesTag));
len += formatex(szText[len], charsmax(szText) - len, AES_TAG_FORMAT, szAesTag);
#endif

#if defined FUNCTION_PLAYER_PREFIX
len += formatex(szText[len], charsmax(szText) - len, "%s", g_sPlayerPrefix[sender]);
#endif

#if defined FUNCTION_BETA_SUPPORT
new name[32]; get_user_name(sender, name, charsmax(name));
len += formatex(szText[len], charsmax(szText) - len, "%c%s^1 :%c %s", name_color, name, chat_color, message);
#else
len += formatex(szText[len], charsmax(szText) - len, "%c%%s1^1 :%c %s", name_color, chat_color, message);
#endif

copy(g_sMessage, charsmax(g_sMessage), szText);
}
public Message_SayText(msgid, dest, receiver)
{
if(get_msg_args() != 4) return PLUGIN_CONTINUE;

new str2[22]; get_msg_arg_string(2, str2, charsmax(str2));

new channel = get_msg_channel(str2);

if(!channel) return PLUGIN_CONTINUE;

new str3[2]; get_msg_arg_string(3, str3, charsmax(str3));

if(str3[0]) return PLUGIN_CONTINUE;

set_msg_arg_string(2, g_sMessage);
set_msg_arg_string(4, "");

return PLUGIN_CONTINUE;
}
get_msg_channel(str[])
{
for(new i; i < sizeof(g_TextChannels); i++)
{
if(equal(str, g_TextChannels))
{
return i + 1;
}
}
return 0;
}
stock get_user_text_channel(is_sender_alive, is_team_msg, CsTeams:sender_team)
{
if (is_team_msg)
{
switch(sender_team)
{
case CS_TEAM_T:
{
return is_sender_alive ? 2 : 3;
}
case CS_TEAM_CT:
{
return is_sender_alive ? 4 : 5;
}
default:
{
return 6;
}
}
}
return is_sender_alive ? 0 : (sender_team == CS_TEAM_SPECTATOR ? 7 : 1);
}
stock replace_wrong_simbols(string[])
{
new len = 0;
for(new i; string != EOS; i++)
{
if(string == '%' || string == '#' || 0x01 <= string <= 0x04) continue;
string[len++] = string;
}
string[len] = EOS;
}
#if defined FUNCTION_PLAYER_PREFIX
replace_color_tag(string[])
{
new len = 0;
for (new i; string != EOS; i++)
{
if (string == '!')
{
switch (string[++i])
{
case 'd': string[len++] = 0x01;
case 't': string[len++] = 0x03;
case 'g': string[len++] = 0x04;
case EOS: break;
default: string[len++] = string;
}
}
else
{
string[len++] = string;
}
}
string[len] = EOS;
}
#endif
stock translite_string(string[], size, source[])
{
static const table[][] =
{
"Э", "#", ";", "%", "?", "э", "(", ")", "*", "+", "б", "-", "ю", ".", "0", "1", "2", "3", "4",
"5", "6", "7", "8", "9", "Ж", "ж", "Б", "=", "Ю", ",", "^"", "Ф", "И", "С", "В", "У", "А", "П",
"Р", "Ш", "О", "Л", "Д", "Ь", "Т", "Щ", "З", "Й", "К", "Ы", "Е", "Г", "М", "Ц", "Ч", "Н", "Я",
"х", "\", "ъ", ":", "_", "ё", "ф", "и", "с", "в", "у", "а", "п", "р", "ш", "о", "л", "д", "ь",
"т", "щ", "з", "й", "к", "ы", "е", "г", "м", "ц", "ч", "н", "я", "Х", "/", "Ъ", "Ё"
};

new len = 0;
for (new i = 0; source != EOS && len < size; i++)
{
new ch = source;

if ('"' <= ch <= '~')
{
ch -= '"';
string[len++] = table[ch][0];
if (table[ch][1] != EOS)
{
string[len++] = table[ch][1];
}
}
else
{
string[len++] = ch;
}
}
string[len] = EOS;

return len;
}
stock color_print(id, text[], any:...)
{
new formated[190]; vformat(formated, charsmax(formated), text, 3);
message_begin(id ? MSG_ONE : MSG_ALL, g_SayText, _, id);
write_byte(id);
write_string(formated);
message_end();
}
stock check_flags(flags, need_flags)
{
return ((flags & need_flags) == need_flags) ? 1 : 0;
}
stock is_user_steam(id)
{
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", id); server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false;
}
return false;
}


Комментарий:
После исправления плагина - Chat Manager

Нужно, что бы у игроков, у которых и так есть прификс не показывало STEAM
 
В этой теме было размещено решение! Перейти к решению.

Вложения

Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
ArrayGetString(g_aBlackList, i, word, charsmax(word));
Nebo, не объявлен в коде массив данный. Mistrick скинул примерный код.

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

new Array: g_aBlackList, g_iBlackListSize;
g_aBlackList = ArrayCreate();
 
Сообщения
29
Реакции
15
wopox1337, к сожалению, я в этом ничего не понимаю :(

Подожду, может, кто то сделает, готовый вариант:)
 
Сообщения
1,536
Реакции
2,319
Помог
39 раз(а)
Nebo, можно использовать для это задачи Prefix Manager, где есть возможность настроить приоритет префиксов
 
Сообщения
29
Реакции
15
Tranquillity, написал автору плагина, может он ответит, поможет)

Спасибо, попробую его :)
 
Сообщения
576
Реакции
1,003
Помог
18 раз(а)
wopox1337, тот кто пихал код не заметил, что замены нужно делать в разных плагинах.
Nebo, Если вам нужно только отключение стим префикса, то зачем впихнули вторую часть кода, которая относится к другой теме?
 
Сообщения
29
Реакции
15
Mistrick, что именно нужно поменять, я так и не понял :(
 
Сообщения
2,713
Реакции
2,995
Помог
59 раз(а)
Вопросов тут более не осталось?@Nebo,
 
Статус
В этой теме нельзя размещать новые ответы.

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

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