Скриптер
Проверенный
Пользователь
- Сообщения
- 3,582
- Реакции
- 1,570
- Помог
- 137 раз(а)
- Ошибка
-
Ошибка компиляции:
Segmentation fault
- Компилятор
- WEB-компилятор
- Amx Mod X
- 1.9.0
- Исходный код
-
/*
Автор плагина: Анатолий (AcE) Бойко.
Моя страничка: https://vk.com/e1337ace
Профиль Steam: http://steamcommunity.com/profiles/76561198038775603/
Настройка плагина:
#define CS_MYSQL - Статистика by SKAJIbnEJIb
#define CS_MYSQL_HUD_SKILL - Скилл игрока на на худе.
#define CSSTATSX_SQL - Статистика by SerFreeman1337
#define CSSTATSX_SQL_HUD_SKILL - Скилл игрока на на худе.
Если закомментировать #define CS_MYSQL и #define CSSTATSX_SQL
то плагин будет работать со стандартной статистикой csx, csstats
#define STATUS_VALUE - Информация о игроке под прицелом.
#define HUD_POSITION - Позиция игрока (на худе) в статистике.
*/
#define AUTHOR "AcE"
#define VERSION "1.5"
#define PLUGIN "Lite Rank System"
#define LASTUPDATE "4, December (12), 2017"
#include <amxmodx>
#include <reapi>
#if AMXX_VERSION_NUM < 183
#include <colorchat>
#define argbreak strbreak
#define client_disconnected client_disconnect
#endif
//#define CS_MYSQL
//#define CS_MYSQL_HUD_SKILL
//#define CSSTATSX_SQL
//#define CSSTATSX_SQL_HUD_SKILL
#define HUD_POSITION
//#define STATUS_VALUE
#if defined CS_MYSQL
native csstats_get_statsnum()
native csstats_get_user_stats(id, stats[22])
#if defined CS_MYSQL_HUD_SKILL
#define FRAGS 0
#define DEATHS 1
native statsx_get_skill(stats[22], string[] = "", len = 0)
#endif
#endif
#if defined CSSTATSX_SQL
native get_statsnum_sql()
native get_user_stats_sql(index, stats[8], bodyhits[8])
#if defined CSSTATSX_SQL_HUD_SKILL
native get_user_skill(player, &Float:skill)
new const g_skill_letters[][] = {"L-", "L", "L+", "M-", "M", "M+", "H-", "H", "H+", "P-", "P", "P+", "G"}
new Float:g_skill_opt[sizeof g_skill_letters]
#endif
#endif
#if !defined CS_MYSQL && !defined CSSTATSX_SQL
#include <csstats>
#endif
#if defined STATUS_VALUE
enum _:MAX_TYPES {TYPE_NONE, TYPE_RELATION, TYPE_PLAYER}
enum {LOOK_FRIEND = 1, LOOK_ENEMY, LOOK_HOSTAGE}
enum _:MAX_REPLACES {RE_HP, RE_RANK, RE_NAME}
new const Replaces[MAX_REPLACES][] = {"%hp%", "%rank%", "%name%"}
new status_value[MAX_TYPES], gStatusText
#endif
enum _:udata
{
level, exp, informer
}
new UserData[33][udata]
new Float:HudUpdateInterval
new g_Cvar[9], LEVELS[101], g_Connected
#define IsUserValid(%1) (1 <= %1 <= 32)
#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) (%1 |= (1 << (%2 & 31)))
#define reset_bit(%1,%2) (%1 &= ~(1 << (%2 & 31)))
new const CLASSES[][] =
{
"", "1 LVL | Новичек", "2 LVL | Новичек", "3 LVL | Новичек",
"4 LVL | Новичек", "5 LVL | Новичек", "6 LVL | Нуб",
"7 LVL | Нуб", "8 LVL | Нуб", "9 LVL | Нуб",
"10 LVL | Нуб", "11 LVL | Неопытный", "12 LVL | Неопытный",
"13 LVL | Неопытный", "14 LVL | Неопытный", "15 LVL | Неопытный",
"16 LVL | Начинающий", "17 LVL | Начинающий", "18 LVL | Начинающий",
"19 LVL | Начинающий", "20 LVL | Начинающий", "21 LVL | Неплох",
"22 LVL | Неплох", "23 LVL | Неплох", "24 LVL | Неплох",
"25 LVL | Неплох", "26 LVL | Довольно приличный", "27 LVL | Довольно приличный",
"28 LVL | Довольно приличный", "29 LVL | Довольно приличный", "30 LVL | Довольно приличный",
"31 LVL | Просто нереальный", "32 LVL | Просто нереальный", "33 LVL | Просто нереальный",
"34 LVL | Просто нереальный", "35 LVL | Просто нереальный", "36 LVL | Задира",
"37 LVL | Задира", "38 LVL | Задира", "39 LVL | Задира",
"40 LVL | Задира", "41 LVL | Ниндзя", "42 LVL | Ниндзя",
"43 LVL | Ниндзя", "44 LVL | Ниндзя", "45 LVL | Ниндзя",
"46 LVL | Мясник", "47 LVL | Мясник", "48 LVL | Мясник",
"49 LVL | Мясник", "50 LVL | Мясник", "51 LVL | Мастер",
"52 LVL | Мастер", "53 LVL | Мастер", "54 LVL | Мастер",
"55 LVL | Мастер", "56 LVL | Маньяк", "57 LVL | Маньяк",
"58 LVL | Маньяк", "59 LVL | Маньяк", "60 LVL | Маньяк",
"61 LVL | Мародер", "62 LVL | Мародер", "63 LVL | Мародер",
"64 LVL | Мародер", "65 LVL | Мародер", "66 LVL | Серийный убийца",
"67 LVL | Серийный убийца", "68 LVL | Серийный убийца", "69 LVL | Серийный убийца",
"70 LVL | Серийный убийца", "71 LVL | Ветеран", "72 LVL | Ветеран",
"73 LVL | Ветеран", "74 LVL | Ветеран", "75 LVL | Ветеран",
"76 LVL | Легенда", "77 LVL | Легенда", "78 LVL | Легенда",
"79 LVL | Легенда", "80 LVL | Легенда", "81 LVL | Воин севера",
"82 LVL | Воин севера", "83 LVL | Воин севера", "84 LVL | Воин севера",
"85 LVL | Воин севера", "86 LVL | Властелин", "87 LVL | Властелин",
"88 LVL | Властелин", "89 LVL | Властелин", "90 LVL | Властелин",
"91 LVL | Самурай", "92 LVL | Самурай", "93 LVL | Самурай",
"94 LVL | Самурай", "95 LVL | Самурай", "96 LVL | Сама смерть",
"97 LVL | Сама смерть", "98 LVL | Сама смерть", "99 LVL | Сама смерть",
"100 LVL | Бог ножей"
}
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_cvar("lrs_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY | FCVAR_UNLOGGED)
#if defined STATUS_VALUE
gStatusText = get_user_msgid("StatusText")
register_event("StatusValue", "StatusValueShow", "be")
#endif
RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Post", true)
register_clcmd("say /lrshud", "informer_switch", 0, "switch experience informer on/off")
g_Cvar[1] = register_cvar("lrs_add_exp", "1")
g_Cvar[2] = register_cvar("lrs_add_exp_hs", "2")
g_Cvar[3] = register_cvar("lrs_levels", "0 5 10 20 35 55 80 110 145 185 230 280 335 395 460 530 605 685 770 860 955 1055 1160 1270 1385 1505 1630 1760 1895 2035 2180 2330 2485 2645 2810 2980 3155 3335 3520 3710 3905 4105 4310 4520 4735 4955 5180 5410 5645 5885 6130 6385 6650 6925 7210 7505 7810 8125 8450 8785 9130 9485 9850 10225 10610 11005 11410 11825 12250 12685 13130 13585 14050 14525 15010 15500 15995 16495 17000 17510 18025 18550 19085 19630 20185 20750 21325 21910 22505 23110 23725 24350 24985 25630 26285 26950 27625 28310 29005 30000")
g_Cvar[4] = register_cvar("lrs_hud_exp_type", "0")
g_Cvar[5] = register_cvar("lrs_hud_xypos", "0.01 0.22")
g_Cvar[6] = register_cvar("lrs_hud_color", "50 255 50")
g_Cvar[7] = register_cvar("lrs_hud_random_color", "0")
g_Cvar[8] = register_cvar("lrs_hud_update", "1.0")
HudUpdateInterval = get_pcvar_float(g_Cvar[8])
set_task(HudUpdateInterval, "lrs_informer", _, _, _, "b")
}
public plugin_cfg()
{
new LVL[101][16], cvLevels[1024]
get_pcvar_string(g_Cvar[3], cvLevels, 255); trim(cvLevels)
parse(cvLevels, LVL[0], 15, LVL[1], 15, LVL[2], 15, LVL[3], 15, LVL[4], 15, LVL[5], 15, LVL[6], 15, LVL[7], 15, LVL[8], 15, LVL[9], 15, LVL[10], 15, LVL[11], 15, LVL[12], 15, LVL[13], 15, LVL[14], 15, LVL[15], 15, LVL[16], 15, LVL[17], 15, LVL[18], 15, LVL[19], 15, LVL[20], 15, LVL[21], 15, LVL[22], 15, LVL[23], 15, LVL[24], 15, LVL[25], 15, LVL[26], 15, LVL[27], 15, LVL[28], 15, LVL[29], 15, LVL[30], 15, LVL[31], 15, LVL[32], 15, LVL[33], 15, LVL[34], 15, LVL[35], 15, LVL[36], 15, LVL[37], 15, LVL[38], 15, LVL[39], 15, LVL[40], 15, LVL[41], 15, LVL[42], 15, LVL[43], 15, LVL[44], 15, LVL[45], 15, LVL[46], 15, LVL[47], 15, LVL[48], 15, LVL[49], 15, LVL[50], 15, LVL[51], 15,LVL[52], 15, LVL[53], 15, LVL[54], 15, LVL[55], 15, LVL[56], 15, LVL[57], 15, LVL[58], 15, LVL[59], 15, LVL[60], 15, LVL[61], 15, LVL[62], 15, LVL[63], 15, LVL[64], 15, LVL[65], 15, LVL[66], 15, LVL[67], 15, LVL[68], 15, LVL[69], 15, LVL[70], 15, LVL[71], 15, LVL[72], 15, LVL[73], 15, LVL[74], 15, LVL[75], 15, LVL[76], 15, LVL[77], LVL[78], 15, LVL[79], 15, LVL[80], 15, LVL[81], 15, LVL[82], 15, LVL[83], 15, LVL[84], 15, LVL[85], 15, LVL[86], 15, LVL[87], 15, LVL[88], 15, LVL[89], 15, LVL[90], 15, LVL[91], 15, LVL[92], 15, LVL[93], 15, LVL[94], 15, LVL[95], 15, LVL[96], 15, LVL[97], 15, LVL[98], 15, LVL[99], 15, LVL[100], 15)
for (new i = 0; i < 100; i ++)
LEVELS[i +1] = str_to_num(LVL[i])
#if defined CSSTATSX_SQL
#if defined CSSTATSX_SQL_HUD_SKILL
new levelString[512], stPos, ePos, rawPoint[20], cnt
new g_pCvarSkill = get_cvar_pointer("aes_statsx_skill")
get_pcvar_string(g_pCvarSkill, levelString, charsmax(levelString))
do {
ePos = strfind(levelString[stPos], " ")
formatex(rawPoint, ePos, levelString[stPos])
g_skill_opt[cnt] = str_to_float(rawPoint)
stPos += ePos + 1; cnt ++
if (cnt > sizeof g_skill_letters - 1)
break
} while(ePos != -1)
#endif
#endif
server_print(""); server_print(" %s Copyright (c) 2017 %s", PLUGIN, AUTHOR)
server_print(" Version %s build on %s", VERSION, LASTUPDATE); server_print("")
}
public client_putinserver(id)
{
set_bit(g_Connected, id)
arrayset(UserData[id], 0, udata)
set_task(0.9, "load_client_data", id + 555)
}
public client_disconnected(id)
reset_bit(g_Connected, id)
public load_client_data(index)
{
new id = index - 555
if (!get_bit(g_Connected, id)) return
#if defined CS_MYSQL
new st[22]
csstats_get_user_stats(id, st)
#endif
#if defined CSSTATSX_SQL
new st[8], bh[8]
get_user_stats_sql(id, st, bh)
#endif
#if !defined CS_MYSQL && !defined CSSTATSX_SQL
new st[8], bh[8]
get_user_stats(id, st, bh)
#endif
if (UserData[id][level] <= 1)
UserData[id][level] = 1
if (UserData[id][exp] < 0)
UserData[id][exp] = 0
if (get_pcvar_num(g_Cvar[2]) > 1)
{
new not_hs_num = st[0] - st[2]
new hs_points = st[2] * get_pcvar_num(g_Cvar[2])
new not_hs_points = not_hs_num * get_pcvar_num(g_Cvar[1])
UserData[id][exp] = hs_points + not_hs_points
}
else
{
UserData[id][exp] = (st[0] * get_pcvar_num(g_Cvar[1]))
}
for (new i = 1; i <= 100; i ++)
{
if (i < 100)
{
if (UserData[id][exp] >= LEVELS[i] && UserData[id][exp] < LEVELS[i +1])
UserData[id][level] = i
else if (UserData[id][exp] >= LEVELS[100])
UserData[id][level] = 100
}
}
}
public CBasePlayer_Killed_Post(const victim, killer, iGib)
{
if (!get_bit(g_Connected, killer))
return
if (!IsUserValid(killer) || !IsUserValid(victim) || killer == victim || get_member(victim, m_bKilledByBomb))
return
static szName[32]
get_entvar(killer, var_netname, szName, 31)
if (UserData[killer][level] < 100)
{
static TempEXP
TempEXP = get_member(victim, m_bHeadshotKilled) ? get_pcvar_num(g_Cvar[2]) : get_pcvar_num(g_Cvar[1])
UserData[killer][exp] += TempEXP
if (UserData[killer][exp] >= LEVELS[UserData[killer][level] +1])
{
UserData[killer][level] ++
client_cmd(0, "spk events/task_complete")
client_print_color(0, print_team_default, "^1[^4LRS^1] Боец ^3%s ^1получил новое звание - ^4%s^1. Поздравляем!", szName, CLASSES[UserData[killer][level]])
}
}
}
public lrs_informer()
{
static id, target
static buffer[192], len, SyncHudMsg
if (!SyncHudMsg) SyncHudMsg = CreateHudSyncObj()
for (id = 1; id <= 32; id ++)
{
if (!get_bit(g_Connected, id)) continue
if (UserData[id][informer]) continue
ClearSyncHud(id, SyncHudMsg)
target = get_entvar(id, var_iuser2)
#if defined HUD_POSITION
static g_rank[33], g_maxrank
#if defined CS_MYSQL
static st[22]
g_maxrank = csstats_get_statsnum()
g_rank[id] = csstats_get_user_stats(id, st)
g_rank[target] = csstats_get_user_stats(target, st)
#endif
#if defined CSSTATSX_SQL
static st[8], bh[8]
g_maxrank = get_statsnum_sql()
g_rank[id] = get_user_stats_sql(id, st, bh)
g_rank[target] = get_user_stats_sql(target, st, bh)
#endif
#if !defined CS_MYSQL && !defined CSSTATSX_SQL
static st[8], bh[8]
g_maxrank = get_statsnum()
g_rank[id] = get_user_stats(id, st, bh)
g_rank[target] = get_user_stats(target, st, bh)
#endif
#endif
if (is_user_alive(id))
{
len = format(buffer, charsmax(buffer), "Звание: %s", CLASSES[UserData[id][level]])
if (UserData[id][level] < 100)
{
if (get_pcvar_num(g_Cvar[4]) == 0)
len += format(buffer[len], charsmax(buffer) - len, "^nОпыт: [%d/%d]", UserData[id][exp], LEVELS[UserData[id][level] +1])
else len += format(buffer[len], charsmax(buffer) - len, "^nОпыт: [%d/%d] [+%d]", UserData[id][exp], LEVELS[UserData[id][level] +1], (LEVELS[UserData[id][level] +1] - UserData[id][exp]))
}
else
{
len += format(buffer[len], charsmax(buffer) - len, "^nОпыт: Максимальный")
}
#if defined CS_MYSQL
#if defined CS_MYSQL_HUD_SKILL
new iRank = csstats_get_user_stats(id, st)
if (iRank > 0)
{
if (st[FRAGS] && st[DEATHS])
{
new szSkill[3], iSkill = statsx_get_skill(st, szSkill, charsmax(szSkill))
len += format(buffer[len], charsmax(buffer) - len, "^nСкилл: [%s|%d]", szSkill, iSkill)
}
}
#endif
#endif
#if defined CSSTATSX_SQL
#if defined CSSTATSX_SQL_HUD_SKILL
new Float:szSkill, szSkill_id
get_user_skill(id, szSkill)
szSkill_id = aes_statsx_get_skill_id(szSkill)
len += format(buffer[len], charsmax(buffer) - len, "^nСкилл: [%s|%.0f]", g_skill_letters[szSkill_id], szSkill)
#endif
#endif
#if defined HUD_POSITION
len += format(buffer[len], charsmax(buffer) - len, "^nПозиция: [%d из %d]", g_rank[id], g_maxrank)
#endif
}
else
{
if (target > 0 && !is_user_alive(id))
{
static szName[32]
get_entvar(target, var_netname, szName, 31)
len = format(buffer, charsmax(buffer), "Ник: %s", szName)
len += format(buffer[len], charsmax(buffer) - len, "^nЗвание: %s", CLASSES[UserData[target][level]])
if (UserData[target][level] < 10011:46 29.06.2018)
{
if (get_pcvar_num(g_Cvar[4]) == 0)
len += format(buffer[len], charsmax(buffer) - len, "^nОпыт: [%d/%d]", UserData[target][exp], LEVELS[UserData[target][level] +1])
else len += format(buffer[len], charsmax(buffer) - len, "^nОпыт: [%d/%d] [+%d]", UserData[target][exp], LEVELS[UserData[target][level] +1], (LEVELS[UserData[target][level] +1] - UserData[target][exp]))
}
else
{
len += format(buffer[len], charsmax(buffer) - len, "^nОпыт: Максимальный")
}
#if defined CS_MYSQL
#if defined CS_MYSQL_HUD_SKILL
new iRank = csstats_get_user_stats(target, st)
if (iRank > 0)
{
if (st[FRAGS] && st[DEATHS])
{
new szSkill[3], iSkill = statsx_get_skill(st, szSkill, charsmax(szSkill))
len += format(buffer[len], charsmax(buffer) - len, "^nСкилл: [%s|%d]", szSkill, iSkill)
}
}
#endif
#endif
#if defined CSSTATSX_SQL
#if defined CSSTATSX_SQL_HUD_SKILL
new Float:szSkill, szSkill_id
get_user_skill(target, szSkill)
szSkill_id = aes_statsx_get_skill_id(szSkill)
len += format(buffer[len], charsmax(buffer) - len, "^nСкилл: [%s|%.0f]", g_skill_letters[szSkill_id], szSkill)
#endif
#endif
#if defined HUD_POSITION
len += format(buffer[len], charsmax(buffer) - len, "^nПозиция: [%d из %d]", g_rank[target], g_maxrank)
#endif
}
}
static r, g, b, Float:x, Float:y
HudMsgPos(x, y); HudMsgColor(g_Cvar[6], r, g, b)
if (get_pcvar_num(g_Cvar[7]) == 0)
set_hudmessage(r, g, b, x, y, 0, 0.0, HudUpdateInterval, _, _, -1)
else set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), x, y, 0, 0.0, HudUpdateInterval, _, _, -1)
ShowSyncHudMsg(id, SyncHudMsg, "%s", buffer)
}
}
public informer_switch(id)
{
if (!get_bit(g_Connected, id)) return
if (UserData[id][informer])
{
UserData[id][informer] = 0
client_cmd(id, "spk fvox/activated")
client_print_color(id, print_team_default, "^1[^4LRS^1] ^3Информер звания ^1<^4Включён^1>")
}
else
{
UserData[id][informer] = 1
client_cmd(id, "spk fvox/deactivated")
client_print_color(id, print_team_default, "^1[^4LRS^1] ^3Информер звания ^1<^4Выключен^1>")
}
}
#if defined STATUS_VALUE
public StatusValueShow(id)
{
new num = read_data(1)
if (num <= 0 || num >= MAX_TYPES) return
new update = status_value[num] = read_data(2)
switch(num)
{
case TYPE_RELATION:
{
if (!update && is_user_alive(id))
{
message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
write_byte(0); write_string(""); message_end()
}
}
case TYPE_PLAYER:
{
if (is_user_alive(id))
{
new message[192]
switch(status_value[TYPE_RELATION])
{
case LOOK_FRIEND:
{
copy(message, charsmax(message), "Друг: %name% ХП: %hp% Ранг: %rank%")
}
case LOOK_ENEMY:
{
copy(message, charsmax(message), "Враг: %name% Ранг: %rank%")
}
case LOOK_HOSTAGE:
{
return
}
}
EditMessage(message, update, true, get_user_health(update))
message_begin(MSG_ONE_UNRELIABLE, gStatusText, _, id)
write_byte(0); write_string(message); message_end()
}
}
}
}
EditMessage(message[192], player, bool:status_text, hp)
{
new temp[64]
if (is_user_alive(player))
{
for (new i; i < MAX_REPLACES; i++)
{
switch(i)
{
case RE_HP:
{
num_to_str(hp, temp, charsmax(temp))
}
case RE_RANK:
{
format(temp, charsmax(temp), "%s", CLASSES[UserData[player][level]])
}
case RE_NAME:
{
if (status_text)
copy(temp, charsmax(temp), "%p2")
else
get_user_name(player, temp, charsmax(temp))
}
default:
{
copy(temp, charsmax(temp), "")
}
}
replace(message, charsmax(message), Replaces[i], temp)
}
}
trim(message)
}
#endif
public plugin_natives()
register_native("lrs_get_level_name", "_lrs_get_level_name")
public _lrs_get_level_name(plugin, params)
{
new buffer[192]
new id = get_param(1)
new len = get_param(3)
format(buffer, len, "%s", CLASSES[UserData[id][level]])
set_string(2, buffer, len)
}
stock HudMsgPos(&Float:x, &Float:y)
{
static coords[16], piece[10]
get_pcvar_string(g_Cvar[5], coords, 15)
argbreak(coords, piece, 9, coords, 15)
x = str_to_float(piece)
y = str_to_float(coords)
}
stock HudMsgColor(cvar, &r, &g, &b)
{
static color[16], piece[5]
get_pcvar_string(cvar, color, 15)
argbreak(color, piece, 4, color, 15)
r = str_to_num(piece)
argbreak(color, piece, 4, color, 15)
g = str_to_num(piece)
b = str_to_num(color)
}
#if defined CSSTATSX_SQL
#if defined CSSTATSX_SQL_HUD_SKILL
aes_statsx_get_skill_id(Float:szSkill)
{
for (new i; i < sizeof g_skill_opt; i ++)
{
if (szSkill < g_skill_opt[i])
{
return i
}
}
return (sizeof g_skill_opt - 1)
}
#endif
#endif
Ошибка компиляции Lite Rank System при попытке добавить званий. На онлайн компиляторе возникает вышеуказанная ошибка, локальный компилятор просто отказывается работать.
P.s. при добавлении до 50 званий все шло нормально, попытался добавить 60+, уже выходит эта ошибка. Помогите пожалуйста
P.p.s в оригинале там
P.s. при добавлении до 50 званий все шло нормально, попытался добавить 60+, уже выходит эта ошибка. Помогите пожалуйста
P.p.s в оригинале там
Код:
cvLevels[256]
В этой теме было размещено решение! Перейти к решению.
Последнее редактирование: