#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <hamsandwich>
#define PLUGIN "Artefacts"
#define VERSION "1.0"
#define AUTHOR "6u3oH"
new Float: DmgFloat, DmgInt;
const HealthPoint = 100; // Максимальное кол-во HP
new keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_0;
new ArtNum[33], Chance[33], g_Round_counter[33];
new ArtefactsChance[6] =
{
30,
25,
10,
15,
25
};
new ArtefactsList[6][] =
{
"Боевая Стойка",
"Фатальный Удар",
"Озарение",
"Танец Огня",
"Зеркальный барьер",
"Не выбран"
};
new ArtefactsDescription[6][] =
{
"30% шанс понизить получаемый урон в 2 раза",
"25% щанс нанести крит", // Крит = урон х2
"10% шанс пополнить здоровье на 50% от атаки",
"15% шанс уклониться от атаки противника",
"25% шанс отразить урон противника",
"Отсутствует"
};
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("HLTV", "RoundStart", "a", "1=0", "2=0");
register_event("TextMsg", "Event_NewGame", "a", "2=#Game_will_restart_in", "2=#Game_Commencing");
register_clcmd("say /artefact", "ArtefactsMenu");
register_clcmd("say /art", "ArtefactsMenu");
register_menu("Menu 1", keys, "Menu_Artefacts");
RegisterHam(Ham_TakeDamage, "player", "TakeDamageFunction", .Post = false);
}
public Event_NewGame() {
arrayset(g_Round_counter, 0, 33);
}
public client_connect(id)
{
ArtNum[id] = 5;
g_Round_counter[id]=0;
}
public RoundStart(){
arrayset(g_Round_counter, 0, 33);
}
public ArtefactsMenu(id)
{
if(!is_user_alive(id))return;
if(g_Round_counter[id]!=0){client_print_color(id, print_chat, "^1[^4Artefacts^1] Взять артефакт можно^3 1 раз ^1за раунд");return;}
static menu[650], iLen
iLen = 0
iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\yВаш артефакт: %s^n\rВыберите артефакт^n^n", ArtefactsList[ArtNum[id]]);
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r1. \y%s^n", ArtefactsList[0]);
keys |= MENU_KEY_1
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r2. \y%s^n", ArtefactsList[1]);
keys |= MENU_KEY_2
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r3. \y%s^n", ArtefactsList[2]);
keys |= MENU_KEY_3
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r4. \y%s^n", ArtefactsList[3]);
keys |= MENU_KEY_4
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r5. \y%s^n^n", ArtefactsList[4]);
keys |= MENU_KEY_5
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\r0. \wВыход^n");
keys |= MENU_KEY_0
show_menu(id, keys, menu, -1, "Menu 1");
}
public Menu_Artefacts(id, key){
if(!is_user_alive(id))return;
switch(key){
case 0:
{
ArtNum[id] = 0;
client_print_color(id, print_chat, "^1[^4Artefacts^1] Вы выбрали артефакт: ^4%s", ArtefactsList[0]);
client_print_color(id, print_chat, "^1[^4Artefacts^1] Способность: ^4%s", ArtefactsDescription[0]);
}
case 1:
{
ArtNum[id] = 1;
client_print_color(id, print_chat, "^1[^4Artefacts^1] Вы выбрали артефакт: ^4%s", ArtefactsList[1]);
client_print_color(id, print_chat, "^1[^4Artefacts^1] Способность: ^4%s", ArtefactsDescription[1]);
}
case 2:
{
ArtNum[id] = 2;
client_print_color(id, print_chat, "^1[^4Artefacts^1] Вы выбрали артефакт: ^4%s", ArtefactsList[2]);
client_print_color(id, print_chat, "^1[^4Artefacts^1] Способность: ^4%s", ArtefactsDescription[2]);
}
case 3:
{
ArtNum[id] = 3;
client_print_color(id, print_chat, "^1[^4Artefacts^1] Вы выбрали артефакт: ^4%s", ArtefactsList[3]);
client_print_color(id, print_chat, "^1[^4Artefacts^1] Способность: ^4%s", ArtefactsDescription[3]);
}
case 4:
{
ArtNum[id] = 4;
client_print_color(id, print_chat, "^1[^4Artefacts^1] Вы выбрали артефакт: ^4%s", ArtefactsList[4]);
client_print_color(id, print_chat, "^1[^4Artefacts^1] Способность: ^4%s", ArtefactsDescription[4]);
}
}
g_Round_counter[id]++;
}
public TakeDamageFunction(szVictim, szWeapon, szAttacker, Float: fDmg, damagebits)
{
if(!is_user_connected(szVictim))
return PLUGIN_HANDLED;
if(!is_user_connected(szAttacker))
return PLUGIN_HANDLED;
if(szVictim == szAttacker)
return PLUGIN_HANDLED;
if(cs_get_user_team(szVictim) == cs_get_user_team(szAttacker))
return PLUGIN_HANDLED;
switch(ArtNum[szAttacker])
{
case 1:
{
Chance[szAttacker] = random_num(0, 100);
if(Chance[szAttacker] <= ArtefactsChance[1])
{
FadeRender(szAttacker);
DmgFloat = fDmg;
DmgInt = floatround(DmgFloat, floatround_round);
set_user_health(szVictim, get_user_health(szVictim) - DmgInt);
client_print(szAttacker, print_center, "[Артефакт] Вы нанесли критический урон");
}
}
case 2:
{
Chance[szAttacker] = random_num(0, 100);
if(Chance[szAttacker] <= ArtefactsChance[2])
{
set_user_health(szAttacker, get_user_health(szAttacker) + (HealthPoint / 2));
FadeRender(szAttacker);
if(get_user_health(szAttacker) > HealthPoint)
{
set_user_health(szAttacker, HealthPoint);
}
client_print(szAttacker, print_center, "[Артефакт] Вы пополнили здоровье на %i единиц!", HealthPoint / 2);
}
}
}
switch(ArtNum[szVictim])
{
case 0:
{
Chance[szVictim] = random_num(0, 100);
if(Chance[szVictim] <= ArtefactsChance[0])
{
FadeRender(szVictim);
DmgFloat = fDmg;
DmgInt = floatround(DmgFloat, floatround_round);
set_user_health(szVictim, get_user_health(szVictim) + (DmgInt / 2));
client_print(szVictim, print_center, "[Артефакт] Урон понижен в два раза!");
}
}
case 3:
{
Chance[szVictim] = random_num(0, 100);
if(Chance[szVictim] <= ArtefactsChance[3])
{
FadeRender(szVictim);
client_print(szVictim, print_center, "[Артефакт] Вы не получили урон!");
return HAM_SUPERCEDE;
}
}
case 4:
{
Chance[szVictim] = random_num(0, 100);
if(Chance[szVictim] <= ArtefactsChance[4])
{
FadeRender(szVictim);
DmgFloat = fDmg;
DmgInt = floatround(DmgFloat, floatround_round);
set_user_health(szAttacker, get_user_health(szAttacker) - DmgInt);
client_print(szVictim, print_center, "[Артефакт] Вы отразили урон!");
}
}
}
return PLUGIN_HANDLED;
}
public FadeRender(id)
{
if(!is_user_alive(id))
return;
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id);
write_short(1<<10);
write_short(1<<10);
write_short(0x0000);
write_byte(random_num(0, 255));
write_byte(random_num(0, 255));
write_byte(random_num(0, 255));
write_byte(100);
message_end();
}