Automatic knife duel 0.3x
Автор оригинального плагина: JGHG
Данный плагин позволяет вызвать дуэль на ножах, когда вы остались 1 на 1. Для вызова на дуэль нужно 3 раза черкнуть ножом по стене.
Список изменений (0.3 - 0.3x):
- Игрокам устанавливается указанное количество хп при соглашении на дуэль. Переменная: amx_duel_hp "35"
- Исправлен баг, когда в конце раунда вызывают игрока на дуэль, и он соглашаясь в следующем раунде делая "массовую дуэль", когда все игроки могут использовать только нож
- Во время дуэли больше нельзя поставить бомбу
- Удалены оповещение в чат "Когда вы остались на 1 черкните 3 раза ножом по стене...", так как считаю это лишним.
- Плагин полностью русифицирован.
Другие мои плагины: https://vk.com/cs_rain
Plugin topic: http://www.amxmodx.org/forums/viewtopic.php?p=91239
Where I come from, if you cut the wall repeteadly with your knife it means you're challenging your last opponent to a knife duel. ;-)
I decided to automate this process.
If only you and another person on the opposite team remain in the round, you can hit a wall (or another object) with your knife, THREE TIMES in fast succession.
By this action you challenge your opponent to a knife duel. The person you challenge gets a menu where he can accept/decline your
challenge. The challenged person has 10 seconds to decide his mind, else the challenge is automatically declined, and the menu should be closed automatically.
Should a knife duel start, it works out pretty much like a round of Knife Arena: you can only use the knife (and the C4!).
As soon as the round ends the Knife Arena mode is turned off.
050421 0.3 You must now slash with your knife three times in fast succession to challenge someone.
050208 0.2 Fixed seconds display.
Bots should now respond correctly and a little human like. They will mostly accept challenges. ;-)
Small fixes here and there. :-)
050208 0.1 First version - largely untested
new bool:g_challenging = false
new bool:g_knifeArena = false
new bool:g_noChallengingForAWhile = false
require_module("fakemeta")
public forward_emitsound(const PIRATE, const Onceuponatimetherewasaverysmall, noise[], const Float:turtlewhoateabiggerturtleand, const Float:afterthatthesmallturtlegot, const veryveryverybig, const theend) {
if (g_noChallengingForAWhile || g_knifeArena || g_challenging || PIRATE < 1 || PIRATE > g_MAXPLAYERS || !is_user_alive(PIRATE) || !equal(noise, "weapons/knife_hitwall1.wav"))
new team = get_user_team(PIRATE), otherteam = 0, matchingOpponent = 0
// Make sure exactly one person on each team is alive.
for (new i = 1; i <= g_MAXPLAYERS; i++) {
if (!is_user_connected(i) || !is_user_alive(i) || PIRATE == i)
if (get_user_team(i) == team) {
if (matchingOpponent == 0)
if (++g_challenges[PIRATE] >= KNIFESLASHES) {
Challenge(PIRATE, matchingOpponent)
if (is_user_bot(matchingOpponent)) {
new Float:val = float(DECIDESECONDS)
remove_task(TASKID_BOTTHINK)
set_task(random_float(1.0, float(DECIDESECONDS) - 1.0), "BotDecides", TASKID_BOTTHINK)
set_task(1.0, "decreaseChallenges", PIRATE)
//client_print(PIRATE, print_chat, "Your challenges: %d", g_challenges[PIRATE])
public decreaseChallenges(id) {
if (--g_challenges[id] < 0)
public client_disconnect(id)
remove_task(TASKID_CHALLENGING)
Challenge(challenger, challenged) {
g_challenger = challenger
g_challenged = challenged
new challenger_name[32], challenged_name[32]
get_user_name(challenger, challenger_name, 31)
get_user_name(challenged, challenged_name, 31)
client_print(challenger, print_chat, "Ты бросил вызов %s на дуэль! Жди ответа %d секунд...", challenged_name, DECIDESECONDS)
new menu[1024], keys = MENU_KEY_1 | MENU_KEY_2
format(menu, 1023, "%s Вызвал дуэль на ножах!^n^nЧто делать? У вас %d секунд на ответ!^n^n\y1\w. Я согласен!^n\y2\w. Я против!", challenger_name, DECIDESECONDS)
show_menu(challenged, keys, menu, DECIDESECONDS, "JGHG's automatic knife duel")
set_task(float(DECIDESECONDS), "timed_toolate", TASKID_CHALLENGING)
g_round_duel_start = Round
new challenger_name[32], challenged_name[32]
get_user_name(g_challenger, challenger_name, 31)
get_user_name(g_challenged, challenged_name, 31)
client_print(0, print_chat, "%s не ответил %s - дуэль не состоится.", challenged_name, challenger_name)
public challenged_menu(id, key) {
remove_task(TASKID_CHALLENGING)
new challenger_name[32], challenged_name[32]
get_user_name(g_challenger, challenger_name, 31)
get_user_name(g_challenged, challenged_name, 31)
client_print(0, print_chat, "%s не согласился с %s - дуэль не состоится.", challenged_name, challenger_name)
if(!is_user_connected(g_challenger)) return;
if(!is_user_connected(g_challenged)) return;
new challenger_name[32], challenged_name[32]
get_user_name(g_challenger, challenger_name, 31)
get_user_name(g_challenged, challenged_name, 31)
if(g_noChallengingForAWhile)
client_print(g_challenger, print_chat, "Дуэль не доступна, так как раунд окончен")
client_print(g_challenged, print_chat, "Дуэль не доступна, так как раунд окончен")
if(Round != g_round_duel_start)
client_print(g_challenger, print_chat, "Дуэль не доступна, покольку вызов был брошен в прошлом раунде")
client_print(g_challenged, print_chat, "Дуэль не доступна, покольку вызов был брошен в прошлом раунде")
client_print(0, print_chat, "%s согласился с %s - дуэль началась!", challenged_name, challenger_name)
give_item(g_challenger, "weapon_knife")
give_item(g_challenged, "weapon_knife")
engclient_cmd(g_challenger, "weapon_knife")
engclient_cmd(g_challenged, "weapon_knife")
// Ставим по 35 HP дуэлянтам
new pirates_hp = get_pcvar_num(pcvar_hp_on_duel)
if(is_user_alive(g_challenger)) set_user_health(g_challenger, pirates_hp)
if(is_user_alive(g_challenged)) set_user_health(g_challenged, pirates_hp)
if (!g_knifeArena) return PLUGIN_CONTINUE
if(!is_user_alive(id)) return PLUGIN_CONTINUE
new weaponType = read_data(2)
if(weaponType != CSW_KNIFE)
engclient_cmd(id, "weapon_knife")
public logevent_round_end()
g_noChallengingForAWhile = true
remove_task(TASKID_BOTTHINK)
remove_task(TASKID_CHALLENGING)
if (g_challenging || g_knifeArena)
public event_game_restart()
public event_round_start()
g_noChallengingForAWhile = false
// Close menu of challenged
if (is_user_connected(g_challenged)) {
get_user_menu(g_challenged, usermenu, userkeys) // get user menu
// Hmm this ain't working :-/
if (usermenu == g_challengemenu) // Close it!
show_menu(g_challenged, 0, "blabla") // show empty menu
remove_task(TASKID_BOTTHINK)
remove_task(TASKID_CHALLENGING)
if (g_challenging || g_knifeArena)
public challengefn(id, level, cid) {
if (!cmd_access(id, level, cid, 3))
new challenger[64], challenged[64]
read_argv(1, challenger, 63)
read_argv(2, challenged, 63)
console_print(id, "challenger: %s, challenged: %s", challenger, challenged)
new r = str_to_num(challenger)
new d = str_to_num(challenged)
register_plugin(PLUGINNAME, VERSION, AUTHOR)
register_event("CurWeapon", "event_holdwpn", "be", "1=1")
register_forward(FM_EmitSound, "forward_emitsound")
g_MAXPLAYERS = get_maxplayers()
g_challengemenu = register_menuid("JGHG's automatic knife duel"/*"You are challenged"*/)
register_menucmd(g_challengemenu, MENU_KEY_1 | MENU_KEY_2, "challenged_menu")
register_event("DeathMsg", "event_death", "a")
register_event("TextMsg", "event_game_restart", "a", "2=#Game_will_restart_in")
register_event("TextMsg", "event_game_restart", "a", "2=#Game_Commencing")
register_event("HLTV", "event_round_start", "a", "1=0", "2=0")
register_logevent("logevent_round_end", 2, "1=Round_End")
pcvar_hp_on_duel = register_cvar("amx_duel_hp", "35")
register_clcmd("0challenge", "challengefn", ADMIN_CFG, "<challenger> <challenged> - start knife duel challenge")
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Модификация плагина: Leo_[BH] - http://vk.com/id64427766
// Написание плагинов на заказ: http://vk.com/cs_rain
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -