Отзывы о Army Ranks Ultimate

SKAJIbnEJIb

visibility
Администратор
Скриптер
Сообщения
7,582
Решения
795
Реакции
1,118
army_ranks_ultimate_0.jpg


В данной теме вы можете оставить отзыв о плагине а также задать все вопросы по его работе .
Подробнее о плагине: https://fungun.net/shop/?p=show&id=1

Важно:
Задавайте вопросы создавая отдельную тему в этой ветке! Иначе Ваш вопрос может затеряться в комментариях.
 
@SKAJIbnEJIb, Предлагаю добавить в плагин фичу, чтоб информер не показывался игрокам которые еще не выбрали команду (в реапи эта команда называется TEAM_UNASSIGNED) поскольку игроку начинает засылаться большой обьем информации (Худ + модт + чат сообщения) в связи с чем они ловят overflow прямо после входа на сервер.
 
Удалите все логи из папки amxmodx/logs/. Сделайте рестарт сервера. В папке amxmodx/logs/ появятся новые логи. Нужны логи L20180101.log и error_20180107.log(цифры могут быть другими). Скопируйте содержимое этих файлов в сообщение, обернув в спойлер
icon_spoiler.png

Нужны именно свежие логи!
 
Слетают Звания при каждом заходе на сервер! подскажите причину
Привет, это тема для отзывов о плагине, а не для помощи.
Если хочешь что бы тебе помогли, оформи тему в положеном разделе, и дай полную информацио о своей проблеме.
Вот тебе ссылка https://forum.fungun.net/forums/army-ranks-ultimate/
 
Столкнулся с такой проблемой, когда берешь деньги за бонусы /anew, то сумма не прибавляется к уже имеющийся, а равняется к указанной.

Т.е. Если сумма была больше 5000$, то бонусы отнимут столько, что бы в результате осталось 5000$, так же и с меньшими суммами. Пример на скринах:
 

Вложения

  • image_2022-08-17_18-48-02.png
    image_2022-08-17_18-48-02.png
    917.6 KB · Просмотры: 31
  • image_2022-08-17_18-48-01.png
    image_2022-08-17_18-48-01.png
    866 KB · Просмотры: 39
  • image_2022-08-17_18-52-51.png
    image_2022-08-17_18-52-51.png
    180.3 KB · Просмотры: 33
@SKAJIbnEJIb, Напомните сколько званий максимально можно добавить?
// ВАЖНО! Сколько Вы здесь напишите чисел, столько званий у Вас и будет! Не забудьте отредактировать ланг файл, под Ваше количество званий!
ar_levels " Здесь сколько угодно?"
А ланг файл army_ranks_ultimate.txt как я помню больше 50 званий не тянет правильно? я подзабыл просто, напомните.
 
Приветствую ! Скажите как сделать так, чтобы игроки получали VIP или admin, когда они достигают звания? я сделал через bonus.cfg но бонус админам тоже работает! как сделать так, чтобы это работало только для игроков???? (помогите с примером)1697978453772.png
 
@ali kalandarov,
Нужно в квар ar_bonus_ignore добавить флаг, а после выдать этот флаг всем услугам, тогда на них не будет распространяться бонус.
 

Вложения

  • 1697990883189.png
    1697990883189.png
    22.6 KB · Просмотры: 8
