Версия | Дата выхода | Скачиваний | Оценка |
---|---|---|---|
2.1 | 160 | 0.00 звёзд 0 оценок | |
2.0(stable) | 13 | 0.00 звёзд 0 оценок | |
2.0(stable) | 5 | 0.00 звёзд 0 оценок |
- Оптимизация
- Косметические изменения
Код:/* |----[Связь с автором]----| |VK: vk.com/nunfy | |TELEGRAM: t.me/Nunfy | |-------------------------| */ #include <amxmodx> #include <reapi> +#define is_client(%0) (1 <= %0 <= MaxClients) -new const VERSION[] = "2.0(stable)"; +new const VERSION[] = "2.1"; const MAX_MODELS = 1; // Максимальное количество моделей new const model_path[8][MAX_MODELS][] = { { // terror "models/player/terror_leader/terror_leader.mdl", }, { // leet "models/player/leet_leader/leet_leader.mdl", }, { // arctic "models/player/arctic_leader/arctic_leader.mdl", }, { // guerilla "models/player/guerilla_leader/guerilla_leader.mdl", }, { // urban "models/player/urban_leader/urban_leader.mdl", }, { // gsg9 "models/player/gsg9_leader/gsg9_leader.mdl", }, { // sas "models/player/sas_leader/sas_leader.mdl", }, { // gign "models/player/gign_leader/gign_leader.mdl" } }; new const default_model[8][MAX_MODELS][] = { { // terror "terror", }, { // leet "leet", }, { // arctic "arctic", }, { // guerilla "guerilla", }, { // urban "urban", }, { // gsg9 "gsg9", }, { // sas "sas", }, { // gign "gign" } }; new const custom_model[8][MAX_MODELS][] = { { // terror "terror_leader", }, { // leet "leet_leader", }, { // arctic "arctic_leader", }, { // guerilla "guerilla_leader", }, { // urban "urban_leader", }, { // gsg9 "gsg9_leader", }, { // sas "sas_leader", }, { // gign "gign_leader" } }; enum cvar_data { cvar_mode } enum { dId, dKills, dDamage } enum user_data { udModel, udKills, udDamage }; enum leader_data { ldId, ldKills, ldDamage, ldPast_id }; new cd[cvar_data], ud[MAX_CLIENTS + 1][user_data], ld[leader_data]; -new max_users; public plugin_init() { register_plugin("Ultimate Leader", VERSION, "Nunf"); register_dictionary("ultimate_leader.txt"); - bind_pcvar_num(create_cvar("ul_mode", "0", FCVAR_NONE, fmt("%l", "CVAR_MODE_DISCRIPTION"), true, 0.0, true, 1.0), cd[cvar_mode]); + bind_pcvar_num(create_cvar("ul_mode", "0", FCVAR_NONE, fmt("%l", "UL_CVAR_MODE_DESCRIPTION"), true, 0.0, true, 1.0), cd[cvar_mode]); AutoExecConfig(true, "ultimate_leader"); - max_users = get_maxplayers(); RegisterHookChain(RG_HandleMenu_ChooseAppearance, "user_choose_appearance", true); RegisterHookChain(RG_CBasePlayer_Killed, "user_killed", true); RegisterHookChain(RG_CBasePlayer_TakeDamage, "user_take_damage", true); RegisterHookChain(RG_RoundEnd, "round_end", true); RegisterHookChain(RG_CBasePlayer_Spawn, "user_spawn", true); RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "set_user_model", false); } public plugin_cfg() { cd[cvar_mode] = get_cvar_num("ul_mode"); } public plugin_precache() { for(new i; i < sizeof model_path; i++) { for(new n; n < MAX_MODELS; n++) { if(file_exists(model_path[i][n])) { precache_model(model_path[i][n]); } else { set_fail_state("^n\ [ERROR]: FILE NOT EXISTS(array ^"model_path^")^n\ [FILE PATH]: %s", model_path[i][n]); } } } } public client_disconnected(id, bool:drop, message[], maxlen) { ud[id][udModel] = 0; ud[id][udKills] = 0; ud[id][udDamage] = 0; if(id == ld[ldId]) { ld[ldId] = 0; ld[ldKills] = 0; ld[ldDamage] = 0; } else if(id == ld[ldPast_id]) { ld[ldPast_id] = 0; } } public user_choose_appearance(const id, slot) { switch(get_member(id, m_iModelName)) { case MODEL_T_TERROR: { ud[id][udModel] = 0; } case MODEL_T_LEET: { ud[id][udModel] = 1; } case MODEL_T_ARCTIC: { ud[id][udModel] = 2; } case MODEL_T_GUERILLA: { ud[id][udModel] = 3; } case MODEL_CT_URBAN: { ud[id][udModel] = 4; } case MODEL_CT_GSG9: { ud[id][udModel] = 5; } case MODEL_CT_SAS: { ud[id][udModel] = 6; } case MODEL_CT_GIGN: { ud[id][udModel] = 7; } } } public user_killed(const id, attacker_id, iGib) { - if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) + if(is_client(attacker_id) && id != attacker_id) { ud[attacker_id][udKills]++; } } public user_take_damage(const id, pevInflictor, attacker_id, Float: damage, bitsDamageType) { - if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) + if(is_client(attacker_id) && id != attacker_id) { if(GetHookChainReturn(ATYPE_INTEGER) == 1) { ud[attacker_id][udDamage] += floatround(damage); } else if(get_member(attacker_id, m_iTeam) != get_member(attacker_id, m_iTeam)) { ud[attacker_id][udDamage] += floatround(damage) + get_user_health(id); } } } public round_end(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay) { set_task(0.1, "task_round_end"); } public user_spawn(id) { if(id == ld[ldId]) { rg_set_user_model(ld[ldId], custom_model[ud[id][udModel]][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { rg_set_user_model(ld[ldId], default_model[ud[id][udModel]][random(sizeof default_model[])]); } } public set_user_model(id, infobuffer[], new_model[]) { if(id == ld[ldId]) { SetHookChainArg(3, ATYPE_STRING, custom_model[ud[id][udModel]][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { SetHookChainArg(3, ATYPE_STRING, default_model[ud[id][udModel]][random(sizeof default_model[])]); } } public task_round_end() { new u_i[MAX_CLIENTS], u_n; get_players(u_i, u_n, "h"); new data[3]; data[dId] = u_i[0]; data[dKills] = ud[u_i[0]][udKills]; data[dDamage] = ud[u_i[0]][udDamage]; ud[u_i[0]][udKills] = 0; ud[u_i[0]][udDamage] = 0; if(cd[cvar_mode] == 0) { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udKills] > data[dKills] || ud[u_i[i]][udKills] == data[dKills] && ud[u_i[i]][udDamage] > data[dDamage]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dKills] > ld[ldKills] || data[dKills] == ld[ldKills] && data[dDamage] > ld[ldDamage]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); + client_print_color(0, print_team_default, "%l", "UL_LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - client_print_color(0, print_team_default, "%l", "NEW_LEADER", data[dId], data[dKills], data[dDamage]); + client_print_color(0, print_team_default, "%l", "UL_NEW_LEADER", data[dId], data[dKills], data[dDamage]); } } else { - if(ld[ldId] < 1 || ld[ldId] > max_users) - { - client_print_color(0, print_team_default, "%l", "NO_LEADER"); - } - else - { - client_print_color(0, print_team_default, "%l", "NOBODY_SUPPARSED_LEADER", ld[ldId]); - } + if(!is_client(ld[ldId])) + { + client_print_color(0, print_team_default, "%l", "UL_NO_LEADER"); + } + else + { + client_print_color(0, print_team_default, "%l", "UL_NOBODY_SUPPARSED_LEADER", ld[ldId]); + } } } else { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udDamage] > data[dDamage] || ud[u_i[i]][udDamage] == data[dDamage] && ud[u_i[i]][udKills] > data[dKills]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dDamage] > ld[ldDamage] || data[dDamage] == ld[ldDamage] && data[dKills] > ld[ldKills]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); + client_print_color(0, print_team_default, "%l", "UL_LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - client_print_color(0, print_team_default, "%l", "NEW_LEADER", data[dId], data[dKills], data[dDamage]); + client_print_color(0, print_team_default, "%l", "UL_NEW_LEADER", data[dId], data[dKills], data[dDamage]); } } else { - if(ld[ldId] < 1 || ld[ldId] > max_users) - { - client_print_color(0, print_team_default, "%l", "NO_LEADER"); - } - else - { - client_print_color(0, print_team_default, "%l", "NOBODY_SUPPARSED_LEADER", ld[ldId]); - } + if(!is_client(ld[ldId])) + { + client_print_color(0, print_team_default, "%l", "UL_NO_LEADER"); + } + else + { + client_print_color(0, print_team_default, "%l", "UL_NOBODY_SUPPARSED_LEADER", ld[ldId]); + } } } }
Не заметил ошибочку..
Код:/* |----[Связь с автором]----| |VK: vk.com/nunfy | |TELEGRAM: t.me/Nunfy | |-------------------------| */ #include <amxmodx> #include <reapi> new const VERSION[] = "2.0(stable)"; const MAX_MODELS = 1; // Максимальное количество моделей new const model_path[8][MAX_MODELS][] = { { // terror "models/player/terror_leader/terror_leader.mdl", }, { // leet "models/player/leet_leader/leet_leader.mdl", }, { // arctic "models/player/arctic_leader/arctic_leader.mdl", }, { // guerilla "models/player/guerilla_leader/guerilla_leader.mdl", }, { // urban "models/player/urban_leader/urban_leader.mdl", }, { // gsg9 "models/player/gsg9_leader/gsg9_leader.mdl", }, { // sas "models/player/sas_leader/sas_leader.mdl", }, { // gign "models/player/gign_leader/gign_leader.mdl" } }; new const default_model[8][MAX_MODELS][] = { { // terror "terror", }, { // leet "leet", }, { // arctic "arctic", }, { // guerilla "guerilla", }, { // urban "urban", }, { // gsg9 "gsg9", }, { // sas "sas", }, { // gign "gign" } }; new const custom_model[8][MAX_MODELS][] = { { // terror "terror_leader", }, { // leet "leet_leader", }, { // arctic "arctic_leader", }, { // guerilla "guerilla_leader", }, { // urban "urban_leader", }, { // gsg9 "gsg9_leader", }, { // sas "sas_leader", }, { // gign "gign_leader" } }; enum cvar_data { cvar_mode } enum { dId, dKills, dDamage } enum user_data { udModel, udKills, udDamage }; enum leader_data { ldId, ldKills, ldDamage, ldPast_id }; new cd[cvar_data], ud[MAX_CLIENTS + 1][user_data], ld[leader_data]; new max_users; public plugin_init() { register_plugin("Ultimate Leader", VERSION, "Nunf"); register_dictionary("ultimate_leader.txt"); bind_pcvar_num(create_cvar("ul_mode", "0", FCVAR_NONE, fmt("%l", "CVAR_MODE_DISCRIPTION"), true, 0.0, true, 1.0), cd[cvar_mode]); AutoExecConfig(true, "ultimate_leader"); max_users = get_maxplayers(); RegisterHookChain(RG_HandleMenu_ChooseAppearance, "user_choose_appearance", true); RegisterHookChain(RG_CBasePlayer_Killed, "user_killed", true); RegisterHookChain(RG_CBasePlayer_TakeDamage, "user_take_damage", true); RegisterHookChain(RG_RoundEnd, "round_end", true); RegisterHookChain(RG_CBasePlayer_Spawn, "user_spawn", true); RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "set_user_model", false); } public plugin_cfg() { cd[cvar_mode] = get_cvar_num("ul_mode"); } public plugin_precache() { for(new i; i < sizeof model_path; i++) { for(new n; n < MAX_MODELS; n++) { if(file_exists(model_path[i][n])) { precache_model(model_path[i][n]); } else { set_fail_state("^n\ [ERROR]: FILE NOT EXISTS(array ^"model_path^")^n\ [FILE PATH]: %s", model_path[i][n]); } } } } public client_disconnected(id, bool:drop, message[], maxlen) { ud[id][udModel] = 0; ud[id][udKills] = 0; ud[id][udDamage] = 0; if(id == ld[ldId]) { ld[ldId] = 0; ld[ldKills] = 0; ld[ldDamage] = 0; } else if(id == ld[ldPast_id]) { ld[ldPast_id] = 0; } } public user_choose_appearance(const id, slot) { switch(get_member(id, m_iModelName)) { case MODEL_T_TERROR: { ud[id][udModel] = 0; } case MODEL_T_LEET: { ud[id][udModel] = 1; } case MODEL_T_ARCTIC: { ud[id][udModel] = 2; } case MODEL_T_GUERILLA: { ud[id][udModel] = 3; } case MODEL_CT_URBAN: { ud[id][udModel] = 4; } case MODEL_CT_GSG9: { ud[id][udModel] = 5; } case MODEL_CT_SAS: { ud[id][udModel] = 6; } case MODEL_CT_GIGN: { ud[id][udModel] = 7; } } } public user_killed(const id, attacker_id, iGib) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { ud[attacker_id][udKills]++; } } public user_take_damage(const id, pevInflictor, attacker_id, Float: damage, bitsDamageType) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { if(GetHookChainReturn(ATYPE_INTEGER) == 1) { ud[attacker_id][udDamage] += floatround(damage); } else if(get_member(attacker_id, m_iTeam) != get_member(attacker_id, m_iTeam)) { ud[attacker_id][udDamage] += floatround(damage) + get_user_health(id); } } } public round_end(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay) { set_task(0.1, "task_round_end"); } public user_spawn(id) { if(id == ld[ldId]) { rg_set_user_model(ld[ldId], custom_model[ud[id][udModel]][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { rg_set_user_model(ld[ldId], default_model[ud[id][udModel]][random(sizeof default_model[])]); } } public set_user_model(id, infobuffer[], new_model[]) { if(id == ld[ldId]) { SetHookChainArg(3, ATYPE_STRING, custom_model[ud[id][udModel]][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { SetHookChainArg(3, ATYPE_STRING, default_model[ud[id][udModel]][random(sizeof default_model[])]); } } public task_round_end() { new u_i[MAX_CLIENTS], u_n; get_players(u_i, u_n, "h"); new data[3]; data[dId] = u_i[0]; data[dKills] = ud[u_i[0]][udKills]; data[dDamage] = ud[u_i[0]][udDamage]; ud[u_i[0]][udKills] = 0; ud[u_i[0]][udDamage] = 0; if(cd[cvar_mode] == 0) { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udKills] > data[dKills] || ud[u_i[i]][udKills] == data[dKills] && ud[u_i[i]][udDamage] > data[dDamage]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dKills] > ld[ldKills] || data[dKills] == ld[ldKills] && data[dDamage] > ld[ldDamage]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; client_print_color(0, print_team_default, "%l", "NEW_LEADER", data[dId], data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { client_print_color(0, print_team_default, "%l", "NO_LEADER"); } else { client_print_color(0, print_team_default, "%l", "NOBODY_SUPPARSED_LEADER", ld[ldId]); } } } else { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udDamage] > data[dDamage] || ud[u_i[i]][udDamage] == data[dDamage] && ud[u_i[i]][udKills] > data[dKills]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dDamage] > ld[ldDamage] || data[dDamage] == ld[ldDamage] && data[dKills] > ld[ldKills]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; client_print_color(0, print_team_default, "%l", "NEW_LEADER", data[dId], data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { client_print_color(0, print_team_default, "%l", "NO_LEADER"); } else { - client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", ld[ldId]); + client_print_color(0, print_team_default, "%l", "NOBODY_SUPPARSED_LEADER", ld[ldId]); } } } }
- Теперь настройки из конфига вступят в силу сразу же после запуска плагина, а не после рестарта либо смены карты
Код:/* |----[Связь с автором]----| |VK: vk.com/nunfy | |TELEGRAM: t.me/Nunfy | |-------------------------| */ #include <amxmodx> #include <reapi> new const VERSION[] = "2.0(stable)"; const MAX_MODELS = 1; // Максимальное количество моделей new const model_path[8][MAX_MODELS][] = { { // terror "models/player/terror_leader/terror_leader.mdl", }, { // leet "models/player/leet_leader/leet_leader.mdl", }, { // arctic "models/player/arctic_leader/arctic_leader.mdl", }, { // guerilla "models/player/guerilla_leader/guerilla_leader.mdl", }, { // urban "models/player/urban_leader/urban_leader.mdl", }, { // gsg9 "models/player/gsg9_leader/gsg9_leader.mdl", }, { // sas "models/player/sas_leader/sas_leader.mdl", }, { // gign "models/player/gign_leader/gign_leader.mdl" } }; new const default_model[8][MAX_MODELS][] = { { // terror "terror", }, { // leet "leet", }, { // arctic "arctic", }, { // guerilla "guerilla", }, { // urban "urban", }, { // gsg9 "gsg9", }, { // sas "sas", }, { // gign "gign" } }; new const custom_model[8][MAX_MODELS][] = { { // terror "terror_leader", }, { // leet "leet_leader", }, { // arctic "arctic_leader", }, { // guerilla "guerilla_leader", }, { // urban "urban_leader", }, { // gsg9 "gsg9_leader", }, { // sas "sas_leader", }, { // gign "gign_leader" } }; enum cvar_data { cvar_mode } enum { dId, dKills, dDamage } enum user_data { udModel, udKills, udDamage }; enum leader_data { ldId, ldKills, ldDamage, ldPast_id }; new cd[cvar_data], ud[MAX_CLIENTS + 1][user_data], ld[leader_data]; new max_users; public plugin_init() { register_plugin("Ultimate Leader", VERSION, "Nunf"); register_dictionary("ultimate_leader.txt"); bind_pcvar_num(create_cvar("ul_mode", "0", FCVAR_NONE, fmt("%l", "CVAR_MODE_DISCRIPTION"), true, 0.0, true, 1.0), cd[cvar_mode]); AutoExecConfig(true, "ultimate_leader"); max_users = get_maxplayers(); RegisterHookChain(RG_HandleMenu_ChooseAppearance, "user_choose_appearance", true); RegisterHookChain(RG_CBasePlayer_Killed, "user_killed", true); RegisterHookChain(RG_CBasePlayer_TakeDamage, "user_take_damage", true); RegisterHookChain(RG_RoundEnd, "round_end", true); RegisterHookChain(RG_CBasePlayer_Spawn, "user_spawn", true); RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "set_user_model", false); } +public plugin_cfg() +{ + cd[cvar_mode] = get_cvar_num("ul_mode"); +} public plugin_precache() { for(new i; i < sizeof model_path; i++) { for(new n; n < MAX_MODELS; n++) { if(file_exists(model_path[i][n])) { precache_model(model_path[i][n]); } else { set_fail_state("^n\ [ERROR]: FILE NOT EXISTS(array ^"model_path^")^n\ [FILE PATH]: %s", model_path[i][n]); } } } } public client_disconnected(id, bool:drop, message[], maxlen) { ud[id][udModel] = 0; ud[id][udKills] = 0; ud[id][udDamage] = 0; if(id == ld[ldId]) { ld[ldId] = 0; ld[ldKills] = 0; ld[ldDamage] = 0; } else if(id == ld[ldPast_id]) { ld[ldPast_id] = 0; } } public user_choose_appearance(const id, slot) { switch(get_member(id, m_iModelName)) { case MODEL_T_TERROR: { ud[id][udModel] = 0; } case MODEL_T_LEET: { ud[id][udModel] = 1; } case MODEL_T_ARCTIC: { ud[id][udModel] = 2; } case MODEL_T_GUERILLA: { ud[id][udModel] = 3; } case MODEL_CT_URBAN: { ud[id][udModel] = 4; } case MODEL_CT_GSG9: { ud[id][udModel] = 5; } case MODEL_CT_SAS: { ud[id][udModel] = 6; } case MODEL_CT_GIGN: { ud[id][udModel] = 7; } } } public user_killed(const id, attacker_id, iGib) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { ud[attacker_id][udKills]++; } } public user_take_damage(const id, pevInflictor, attacker_id, Float: damage, bitsDamageType) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { if(GetHookChainReturn(ATYPE_INTEGER) == 1) { ud[attacker_id][udDamage] += floatround(damage); } else if(get_member(attacker_id, m_iTeam) != get_member(attacker_id, m_iTeam)) { ud[attacker_id][udDamage] += floatround(damage) + get_user_health(id); } } } public round_end(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay) { set_task(0.1, "task_round_end"); } public user_spawn(id) { if(id == ld[ldId]) { rg_set_user_model(ld[ldId], custom_model[ud[id][udModel]][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { rg_set_user_model(ld[ldId], default_model[ud[id][udModel]][random(sizeof default_model[])]); } } public set_user_model(id, infobuffer[], new_model[]) { if(id == ld[ldId]) { SetHookChainArg(3, ATYPE_STRING, custom_model[ud[id][udModel]][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { SetHookChainArg(3, ATYPE_STRING, default_model[ud[id][udModel]][random(sizeof default_model[])]); } } public task_round_end() { new u_i[MAX_CLIENTS], u_n; get_players(u_i, u_n, "h"); new data[3]; data[dId] = u_i[0]; data[dKills] = ud[u_i[0]][udKills]; data[dDamage] = ud[u_i[0]][udDamage]; ud[u_i[0]][udKills] = 0; ud[u_i[0]][udDamage] = 0; if(cd[cvar_mode] == 0) { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udKills] > data[dKills] || ud[u_i[i]][udKills] == data[dKills] && ud[u_i[i]][udDamage] > data[dDamage]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dKills] > ld[ldKills] || data[dKills] == ld[ldKills] && data[dDamage] > ld[ldDamage]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; client_print_color(0, print_team_default, "%l", "NEW_LEADER", data[dId], data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { client_print_color(0, print_team_default, "%l", "NO_LEADER"); } else { client_print_color(0, print_team_default, "%l", "NOBODY_SUPPARSED_LEADER", ld[ldId]); } } } else { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udDamage] > data[dDamage] || ud[u_i[i]][udDamage] == data[dDamage] && ud[u_i[i]][udKills] > data[dKills]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dDamage] > ld[ldDamage] || data[dDamage] == ld[ldDamage] && data[dKills] > ld[ldKills]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; client_print_color(0, print_team_default, "%l", "NEW_LEADER", data[dId], data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { client_print_color(0, print_team_default, "%l", "NO_LEADER"); } else { client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", ld[ldId]); } } } }
Код:/* |----[Связь с автором]----| |VK: vk.com/nunfy | |TELEGRAM: t.me/Nunfy | |-------------------------| */ #include <amxmodx> #include <reapi> -new const VERSION[] = "2.0"; +new const VERSION[] = "2.0(stable)"; const MAX_MODELS = 1; // Максимальное количество моделей new const model_path[8][MAX_MODELS][] = { { // terror "models/player/terror_leader/terror_leader.mdl", }, { // leet "models/player/leet_leader/leet_leader.mdl", }, { // arctic "models/player/arctic_leader/arctic_leader.mdl", }, { // guerilla "models/player/guerilla_leader/guerilla_leader.mdl", }, { // urban "models/player/urban_leader/urban_leader.mdl", }, { // gsg9 "models/player/gsg9_leader/gsg9_leader.mdl", }, { // sas "models/player/sas_leader/sas_leader.mdl", }, { // gign "models/player/gign_leader/gign_leader.mdl" } }; new const default_model[8][MAX_MODELS][] = { { // terror "terror", }, { // leet "leet", }, { // arctic "arctic", }, { // guerilla "guerilla", }, { // urban "urban", }, { // gsg9 "gsg9", }, { // sas "sas", }, { // gign "gign" } }; new const custom_model[8][MAX_MODELS][] = { { // terror "terror_leader", }, { // leet "leet_leader", }, { // arctic "arctic_leader", }, { // guerilla "guerilla_leader", }, { // urban "urban_leader", }, { // gsg9 "gsg9_leader", }, { // sas "sas_leader", }, { // gign "gign_leader" } }; -new const cvar_mode_description[] = "The mode of counting the leader of the round^n\ - 0 - until the player surpasses the current leader in kills.^n\ - 1 - until the player surpasses the current leader in damage."; enum cvar_data { cvar_mode } enum { dId, dKills, dDamage } enum user_data { udModel, udKills, udDamage }; enum leader_data { ldId, ldKills, ldDamage, ldPast_id }; new cd[cvar_data], ud[MAX_CLIENTS + 1][user_data], ld[leader_data]; new max_users; public plugin_init() { register_plugin("Ultimate Leader", VERSION, "Nunf"); register_dictionary("ultimate_leader.txt"); - bind_pcvar_num(create_cvar("ul_mode", "1", .description = cvar_mode_description), cd[cvar_mode]); + bind_pcvar_num(create_cvar("ul_mode", "0", FCVAR_NONE, fmt("%l", "CVAR_MODE_DISCRIPTION"), true, 0.0, true, 1.0), cd[cvar_mode]); AutoExecConfig(true, "ultimate_leader"); max_users = get_maxplayers(); RegisterHookChain(RG_HandleMenu_ChooseAppearance, "user_choose_appearance", true); - RegisterHookChain(RG_CBasePlayer_Killed, "user_killed", false); + RegisterHookChain(RG_CBasePlayer_Killed, "user_killed", true); RegisterHookChain(RG_CBasePlayer_TakeDamage, "user_take_damage", true); RegisterHookChain(RG_RoundEnd, "round_end", true); RegisterHookChain(RG_CBasePlayer_Spawn, "user_spawn", true); RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "set_user_model", false); } public plugin_precache() { for(new i; i < sizeof model_path; i++) { for(new n; n < MAX_MODELS; n++) { if(file_exists(model_path[i][n])) { precache_model(model_path[i][n]); } else { set_fail_state("^n\ [ERROR]: FILE NOT EXISTS(array ^"model_path^")^n\ [FILE PATH]: %s", model_path[i][n]); } } } } public client_disconnected(id, bool:drop, message[], maxlen) { ud[id][udModel] = 0; ud[id][udKills] = 0; ud[id][udDamage] = 0; if(id == ld[ldId]) { ld[ldId] = 0; ld[ldKills] = 0; ld[ldDamage] = 0; } else if(id == ld[ldPast_id]) { ld[ldPast_id] = 0; } } public user_choose_appearance(const id, slot) { - if(slot == 5) - { - slot = random(5); - } - if(get_member(id, m_iTeam) == TEAM_TERRORIST) - { - ud[id][udModel] = slot; - } - else if(get_member(id, m_iTeam) == TEAM_CT) - { - ud[id][udModel] = 4 + slot; - } + switch(get_member(id, m_iModelName)) + { + case MODEL_T_TERROR: + { + ud[id][udModel] = 0; + } + case MODEL_T_LEET: + { + ud[id][udModel] = 1; + } + case MODEL_T_ARCTIC: + { + ud[id][udModel] = 2; + } + case MODEL_T_GUERILLA: + { + ud[id][udModel] = 3; + } + case MODEL_CT_URBAN: + { + ud[id][udModel] = 4; + } + case MODEL_CT_GSG9: + { + ud[id][udModel] = 5; + } + case MODEL_CT_SAS: + { + ud[id][udModel] = 6; + } + case MODEL_CT_GIGN: + { + ud[id][udModel] = 7; + } + } } public user_killed(const id, attacker_id, iGib) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { ud[attacker_id][udKills]++; } } public user_take_damage(const id, pevInflictor, attacker_id, Float: damage, bitsDamageType) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { if(GetHookChainReturn(ATYPE_INTEGER) == 1) { ud[attacker_id][udDamage] += floatround(damage); } else if(get_member(attacker_id, m_iTeam) != get_member(attacker_id, m_iTeam)) { ud[attacker_id][udDamage] += floatround(damage) + get_user_health(id); } } } public round_end(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay) { set_task(0.1, "task_round_end"); } public user_spawn(id) { if(id == ld[ldId]) { - rg_set_user_model(ld[ldId], custom_model[ud[id][udModel] - 1][random(sizeof custom_model[])]); + rg_set_user_model(ld[ldId], custom_model[ud[id][udModel]][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { - rg_set_user_model(ld[ldId], default_model[ud[id][udModel] - 1][random(sizeof default_model[])]); + rg_set_user_model(ld[ldId], default_model[ud[id][udModel]][random(sizeof default_model[])]); } } public set_user_model(id, infobuffer[], new_model[]) { if(id == ld[ldId]) { - SetHookChainArg(3, ATYPE_STRING, custom_model[ud[id][udModel] - 1][random(sizeof custom_model[])]); + SetHookChainArg(3, ATYPE_STRING, custom_model[ud[id][udModel]][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { - SetHookChainArg(3, ATYPE_STRING, default_model[ud[id][udModel] - 1][random(sizeof default_model[])]); + SetHookChainArg(3, ATYPE_STRING, default_model[ud[id][udModel]][random(sizeof default_model[])]); } } public task_round_end() { new u_i[MAX_CLIENTS], u_n; get_players(u_i, u_n, "h"); new data[3]; data[dId] = u_i[0]; data[dKills] = ud[u_i[0]][udKills]; data[dDamage] = ud[u_i[0]][udDamage]; ud[u_i[0]][udKills] = 0; ud[u_i[0]][udDamage] = 0; if(cd[cvar_mode] == 0) { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udKills] > data[dKills] || ud[u_i[i]][udKills] == data[dKills] && ud[u_i[i]][udDamage] > data[dDamage]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dKills] > ld[ldKills] || data[dKills] == ld[ldKills] && data[dDamage] > ld[ldDamage]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - client_print_color(0, print_team_default, "%L", "ru", "Q", get_user_nickname(data[dId]), data[dKills], data[dDamage]); + client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - client_print_color(0, print_team_default, "%L", "ru", "W", get_user_nickname(data[dId]), data[dKills], data[dDamage]); + client_print_color(0, print_team_default, "%l", "NEW_LEADER", data[dId], data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { - client_print_color(0, print_team_default, "%L", "ru", "E"); + client_print_color(0, print_team_default, "%l", "NO_LEADER"); } else { - client_print_color(0, print_team_default, "%L", "ru", "R", get_user_nickname(ld[ldId])); + client_print_color(0, print_team_default, "%l", "NOBODY_SUPPARSED_LEADER", ld[ldId]); } } } else { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udDamage] > data[dDamage] || ud[u_i[i]][udDamage] == data[dDamage] && ud[u_i[i]][udKills] > data[dKills]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dDamage] > ld[ldDamage] || data[dDamage] == ld[ldDamage] && data[dKills] > ld[ldKills]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - client_print_color(0, print_team_default, "%L", "ru", "1", get_user_nickname(data[dId]), data[dKills], data[dDamage]); + client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", data[dId], data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - client_print_color(0, print_team_default, "%L", "ru", "2", get_user_nickname(data[dId]), data[dKills], data[dDamage]); + client_print_color(0, print_team_default, "%l", "NEW_LEADER", data[dId], data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { - client_print_color(0, print_team_default, "3", "ru"); + client_print_color(0, print_team_default, "%l", "NO_LEADER"); } else { - client_print_color(0, print_team_default, "4", "ru", get_user_nickname(ld[ldId])); + client_print_color(0, print_team_default, "%l", "LEADER_OUTDONE_HIMSELF", ld[ldId]); } } } } -get_user_nickname(id) -{ - new nickname[MAX_NAME_LENGTH]; - get_entvar(id, var_netname, nickname, charsmax(nickname)); - return nickname; -}
Код:[ru] -Q = ^3[Ultimate] ^1Текущий лидер^4 %s ^1превзошел свои показатели. Количество убийств:^4 %d ^1| Количество урона:^4 %d -W = ^3[Ultimate] ^4%s ^1становится новым лидером. Количество убийств:^4 %d ^1| Количество урона:^4 %d -E = ^3[Ultimate] ^4Лидер ^1будет определен в текущем раунде -R = ^3[Ultimate] ^1В этом раунде никто не превзошел лидера^4 %s +LEADER_OUTDONE_HIMSELF = ^3[Ultimate] ^1Текущий лидер^4 %n ^1превзошел свои показатели. Количество убийств:^4 %d ^1| Количество урона:^4 %d +NEW_LEADER = ^3[Ultimate] ^4%n ^1становится новым лидером. Количество убийств:^4 %d ^1| Количество урона:^4 %d +NO_LEADER = ^3[Ultimate] ^4Лидер ^1будет определен в текущем раунде +NOBODY_SUPPARSED_LEADER = ^3[Ultimate] ^1В этом раунде никто не превзошел лидера^4 %n +CVAR_MODE_DISCRIPTION = Режим подсчета лидера раунда^n0 - пока игрок не превзойдет текущего лидера по количеству убийств^n1 - пока игрок не превзойдет текущего лидера по урону
Код:/* |----[Связь с автором]----| |VK: vk.com/nunfy | |TELEGRAM: t.me/Nunfy | |-------------------------| */ #include <amxmodx> #include <reapi> -#define PLUGIN "Ultimate Leader" -#define VERSION "2.0" -#define AUTHOR "Nunf" -#define cpc client_print_color -#define ptd print_team_default const MAX_MODELS = 1; // Максимальное количество моделей -const MAX_NICKNAME_LENGHT = 32; // Максимальная длинна никнейма enum { dId, dKills, dDamage } enum user_data { udModel, udKills, udDamage }; enum leader_data { ldId, ldKills, ldDamage, ldPast_id }; new ud[MAX_PLAYERS + 1][user_data], ld[leader_data]; -new bool: cvar_mode; -static max_users; -static model_path[8][MAX_MODELS][] = { { // terror "models/player/terror_leader/terror_leader.mdl", }, { // leet "models/player/leet_leader/leet_leader.mdl", }, { // arctic "models/player/arctic_leader/arctic_leader.mdl", }, { // guerilla "models/player/guerilla_leader/guerilla_leader.mdl", }, { // urban "models/player/urban_leader/urban_leader.mdl", }, { // gsg9 "models/player/gsg9_leader/gsg9_leader.mdl", }, { // sas "models/player/sas_leader/sas_leader.mdl", }, { // gign "models/player/gign_leader/gign_leader.mdl" } }; -static default_model[8][MAX_MODELS][] = { { // terror "terror", }, { // leet "leet", }, { // arctic "arctic", }, { // guerilla "guerilla", }, { // urban "urban", }, { // gsg9 "gsg9", }, { // sas "sas", }, { // gign "gign" } }; -static custom_model[8][MAX_MODELS][] = { { // terror "terror_leader", }, { // leet "leet_leader", }, { // arctic "arctic_leader", }, { // guerilla "guerilla_leader", }, { // urban "urban_leader", }, { // gsg9 "gsg9_leader", }, { // sas "sas_leader", }, { // gign "gign_leader" } }; -static config_path[] = "addons/amxmodx/configs/ultimate_leader.cfg"; public plugin_init() { - register_plugin(PLUGIN, VERSION, AUTHOR); register_dictionary("ultimate_leader.txt"); max_users = get_maxplayers(); RegisterHookChain(RG_HandleMenu_ChooseAppearance, "user_choose_appearance", true); RegisterHookChain(RG_CBasePlayer_Killed, "user_killed", false); RegisterHookChain(RG_CBasePlayer_TakeDamage, "user_take_damage", true); RegisterHookChain(RG_RoundEnd, "round_end", true); RegisterHookChain(RG_CBasePlayer_Spawn, "user_spawn", true); RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "set_user_model", false); } -public plugin_cfg() -{ - cvar_mode = get_pcvar_bool(register_cvar("ul_mode", "0")); - server_cmd("exec %s", config_path); -} public plugin_precache() { - for(new i; i < 8; i++) { for(new n; n < MAX_MODELS; n++) { if(file_exists(model_path[i][n])) { precache_model(model_path[i][n]); } else { set_fail_state("^n\ [ERROR]: FILE NOT EXISTS(array ^"model_path^")^n\ [FILE PATH]: %s", model_path[i][n]); } } } } public client_disconnected(id, bool:drop, message[], maxlen) { ud[id][udModel] = 0; ud[id][udKills] = 0; ud[id][udDamage] = 0; if(id == ld[ldId]) { ld[ldId] = 0; ld[ldKills] = 0; ld[ldDamage] = 0; } else if(id == ld[ldPast_id]) { ld[ldPast_id] = 0; } } public user_choose_appearance(const id, const slot) { - if(get_user_team(id) == 1) { ud[id][udModel] = slot; } - else if(get_user_team(id) == 2) { ud[id][udModel] = 4 + slot; } } public user_killed(const id, attacker_id, iGib) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { ud[attacker_id][udKills]++; } } public user_take_damage(const id, pevInflictor, attacker_id, Float: damage, bitsDamageType) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { if(GetHookChainReturn(ATYPE_INTEGER) == 1) { ud[attacker_id][udDamage] += floatround(damage); } - else if(get_user_team(id) != get_user_team(attacker_id)) { ud[attacker_id][udDamage] += floatround(damage) + get_user_health(id); } } } public round_end(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay) { set_task(0.1, "task_round_end"); } public user_spawn(id) { if(id == ld[ldId]) { rg_set_user_model(ld[ldId], custom_model[ud[id][udModel] - 1][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { rg_set_user_model(ld[ldId], default_model[ud[id][udModel] - 1][random(sizeof default_model[])]); } } public set_user_model(id, infobuffer[], new_model[]) { if(id == ld[ldId]) { SetHookChainArg(3, ATYPE_STRING, custom_model[ud[id][udModel] - 1][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { SetHookChainArg(3, ATYPE_STRING, default_model[ud[id][udModel] - 1][random(sizeof default_model[])]); } } public task_round_end() { new u_i[MAX_PLAYERS], u_n; get_players(u_i, u_n, "h"); new data[3]; data[dId] = u_i[0]; data[dKills] = ud[u_i[0]][udKills]; data[dDamage] = ud[u_i[0]][udDamage]; ud[u_i[0]][udKills] = 0; ud[u_i[0]][udDamage] = 0; if(cvar_mode == false) { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udKills] > data[dKills] || ud[u_i[i]][udKills] == data[dKills] && ud[u_i[i]][udDamage] > data[dDamage]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dKills] > ld[ldKills] || data[dKills] == ld[ldKills] && data[dDamage] > ld[ldDamage]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - cpc(0, ptd, "%L", "ru", "Q", get_user_nickname(data[dId]), data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - cpc(0, ptd, "%L", "ru", "W", get_user_nickname(data[dId]), data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { - cpc(0, ptd, "%L", "ru", "E"); } else { - cpc(0, ptd, "%L", "ru", "R", get_user_nickname(ld[ldId])); } } } else { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udDamage] > data[dDamage] || ud[u_i[i]][udDamage] == data[dDamage] && ud[u_i[i]][udKills] > data[dKills]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dDamage] > ld[ldDamage] || data[dDamage] == ld[ldDamage] && data[dKills] > ld[ldKills]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - cpc(0, ptd, "%L", "ru", "1", get_user_nickname(data[dId]), data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; - cpc(0, ptd, "%L", "ru", "2", get_user_nickname(data[dId]), data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { - cpc(0, ptd, "3", "ru"); } else { - cpc(0, ptd, "4", "ru", get_user_nickname(ld[ldId])); } } } } get_user_nickname(id) { - new nickname[MAX_NICKNAME_LENGHT + 1]; - get_user_name(id, nickname, MAX_NICKNAME_LENGHT + 1); return nickname; }
В качестве временного решения ошибкиКод:/* |----[Связь с автором]----| |VK: vk.com/nunfy | |TELEGRAM: t.me/Nunfy | |-------------------------| */ #include <amxmodx> #include <reapi> +new const VERSION[] = "2.0"; const MAX_MODELS = 1; // Максимальное количество моделей +new const model_path[8][MAX_MODELS][] = { { // terror "models/player/terror_leader/terror_leader.mdl", }, { // leet "models/player/leet_leader/leet_leader.mdl", }, { // arctic "models/player/arctic_leader/arctic_leader.mdl", }, { // guerilla "models/player/guerilla_leader/guerilla_leader.mdl", }, { // urban "models/player/urban_leader/urban_leader.mdl", }, { // gsg9 "models/player/gsg9_leader/gsg9_leader.mdl", }, { // sas "models/player/sas_leader/sas_leader.mdl", }, { // gign "models/player/gign_leader/gign_leader.mdl" } }; +new const default_model[8][MAX_MODELS][] = { { // terror "terror", }, { // leet "leet", }, { // arctic "arctic", }, { // guerilla "guerilla", }, { // urban "urban", }, { // gsg9 "gsg9", }, { // sas "sas", }, { // gign "gign" } }; +new const custom_model[8][MAX_MODELS][] = { { // terror "terror_leader", }, { // leet "leet_leader", }, { // arctic "arctic_leader", }, { // guerilla "guerilla_leader", }, { // urban "urban_leader", }, { // gsg9 "gsg9_leader", }, { // sas "sas_leader", }, { // gign "gign_leader" } }; +new const cvar_mode_description[] = "The mode of counting the leader of the round^n\ + 0 - until the player surpasses the current leader in kills.^n\ + 1 - until the player surpasses the current leader in damage."; +enum cvar_data +{ + cvar_mode +} enum { dId, dKills, dDamage } enum user_data { udModel, udKills, udDamage }; enum leader_data { ldId, ldKills, ldDamage, ldPast_id }; +new cd[cvar_data], ud[MAX_CLIENTS + 1][user_data], ld[leader_data]; new max_users; public plugin_init() { +register_plugin("Ultimate Leader", VERSION, "Nunf"); register_dictionary("ultimate_leader.txt"); +bind_pcvar_num(create_cvar("ul_mode", "1", .description = cvar_mode_description), cd[cvar_mode]); +AutoExecConfig(true, "ultimate_leader"); max_users = get_maxplayers(); RegisterHookChain(RG_HandleMenu_ChooseAppearance, "user_choose_appearance", true); RegisterHookChain(RG_CBasePlayer_Killed, "user_killed", false); RegisterHookChain(RG_CBasePlayer_TakeDamage, "user_take_damage", true); RegisterHookChain(RG_RoundEnd, "round_end", true); RegisterHookChain(RG_CBasePlayer_Spawn, "user_spawn", true); RegisterHookChain(RG_CBasePlayer_SetClientUserInfoModel, "set_user_model", false); } public plugin_precache() { for(new i; i < +sizeof model_path; i++) { for(new n; n < MAX_MODELS; n++) { if(file_exists(model_path[i][n])) { precache_model(model_path[i][n]); } else { set_fail_state("^n\ [ERROR]: FILE NOT EXISTS(array ^"model_path^")^n\ [FILE PATH]: %s", model_path[i][n]); } } } } public client_disconnected(id, bool:drop, message[], maxlen) { ud[id][udModel] = 0; ud[id][udKills] = 0; ud[id][udDamage] = 0; if(id == ld[ldId]) { ld[ldId] = 0; ld[ldKills] = 0; ld[ldDamage] = 0; } else if(id == ld[ldPast_id]) { ld[ldPast_id] = 0; } } public user_choose_appearance(const id, slot) { + if(slot == 5) + { + slot = random(5); + } + if(get_member(id, m_iTeam) == TEAM_TERRORIST) { ud[id][udModel] = slot; } + else if(get_member(id, m_iTeam) == TEAM_CT) { ud[id][udModel] = 4 + slot; } } public user_killed(const id, attacker_id, iGib) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { ud[attacker_id][udKills]++; } } public user_take_damage(const id, pevInflictor, attacker_id, Float: damage, bitsDamageType) { if(attacker_id > 0 || attacker_id <= max_users && id != attacker_id) { if(GetHookChainReturn(ATYPE_INTEGER) == 1) { ud[attacker_id][udDamage] += floatround(damage); } + else if(get_member(attacker_id, m_iTeam) != get_member(attacker_id, m_iTeam)) { ud[attacker_id][udDamage] += floatround(damage) + get_user_health(id); } } } public round_end(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay) { set_task(0.1, "task_round_end"); } public user_spawn(id) { if(id == ld[ldId]) { rg_set_user_model(ld[ldId], custom_model[ud[id][udModel] - 1][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { rg_set_user_model(ld[ldId], default_model[ud[id][udModel] - 1][random(sizeof default_model[])]); } } public set_user_model(id, infobuffer[], new_model[]) { if(id == ld[ldId]) { SetHookChainArg(3, ATYPE_STRING, custom_model[ud[id][udModel] - 1][random(sizeof custom_model[])]); } else if(id == ld[ldPast_id]) { SetHookChainArg(3, ATYPE_STRING, default_model[ud[id][udModel] - 1][random(sizeof default_model[])]); } } public task_round_end() { new u_i[MAX_CLIENTS], u_n; get_players(u_i, u_n, "h"); new data[3]; data[dId] = u_i[0]; data[dKills] = ud[u_i[0]][udKills]; data[dDamage] = ud[u_i[0]][udDamage]; ud[u_i[0]][udKills] = 0; ud[u_i[0]][udDamage] = 0; if(cd[cvar_mode] == 0) { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udKills] > data[dKills] || ud[u_i[i]][udKills] == data[dKills] && ud[u_i[i]][udDamage] > data[dDamage]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dKills] > ld[ldKills] || data[dKills] == ld[ldKills] && data[dDamage] > ld[ldDamage]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; + client_print_color(0, print_team_default, "%L", "ru", "Q", get_user_nickname(data[dId]), data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; + client_print_color(0, print_team_default, "%L", "ru", "W", get_user_nickname(data[dId]), data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { + client_print_color(0, print_team_default, "%L", "ru", "E"); } else { + client_print_color(0, print_team_default, "%L", "ru", "R", get_user_nickname(ld[ldId])); } } } else { for(new i = 1; i < u_n; i++) { if(ud[u_i[i]][udDamage] > data[dDamage] || ud[u_i[i]][udDamage] == data[dDamage] && ud[u_i[i]][udKills] > data[dKills]) { data[dId] = u_i[i]; data[dKills] = u_i[i]; data[dDamage] = u_i[i]; } ud[u_i[i]][udKills] = 0; ud[u_i[i]][udDamage] = 0; } if(data[dDamage] > ld[ldDamage] || data[dDamage] == ld[ldDamage] && data[dKills] > ld[ldKills]) { if(data[dId] == ld[ldId]) { ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; + client_print_color(0, print_team_default, "%L", "ru", "1", get_user_nickname(data[dId]), data[dKills], data[dDamage]); } else { ld[ldPast_id] = ld[ldId]; ld[ldId] = data[dId]; ld[ldKills] = data[dKills]; ld[ldDamage] = data[dDamage]; + client_print_color(0, print_team_default, "%L", "ru", "2", get_user_nickname(data[dId]), data[dKills], data[dDamage]); } } else { if(ld[ldId] < 1 || ld[ldId] > max_users) { + client_print_color(0, print_team_default, "3", "ru"); } else { + client_print_color(0, print_team_default, "4", "ru", get_user_nickname(ld[ldId])); } } } } get_user_nickname(id) { + new nickname[MAX_NAME_LENGTH]; + get_entvar(id, var_netname, nickname, charsmax(nickname)); return nickname; }
Index out of bounds
, было добавлено:
Код:public user_choose_appearance(const id, slot) { + if(slot == 5) + { + slot = random(5); + } if(get_member(id, m_iTeam) == TEAM_TERRORIST) { ud[id][udModel] = slot; } else if(get_member(id, m_iTeam) == TEAM_CT) { ud[id][udModel] = 4 + slot; } }
Некоторые изменения были добавлены с расчетом на будующие обновления