Ребят не подскажите как правильно добавить в чат название ранга ( мудрил с native ar_get_user_level(id, string[] = "", len = 0)" но бестолку.
#include <amxmodx>
#include <fakemeta>

#pragma semicolon 1

#define MAX_PLAYERS 32
#define MsgId_SayText 76
#define MsgId_TeamInfo 86

enum _:DATA
{
TYPE[2],
AUTH[32],
PREFIX[64]
};
new Array:g_aData, g_aDataSize, g_szPrefix[MAX_PLAYERS + 1][64];
new Array:g_aDataBlockMess, g_aDataBlockMessSize;

new g_iMaxPlayers, Float:g_iUserTimeMes[MAX_PLAYERS + 1], Float:g_iTimeFlood[MAX_PLAYERS + 1];

public plugin_init()
{
register_plugin("[FS] Chat", "1.1", "Docaner");

register_clcmd("say", "Chat_Say");
register_clcmd("say_team", "Chat_SayTeam");

g_iMaxPlayers = get_maxplayers();
}

public client_disconnected(id)
{
g_iUserTimeMes[id] = 0.0;
g_iTimeFlood[id] = 0.0;
g_szPrefix[id] = "";
}

public plugin_cfg()
{
new szCfgDir[64], szCfgFile[128];
get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
formatex(szCfgFile, charsmax(szCfgFile), "%s/ap_chat.ini", szCfgDir);
if(file_exists(szCfgFile))
{
new aData[DATA], aDataBlocked[190], szBuffer[128],
iLine, iLen, section;
g_aData = ArrayCreate(DATA);
g_aDataBlockMess = ArrayCreate(190, 1);
while(read_file(szCfgFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
{
if(!iLen || szBuffer[0] == ';') continue;
if(szBuffer[0] == '[')
{
section++;
continue;
}
switch(section)
{
case 1:
{
parse(szBuffer, aData[TYPE], charsmax(aData[TYPE]), aData[AUTH], charsmax(aData[AUTH]), aData[PREFIX], charsmax(aData[PREFIX]));
ArrayPushArray(g_aData, aData);
}
case 2:
{
formatex(aDataBlocked, charsmax(aDataBlocked), szBuffer);
ArrayPushString(g_aDataBlockMess, aDataBlocked);
}
}
}
g_aDataSize = ArraySize(g_aData);
g_aDataBlockMessSize = ArraySize(g_aDataBlockMess);
}
}

public Chat_Say(id) return Chat_Think(id, 0);
public Chat_SayTeam(id) return Chat_Think(id, 1);

Chat_Think(id, iTeam)
{
new iBuffer[190], iMessage[190], iName[33], iNameColor[35], szTeam[10], IdTeam, iConvertMessage[charsmax(iMessage) * 2 + 1], iMessageControl[190], iPrefix[65];
read_args(iMessage, charsmax(iMessage));
remove_quotes(iMessage);
if(equal(iMessage, "") || iMessage[0] == ' ' || iMessage[0] == '#') return PLUGIN_HANDLED;
if(iMessage[0] == '@' || iMessage[0] == '/') return PLUGIN_HANDLED_MAIN;
if(g_iUserTimeMes[id] + 1.0 > get_gametime() || g_iTimeFlood[id] > get_gametime())
{
UTIL_SayText(id, "!g|Anti-Food| !yПрекратите флудить в чат!");
g_iTimeFlood[id] = get_gametime() + 2.0;
return PLUGIN_HANDLED;
}
if(!is_user_alive(id)) add(iBuffer, charsmax(iBuffer), "!y~Мертв~");
IdTeam = get_user_team(id, szTeam, charsmax(szTeam));
if(iTeam)
{
switch(IdTeam)
{
case 1: add(iBuffer, charsmax(iBuffer), equal(iBuffer, "") ? "!y(TT)" : " !y(TT)");
case 2: add(iBuffer, charsmax(iBuffer), equal(iBuffer, "") ? "!y(CT)" : " !y(CT)");
default: add(iBuffer, charsmax(iBuffer), equal(iBuffer, "") ? "!y(SPECT)": " !y(SPECT)");
}
}
SAY_GetPrefix(id);
if(!equal(g_szPrefix[id], ""))
{
formatex(iPrefix, charsmax(iPrefix), equal(iBuffer, "") ? "%s" : " %s", g_szPrefix[id]);
add(iBuffer, charsmax(iBuffer), iPrefix);
}
get_user_name(id, iName, charsmax(iName));
formatex(iNameColor, charsmax(iNameColor), equal(iBuffer, "") ? "!t%s" : " !t%s" , iName);
add(iBuffer, charsmax(iBuffer), iNameColor);
add(iBuffer, charsmax(iBuffer), get_user_flags(id) & ADMIN_BAN ? " !y: !g" : " !y: ");
iConvertMessage = iMessage;
for(new i; i < g_aDataBlockMessSize; i++)
{
ArrayGetString(g_aDataBlockMess, i, iMessageControl, charsmax(iMessageControl));
if(containi(iConvertMessage, iMessageControl) == -1) continue;
UTIL_SayText(id, "!g|Anti-Food| !yОбнаружена !gспам атака!y/!gреклама");
g_iTimeFlood[id] = get_gametime() + 2.0;
return PLUGIN_HANDLED;
}
if(iTeam)
{
new iTeami;
for(new i = 1; i <= g_iMaxPlayers; i++)
{
iTeami = get_user_team(i, szTeam, charsmax(szTeam));
if(IdTeam != iTeami) continue;
SAY_ChatPrint(i, iBuffer, iConvertMessage, szTeam);
}
}
else SAY_ChatPrint(0, iBuffer, iConvertMessage, szTeam);
g_iUserTimeMes[id] = get_gametime();
log_message("%s <%s> %s : %s", is_user_alive(id) ? "" : "<Мертв>", iName, iTeam ? "say_team" : "say", iConvertMessage);
return PLUGIN_HANDLED_MAIN;
}

stock SAY_GetPrefix(id)
{
new aData[DATA];
for(new i; i < g_aDataSize; i++)
{
ArrayGetArray(g_aData, i, aData);
switch(aData[TYPE])
{
case 'e':
{
static sName[33]; get_user_name(id, sName, charsmax(sName));
if(!strcmp(aData[AUTH], sName))
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), aData[PREFIX]);
}
case 'f':
{
if(get_user_flags(id) & read_flags(aData[AUTH]))
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), aData[PREFIX]);
}
case 'i':
{
static sIP[16]; get_user_ip(id, sIP, charsmax(sIP), 1);
if(!strcmp(aData[AUTH], sIP))
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), aData[PREFIX]);
}
case 's':
{
static sAuthid[25]; get_user_authid(id, sAuthid, charsmax(sAuthid));
if(!strcmp(aData[AUTH], sAuthid))
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), aData[PREFIX]);
}
}
}
return g_szPrefix[id] = "";
}

stock SAY_ChatPrint(pPlayer, const szTags[], const szMessage[], const szTeamColor[])
{
new szBuffer[190], iPlayerTeamColor[10];
if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szTags, 3);
else copy(szBuffer, charsmax(szBuffer), szTags);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
add(szBuffer, charsmax(szBuffer), szMessage);
switch(pPlayer)
{
case 0:
{
for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
{
if(!is_user_connected(iPlayer)) continue;
get_user_team(iPlayer, iPlayerTeamColor, charsmax(iPlayerTeamColor));
UTIL_MsgTeamInfo(iPlayer, szTeamColor);
UTIL_MsgSayText(iPlayer, szBuffer, 1);
UTIL_MsgTeamInfo(iPlayer, iPlayerTeamColor);
}
}
default:
{
get_user_team(pPlayer, iPlayerTeamColor, charsmax(iPlayerTeamColor));
UTIL_MsgTeamInfo(pPlayer, szTeamColor);
UTIL_MsgSayText(pPlayer, szBuffer, 1);
UTIL_MsgTeamInfo(pPlayer, iPlayerTeamColor);
}
}
}

stock UTIL_SayText(pPlayer, const szMessage[], any:...)
{
new szBuffer[190];
if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
else copy(szBuffer, charsmax(szBuffer), szMessage);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
switch(pPlayer)
{
case 0:
{
for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
{
if(!is_user_connected(iPlayer)) continue;
UTIL_MsgSayText(iPlayer, szBuffer);
}
}
default: UTIL_MsgSayText(pPlayer, szBuffer);
}
}

stock UTIL_MsgSayText(iPlayer, const szMessage[], iReliable = 0)
{
engfunc(EngFunc_MessageBegin, iReliable ? MSG_ONE : MSG_ONE_UNRELIABLE, MsgId_SayText, {0.0, 0.0, 0.0}, iPlayer);
write_byte(iPlayer);
write_string(szMessage);
message_end();
}

stock UTIL_MsgTeamInfo(iPlayer, const iTeam[])
{
engfunc(EngFunc_MessageBegin, MSG_ONE, MsgId_TeamInfo, {0.0, 0.0, 0.0}, iPlayer);
write_byte(iPlayer);
write_string(iTeam);
message_end();
}
 
@SKAJIbnEJIb, примерно такой код, вроде так не помнню я с компилил как-то они показались а потом чере зсмену карты они забагались и ошибка был
#include <amxmodx>
#include <fakemeta>
#include <army_ranks_ultimate>

#pragma semicolon 1

#define MAX_PLAYERS 32
#define MsgId_SayText 76
#define MsgId_TeamInfo 86

enum _:DATA
{
TYPE[2],
AUTH[32],
PREFIX[64]
};
new Array:g_aData, g_aDataSize, g_szPrefix[MAX_PLAYERS + 1][64];
new Array:g_aDataBlockMess, g_aDataBlockMessSize;

new g_iMaxPlayers, Float:g_iUserTimeMes[MAX_PLAYERS + 1], Float:g_iTimeFlood[MAX_PLAYERS + 1];

public plugin_init()
{
register_plugin("[FS] Chat", "1.1", "Docaner");

register_clcmd("say", "Chat_Say");
register_clcmd("say_team", "Chat_SayTeam");

g_iMaxPlayers = get_maxplayers();
}

public client_disconnected(id)
{
g_iUserTimeMes[id] = 0.0;
g_iTimeFlood[id] = 0.0;
g_szPrefix[id] = "";
}

public plugin_cfg()
{
new szCfgDir[64], szCfgFile[128];
get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir));
formatex(szCfgFile, charsmax(szCfgFile), "%s/ap_chat.ini", szCfgDir);
if(file_exists(szCfgFile))
{
new aData[DATA], aDataBlocked[190], szBuffer[128],
iLine, iLen, section;
g_aData = ArrayCreate(DATA);
g_aDataBlockMess = ArrayCreate(190, 1);
while(read_file(szCfgFile, iLine++, szBuffer, charsmax(szBuffer), iLen))
{
if(!iLen || szBuffer[0] == ';') continue;
if(szBuffer[0] == '[')
{
section++;
continue;
}
switch(section)
{
case 1:
{
parse(szBuffer, aData[TYPE], charsmax(aData[TYPE]), aData[AUTH], charsmax(aData[AUTH]), aData[PREFIX], charsmax(aData[PREFIX]));
ArrayPushArray(g_aData, aData);
}
case 2:
{
formatex(aDataBlocked, charsmax(aDataBlocked), szBuffer);
ArrayPushString(g_aDataBlockMess, aDataBlocked);
}
}
}
g_aDataSize = ArraySize(g_aData);
g_aDataBlockMessSize = ArraySize(g_aDataBlockMess);
}
}

public Chat_Say(id) return Chat_Think(id, 0);
public Chat_SayTeam(id) return Chat_Think(id, 1);

Chat_Think(id, iTeam)
{
new iBuffer[190], iMessage[190], iName[33], iNameColor[35], szTeam[10], IdTeam, iConvertMessage[charsmax(iMessage) * 2 + 1], iMessageControl[190], iPrefix[65] а;
read_args(iMessage, charsmax(iMessage));
remove_quotes(iMessage);
if(equal(iMessage, "") || iMessage[0] == ' ' || iMessage[0] == '#') return PLUGIN_HANDLED;
if(iMessage[0] == '@' || iMessage[0] == '/') return PLUGIN_HANDLED_MAIN;
if(g_iUserTimeMes[id] + 1.0 > get_gametime() || g_iTimeFlood[id] > get_gametime())
{
UTIL_SayText(id, "!g|Anti-Food| !yПрекратите флудить в чат!");
g_iTimeFlood[id] = get_gametime() + 2.0;
return PLUGIN_HANDLED;
}
if(!is_user_alive(id)) add(iBuffer, charsmax(iBuffer), "!y~Мертв~");
IdTeam = get_user_team(id, szTeam, charsmax(szTeam));
if(iTeam)
{
switch(IdTeam)
{
case 1: add(iBuffer, charsmax(iBuffer), equal(iBuffer, "") ? "!y(TT)" : " !y(TT)");
case 2: add(iBuffer, charsmax(iBuffer), equal(iBuffer, "") ? "!y(CT)" : " !y(CT)");
case 2: add(iBuffer, charsmax(iBuffer), equal(iBuffer, "") ? "!y(CT)" : " !y(CT)");
default: add(iBuffer, charsmax(iBuffer), equal(iBuffer, "") ? "!y(SPECT)": " !y(SPECT)");
}
}
SAY_GetPrefix(id);
if(!equal(g_szPrefix[id], ""))
{
formatex(iPrefix, charsmax(iPrefix), equal(iBuffer, "") ? "%s" : " %s", g_szPrefix[id]);
add(iBuffer, charsmax(iBuffer), iPrefix);
}
get_user_name(%s, id, iName, charsmax(iName));
formatex(iNameColor, charsmax(iNameColor), equal(iBuffer, "") ? "!t%s" : " !t%s" , iName);
add(iBuffer, charsmax(iBuffer), ar_get_user_level(%s) "!w"
add(iBuffer, charsmax(iBuffer), iNameColor);
add(iBuffer, charsmax(iBuffer), get_user_flags(id) & ADMIN_BAN ? " !y: !g" : " !y: ");
iConvertMessage = iMessage;
for(new i; i < g_aDataBlockMessSize; i++)
{
ArrayGetString(g_aDataBlockMess, i, iMessageControl, charsmax(iMessageControl));
if(containi(iConvertMessage, iMessageControl) == -1) continue;
UTIL_SayText(id, "!g|Anti-Food| !yОбнаружена !gспам атака!y/!gреклама");
g_iTimeFlood[id] = get_gametime() + 2.0;
return PLUGIN_HANDLED;
}
if(iTeam)
{
new iTeami;
for(new i = 1; i <= g_iMaxPlayers; i++)
{
iTeami = get_user_team(i, szTeam, charsmax(szTeam));
if(IdTeam != iTeami) continue;
SAY_ChatPrint(i, iBuffer, iConvertMessage, szTeam);
}
}
else SAY_ChatPrint(0, iBuffer, iConvertMessage, szTeam);
g_iUserTimeMes[id] = get_gametime();
log_message("%s <%s> %s : %s", is_user_alive(id) ? "" : "<Мертв>", iName, iTeam ? "say_team" : "say", iConvertMessage);
return PLUGIN_HANDLED_MAIN;
}

stock SAY_GetPrefix(id)
{
new aData[DATA];
for(new i; i < g_aDataSize; i++)
{
ArrayGetArray(g_aData, i, aData);
switch(aData[TYPE])
{
case 'e':
{
static sName[33]; get_user_name(id, sName, charsmax(sName));
if(!strcmp(aData[AUTH], sName))
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), aData[PREFIX]);
}
case 'f':
{
if(get_user_flags(id) & read_flags(aData[AUTH]))
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), aData[PREFIX]);
}
case 'i':
{
static sIP[16]; get_user_ip(id, sIP, charsmax(sIP), 1);
if(!strcmp(aData[AUTH], sIP))
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), aData[PREFIX]);
}
case 's':
{
static sAuthid[25]; get_user_authid(id, sAuthid, charsmax(sAuthid));
if(!strcmp(aData[AUTH], sAuthid))
return copy(g_szPrefix[id], charsmax(g_szPrefix[]), aData[PREFIX]);
}
}
}
return g_szPrefix[id] = "";
}

stock SAY_ChatPrint(pPlayer, const szTags[], const szMessage[], const szTeamColor[])
{
new szBuffer[190], iPlayerTeamColor[10];
if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szTags, 3);
else copy(szBuffer, charsmax(szBuffer), szTags);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
add(szBuffer, charsmax(szBuffer), szMessage);
switch(pPlayer)
{
case 0:
{
for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
{
if(!is_user_connected(iPlayer)) continue;
get_user_team(iPlayer, iPlayerTeamColor, charsmax(iPlayerTeamColor));
UTIL_MsgTeamInfo(iPlayer, szTeamColor);
UTIL_MsgSayText(iPlayer, szBuffer, 1);
UTIL_MsgTeamInfo(iPlayer, iPlayerTeamColor);
}
}
default:
{
get_user_team(pPlayer, iPlayerTeamColor, charsmax(iPlayerTeamColor));
UTIL_MsgTeamInfo(pPlayer, szTeamColor);
UTIL_MsgSayText(pPlayer, szBuffer, 1);
UTIL_MsgTeamInfo(pPlayer, iPlayerTeamColor);
}
}
}

stock UTIL_SayText(pPlayer, const szMessage[], any:...)
{
new szBuffer[190];
if(numargs() > 2) vformat(szBuffer, charsmax(szBuffer), szMessage, 3);
else copy(szBuffer, charsmax(szBuffer), szMessage);
while(replace(szBuffer, charsmax(szBuffer), "!y", "^1")) {}
while(replace(szBuffer, charsmax(szBuffer), "!t", "^3")) {}
while(replace(szBuffer, charsmax(szBuffer), "!g", "^4")) {}
switch(pPlayer)
{
case 0:
{
for(new iPlayer = 1; iPlayer <= g_iMaxPlayers; iPlayer++)
{
if(!is_user_connected(iPlayer)) continue;
UTIL_MsgSayText(iPlayer, szBuffer);
}
}
default: UTIL_MsgSayText(pPlayer, szBuffer);
}
}

stock UTIL_MsgSayText(iPlayer, const szMessage[], iReliable = 0)
{
engfunc(EngFunc_MessageBegin, iReliable ? MSG_ONE : MSG_ONE_UNRELIABLE, MsgId_SayText, {0.0, 0.0, 0.0}, iPlayer);
write_byte(iPlayer);
write_string(szMessage);
message_end();
}

stock UTIL_MsgTeamInfo(iPlayer, const iTeam[])
{
engfunc(EngFunc_MessageBegin, MSG_ONE, MsgId_TeamInfo, {0.0, 0.0, 0.0}, iPlayer);
write_byte(iPlayer);
write_string(iTeam);
message_end();
}
 

Похожие темы

  • Закреплено
Отзывы о ECD Helper
Ответы
42
Просмотры
2K
  • Закреплено
  • Вопрос
Отзывы Vanga Detector
Ответы
95
Просмотры
7K
Ответы
37
Просмотры
3K
  • Закреплено
Отзывы о FG RconShop
Ответы
2
Просмотры
710
  • Закреплено
  • Вопрос
Отзывы Transfer RBS
Ответы
0
Просмотры
557
Сверху
Назад