Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

> Правила форума

Этот раздел, как вы могли заметить по названию, предназначен для решения вопросов по поводу уже существующих модов и плагинов.
Пожалуйста, если у вас проблема с написанием плагина, не путайте этот раздел с разделом по скриптингу.
Для поиска плагинов и модов существует соответствующий раздел.

Название темы должно соответствовать содержанию. Темы с названием типа "Помогите", "Вопрос", "парни подскажите..." - будут удалены.
Все темы, не относящиеся к "Вопросам по модам и плагинам", будут удалены или перемещены в соответствующий раздел.

Правила оформления темы:
1. Помимо заголовка не забудьте верно сформулировать свой вопрос.
2. Выложите исходник (в тег кода + ) или ссылку на плагин который вызывает у вас вопросы.
3. Выложите лог с ошибками (если имеется) под спойлер

Отдельный цвет в плагине.

, Отдельный цвет в плагине.
Статус пользователя Kempers
сообщение 14.4.2014, 17:49
Сообщение #1
Стаж: 12 лет

Сообщений: 9
Благодарностей: 1
Полезность: 0

Если не туда написал извините, не нашел другого.
Ладно к делу. Можно ли сделать в плагине отдельный заданный цвет.

Примеру кода :
Код
Color_Print(0, "!y[!gРаунд TOP!y]!g%s !y- !teamотказался от приза", g_szRoundTopName);

Я хочу чтобы вместо "!team" был один цвет - синий.
В интернете я такого пока не нашел(
Если кто-то знает, отпишите в эту тему.

Я на данный момент используют этот сток
Код
stock Color_Print(const id, const input[], any:...)
{
        new count = 1, players[32]
        static msg[191]
        vformat(msg, 190, input, 3)
      
        replace_all(msg, 190, "!g", "^4") // Green Color
        replace_all(msg, 190, "!y", "^1") // Default Color
        replace_all(msg, 190, "!team", "^3") // Team Color
      
        if (id) players[0] = id; else get_players(players, count, "ch")
        {
                for (new i = 0; i < count; i++)
                {
                        if (is_user_connected(players[i]))
                        {
                                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                                write_byte(players[i]);
                                write_string(msg);
                                message_end();
                        }
                }
        }
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Kempers
сообщение 14.4.2014, 19:24
Сообщение #2
Стаж: 12 лет

Сообщений: 9
Благодарностей: 1
Полезность: 0

какие все умные.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя stefkone
сообщение 14.4.2014, 19:27
Сообщение #3


Иконка группы

Стаж: 19 лет

Сообщений: 1711
Благодарностей: 1130
Полезность: 1068

Цитата(Kempers @ 14.4.2014, 21:24) *
какие все умные.


Цитата
Я хочу чтобы вместо "!team" был один цвет - синий.


большинство хотя бы могут изложить нормально, чего они хотят
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя kiryxapro
сообщение 14.4.2014, 19:29
Сообщение #4
Стаж: 12 лет

Сообщений: 53
Благодарностей: 5
Полезность: 74

Юзайте Colorchat от простотемы:
http://amx-x.ru/viewtopic.php?f=9&t=4566
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kempers
сообщение 14.4.2014, 19:35
Сообщение #5
Стаж: 12 лет

Сообщений: 9
Благодарностей: 1
Полезность: 0

Код
#define PLUGINNAME      "Automatic knife duel"
#define VERSION         "0.3"
#define AUTHOR          "JGHG"
/*
Copyleft 2005
Plugin topic: http://www.amxmodx.org/forums/viewtopic.php?p=91239


AUTOMATIC KNIFE DUEL
====================
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.

/JGHG


VERSIONS
========
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
*/

#include <amxmodx>
#include <fakemeta>
#include <fun>

#define DEBUG

#if defined DEBUG
#include <amxmisc>
#endif // defined DEBUG

#define MENUSELECT1                             0
#define MENUSELECT2                             1
#define TASKID_CHALLENGING              2348923
#define TASKID_BOTTHINK                 3242321
#define DECIDESECONDS                   10
#define ALLOWED_WEAPONS                 2
#define KNIFESLASHES                    3 // the nr of slashes within a short amount of time until a challenge starts...
// Globals below
new g_allowedWeapons[ALLOWED_WEAPONS] = {CSW_KNIFE, CSW_C4}
new g_MAXPLAYERS
new bool:g_challenging = false
new bool:g_knifeArena = false
new bool:g_noChallengingForAWhile = false
new g_challengemenu
new g_challenger
new g_challenged
new g_challenges[33]
// Globals above

public plugin_modules()
{
        require_module("fakemeta")
        require_module("fun")
}

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"))
                return FMRES_IGNORED

        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)
                        continue
                if (get_user_team(i) == team) {
                        // No fun.
                        return FMRES_IGNORED
                }
                else {
                        if (++otherteam > 1) {
                                // No fun.
                                return FMRES_IGNORED
                        }
                        matchingOpponent = i
                }
        }

        if (matchingOpponent == 0)
                return FMRES_IGNORED

        if (++g_challenges[PIRATE] >= KNIFESLASHES) {
                Challenge(PIRATE, matchingOpponent)
                if (is_user_bot(matchingOpponent)) {
                        new Float:val = float(DECIDESECONDS)
                        if (val < 2.0)
                                val = 2.0
                        remove_task(TASKID_BOTTHINK)
                        set_task(random_float(1.0, float(DECIDESECONDS) - 1.0), "BotDecides", TASKID_BOTTHINK)
                }
                g_challenges[PIRATE] = 0
        }
        else
                set_task(1.0, "decreaseChallenges", PIRATE)

        //client_print(PIRATE, print_chat, "Your challenges: %d", g_challenges[PIRATE])

        return FMRES_IGNORED
}

public decreaseChallenges(id) {
        if (--g_challenges[id] < 0)
                g_challenges[id] = 0
}

public BotDecides() {
        if (!g_challenging)
                return

        if (random_num(0,9) > 0)
                Accept()
        else {
                DeclineMsg()
        }
        g_challenging = false
        remove_task(TASKID_CHALLENGING)
}

Challenge(challenger, challenged) {
        g_challenger = challenger
        g_challenged = challenged
        g_challenging = true
        new challenger_name[32], challenged_name[32]
        get_user_name(challenger, challenger_name, 31)
        get_user_name(challenged, challenged_name, 31)

        Color_Print(0, "!y[!gДуэль!y]Вы вызвали !t%s !yна дуэль! Ждите ответа !t%d !yсекунд.", 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)
}

public timed_toolate() {
        if (g_challenging) {
                new challenger_name[32], challenged_name[32]
                get_user_name(g_challenger, challenger_name, 31)
                get_user_name(g_challenged, challenged_name, 31)
                Color_Print(0, "!y[!gДуэль!y]!t%s !yне ответил !t%s's !gдуэль не состоится!", challenged_name, challenger_name)
                CancelAll()
        }
}

public client_putinserver(id) {
        set_task(25.0, "Announcement", id)

        return PLUGIN_CONTINUE
}

public Announcement(id) {
        Color_Print(0, "!y[!gДуэль!y]Для вызова противника на дуэль при !g1vs1 !yбейте стену ножом.")
}

public challenged_menu(id, key) {
        switch (key) {
                case MENUSELECT1: {
                        // Accept
                        Accept()
                }
                case MENUSELECT2: {
                        // Decline
                        DeclineMsg()
                }
        }
        g_challenging = false
        remove_task(TASKID_CHALLENGING)

        return PLUGIN_HANDLED
}

DeclineMsg() {
        new challenger_name[32], challenged_name[32]
        get_user_name(g_challenger, challenger_name, 31)
        get_user_name(g_challenged, challenged_name, 31)
        Color_Print(0, "!y[!gДуэль!y]!t%s !yне согласился !t%s's !yдуэль не состоится!", challenged_name, challenger_name)
}

Accept() {
        new challenger_name[32], challenged_name[32]
        get_user_name(g_challenger, challenger_name, 31)
        get_user_name(g_challenged, challenged_name, 31)

        Color_Print(0, "!y[!gДуэль!y]!t%s !yсогласился !t%s's !yдуэль началась!", challenged_name, challenger_name)
        g_knifeArena = true
        give_item(g_challenger, "weapon_knife")
        give_item(g_challenged, "weapon_knife")
        engclient_cmd(g_challenger, "weapon_knife")
        engclient_cmd(g_challenged, "weapon_knife")
}

public event_holdwpn(id) {
        if (!g_knifeArena || !is_user_alive(id))
                return PLUGIN_CONTINUE

        new weaponType = read_data(2)

        for (new i = 0; i < ALLOWED_WEAPONS; i++) {
                if (weaponType == g_allowedWeapons[i])
                        return PLUGIN_CONTINUE
        }

        engclient_cmd(id, "weapon_knife")

        return PLUGIN_CONTINUE
}

public event_roundend() {
        if (g_challenging || g_knifeArena)
                CancelAll()
        g_noChallengingForAWhile = true
        set_task(4.0, "NoChallengingForAWhileToFalse")

        return PLUGIN_CONTINUE
}

public NoChallengingForAWhileToFalse() {
        g_noChallengingForAWhile = false
}

CancelAll() {
        if (g_challenging) {
                g_challenging = false
                // Close menu of challenged
                if (is_user_connected(g_challenged)) {
                        new usermenu, userkeys
                        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
                }
        }
        if (g_knifeArena) {
                g_knifeArena = false
        }
        remove_task(TASKID_BOTTHINK)
        remove_task(TASKID_CHALLENGING)
}

public event_death() {
        if (g_challenging || g_knifeArena)
                CancelAll()

        return PLUGIN_CONTINUE
}

#if defined DEBUG
public challengefn(id, level, cid) {
        if (!cmd_access(id, level, cid, 3))
                return PLUGIN_HANDLED

        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)
        Challenge(r, d)
        if (is_user_bot(d))
                Accept()

        return PLUGIN_HANDLED
}
#endif // defined DEBUG

public plugin_init() {
        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("SendAudio", "event_roundend", "a", "2&%!MRAD_terwin")
        register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_ctwin")
        register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_rounddraw")

        #if defined DEBUG
        register_clcmd("0challenge", "challengefn", ADMIN_CFG, "<challenger> <challenged> - start knife duel challenge")
        #endif // defined DEBUG

        new Float:maptime = get_cvar_float("mp_timelimit")
        if (maptime == 0.0)
                maptime = 15.0

        new Float:anntime = 60.0 * 5.0 // 5 minutes
        if (maptime < 5.0)
                anntime = maptime / 3.0

        set_task(anntime, "Announcement", 0, "", 0, "b")
}

stock Color_Print(const id, const input[], any:...)
{
        new count = 1, players[32]
        static msg[191]
        vformat(msg, 190, input, 3)
      
        replace_all(msg, 190, "!g", "^4") // Green Color
        replace_all(msg, 190, "!y", "^1") // Default Color
        replace_all(msg, 190, "!team", "^3") // Team Color
      
        if (id) players[0] = id; else get_players(players, count, "ch")
        {
                for (new i = 0; i < count; i++)
                {
                        if (is_user_connected(players[i]))
                        {
                                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                                write_byte(players[i]);
                                write_string(msg);
                                message_end();
                        }
                }
        }
}

Я хочу чтобы вместо !team был только синий цвет. Можно ли сделать так?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 14.4.2014, 19:37
Сообщение #6


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Kempers, вам же дали ссылку.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kempers
сообщение 14.4.2014, 19:39
Сообщение #7
Стаж: 12 лет

Сообщений: 9
Благодарностей: 1
Полезность: 0

А по другому нельзя?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Surf
сообщение 14.4.2014, 19:41
Сообщение #8


Стаж: 14 лет

Сообщений: 1089
Благодарностей: 501
Полезность: 583

!blue
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 14.4.2014, 19:53
Сообщение #9


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Kempers, вам не нужно с нуля переписывать плагин, просто подключите инклуд и замените фунции вывода + добавьте аргумент нужного цвета.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kempers
сообщение 14.4.2014, 19:59
Сообщение #10
Стаж: 12 лет

Сообщений: 9
Благодарностей: 1
Полезность: 0

Цитата(Bloo @ 14.4.2014, 19:53) *
Kempers, вам не нужно с нуля переписывать плагин, просто подключите инклуд и замените фунции вывода + добавьте аргумент нужного цвета.

Хорошо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kempers
сообщение 14.4.2014, 20:06
Сообщение #11
Стаж: 12 лет

Сообщений: 9
Благодарностей: 1
Полезность: 0

!team1 - А так можно?
Вот нашел, тут плагин такой интересный)
Код
[ru]
TOP = !gВы !team2открыли !yтоп !gлучших !teamигроков !
BOT = !gВы !team2открыли !yтоп !gхудших !teamигроков !
HS = !gВы !team2открыли !yтоп !gлучших !teamСорви-голова !
RANKSTATS = !gВы !team2открыли !team2свою !gстатистику !
DMG = !gВы !team2открыли !yтоп !gлучших !teamпо !team2нанесению !gурона !
AWARD = !gВы !team2открыли !yтоп !gмажоров !
DAY = !gВы !team2открыли !gстатистику !team2сервера !teamпо дням !


А вот строчка в SMA

Код
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!team", "^3")
replace_all(msg, 190, "!team2", "^0")


Отредактировал: Kempers, - 14.4.2014, 20:07
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 14.4.2014, 20:08
Сообщение #12


Стаж: 12 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

Kempers, так вы плагин покажите. По лэнгам как по кофейной гуще. Это от стока зависит.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Kempers
сообщение 14.4.2014, 20:39
Сообщение #13
Стаж: 12 лет

Сообщений: 9
Благодарностей: 1
Полезность: 0

Код
#define PLUGINNAME      "Automatic knife duel"
#define VERSION         "0.3"
#define AUTHOR          "JGHG"
/*
Copyleft 2005
Plugin topic: http://www.amxmodx.org/forums/viewtopic.php?p=91239


AUTOMATIC KNIFE DUEL
====================
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.

/JGHG


VERSIONS
========
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
*/

#include <amxmodx>
#include <fakemeta>
#include <fun>

#define DEBUG

#if defined DEBUG
#include <amxmisc>
#endif // defined DEBUG

#define MENUSELECT1                             0
#define MENUSELECT2                             1
#define TASKID_CHALLENGING              2348923
#define TASKID_BOTTHINK                 3242321
#define DECIDESECONDS                   10
#define ALLOWED_WEAPONS                 2
#define KNIFESLASHES                    3 // the nr of slashes within a short amount of time until a challenge starts...
// Globals below
new g_allowedWeapons[ALLOWED_WEAPONS] = {CSW_KNIFE, CSW_C4}
new g_MAXPLAYERS
new bool:g_challenging = false
new bool:g_knifeArena = false
new bool:g_noChallengingForAWhile = false
new g_challengemenu
new g_challenger
new g_challenged
new g_challenges[33]
// Globals above

public plugin_modules()
{
        require_module("fakemeta")
        require_module("fun")
}

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"))
                return FMRES_IGNORED

        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)
                        continue
                if (get_user_team(i) == team) {
                        // No fun.
                        return FMRES_IGNORED
                }
                else {
                        if (++otherteam > 1) {
                                // No fun.
                                return FMRES_IGNORED
                        }
                        matchingOpponent = i
                }
        }

        if (matchingOpponent == 0)
                return FMRES_IGNORED

        if (++g_challenges[PIRATE] >= KNIFESLASHES) {
                Challenge(PIRATE, matchingOpponent)
                if (is_user_bot(matchingOpponent)) {
                        new Float:val = float(DECIDESECONDS)
                        if (val < 2.0)
                                val = 2.0
                        remove_task(TASKID_BOTTHINK)
                        set_task(random_float(1.0, float(DECIDESECONDS) - 1.0), "BotDecides", TASKID_BOTTHINK)
                }
                g_challenges[PIRATE] = 0
        }
        else
                set_task(1.0, "decreaseChallenges", PIRATE)

        //client_print(PIRATE, print_chat, "Your challenges: %d", g_challenges[PIRATE])

        return FMRES_IGNORED
}

public decreaseChallenges(id) {
        if (--g_challenges[id] < 0)
                g_challenges[id] = 0
}

public BotDecides() {
        if (!g_challenging)
                return

        if (random_num(0,9) > 0)
                Accept()
        else {
                DeclineMsg()
        }
        g_challenging = false
        remove_task(TASKID_CHALLENGING)
}

Challenge(challenger, challenged) {
        g_challenger = challenger
        g_challenged = challenged
        g_challenging = true
        new challenger_name[32], challenged_name[32]
        get_user_name(challenger, challenger_name, 31)
        get_user_name(challenged, challenged_name, 31)

        Color_Print(0, "!y[!gДуэль!y]Вы вызвали !t%s !yна дуэль! Ждите ответа !t%d !yсекунд.", 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)
}

public timed_toolate() {
        if (g_challenging) {
                new challenger_name[32], challenged_name[32]
                get_user_name(g_challenger, challenger_name, 31)
                get_user_name(g_challenged, challenged_name, 31)
                Color_Print(0, "!y[!gДуэль!y]!t%s !yне ответил !t%s's !gдуэль не состоится!", challenged_name, challenger_name)
                CancelAll()
        }
}

public client_putinserver(id) {
        set_task(25.0, "Announcement", id)

        return PLUGIN_CONTINUE
}

public Announcement(id) {
        Color_Print(0, "!y[!gДуэль!y]Для вызова противника на дуэль при !g1vs1 !yбейте стену ножом.")
}

public challenged_menu(id, key) {
        switch (key) {
                case MENUSELECT1: {
                        // Accept
                        Accept()
                }
                case MENUSELECT2: {
                        // Decline
                        DeclineMsg()
                }
        }
        g_challenging = false
        remove_task(TASKID_CHALLENGING)

        return PLUGIN_HANDLED
}

DeclineMsg() {
        new challenger_name[32], challenged_name[32]
        get_user_name(g_challenger, challenger_name, 31)
        get_user_name(g_challenged, challenged_name, 31)
        Color_Print(0, "!y[!gДуэль!y]!t%s !yне согласился !t%s's !yдуэль не состоится!", challenged_name, challenger_name)
}

Accept() {
        new challenger_name[32], challenged_name[32]
        get_user_name(g_challenger, challenger_name, 31)
        get_user_name(g_challenged, challenged_name, 31)

        Color_Print(0, "!y[!gДуэль!y]!t%s !yсогласился !t%s's !yдуэль началась!", challenged_name, challenger_name)
        g_knifeArena = true
        give_item(g_challenger, "weapon_knife")
        give_item(g_challenged, "weapon_knife")
        engclient_cmd(g_challenger, "weapon_knife")
        engclient_cmd(g_challenged, "weapon_knife")
}

public event_holdwpn(id) {
        if (!g_knifeArena || !is_user_alive(id))
                return PLUGIN_CONTINUE

        new weaponType = read_data(2)

        for (new i = 0; i < ALLOWED_WEAPONS; i++) {
                if (weaponType == g_allowedWeapons[i])
                        return PLUGIN_CONTINUE
        }

        engclient_cmd(id, "weapon_knife")

        return PLUGIN_CONTINUE
}

public event_roundend() {
        if (g_challenging || g_knifeArena)
                CancelAll()
        g_noChallengingForAWhile = true
        set_task(4.0, "NoChallengingForAWhileToFalse")

        return PLUGIN_CONTINUE
}

public NoChallengingForAWhileToFalse() {
        g_noChallengingForAWhile = false
}

CancelAll() {
        if (g_challenging) {
                g_challenging = false
                // Close menu of challenged
                if (is_user_connected(g_challenged)) {
                        new usermenu, userkeys
                        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
                }
        }
        if (g_knifeArena) {
                g_knifeArena = false
        }
        remove_task(TASKID_BOTTHINK)
        remove_task(TASKID_CHALLENGING)
}

public event_death() {
        if (g_challenging || g_knifeArena)
                CancelAll()

        return PLUGIN_CONTINUE
}

#if defined DEBUG
public challengefn(id, level, cid) {
        if (!cmd_access(id, level, cid, 3))
                return PLUGIN_HANDLED

        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)
        Challenge(r, d)
        if (is_user_bot(d))
                Accept()

        return PLUGIN_HANDLED
}
#endif // defined DEBUG

public plugin_init() {
        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("SendAudio", "event_roundend", "a", "2&%!MRAD_terwin")
        register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_ctwin")
        register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_rounddraw")

        #if defined DEBUG
        register_clcmd("0challenge", "challengefn", ADMIN_CFG, "<challenger> <challenged> - start knife duel challenge")
        #endif // defined DEBUG

        new Float:maptime = get_cvar_float("mp_timelimit")
        if (maptime == 0.0)
                maptime = 15.0

        new Float:anntime = 60.0 * 5.0 // 5 minutes
        if (maptime < 5.0)
                anntime = maptime / 3.0

        set_task(anntime, "Announcement", 0, "", 0, "b")
}

stock Color_Print(const id, const input[], any:...)
{
        new count = 1, players[32]
        static msg[191]
        vformat(msg, 190, input, 3)
      
        replace_all(msg, 190, "!g", "^4") // Green Color
        replace_all(msg, 190, "!y", "^1") // Default Color
        replace_all(msg, 190, "!team", "^3") // Team Color
      
        if (id) players[0] = id; else get_players(players, count, "ch")
        {
                for (new i = 0; i < count; i++)
                {
                        if (is_user_connected(players[i]))
                        {
                                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                                write_byte(players[i]);
                                write_string(msg);
                                message_end();
                        }
                }
        }
}

Вот плагин для дуэли на ножах. Я хочу чтобы вместо !y был синий цвет.

Код
[code]#define PLUGINNAME      "Automatic knife duel"
#define VERSION         "0.3"
#define AUTHOR          "JGHG"
/*
Copyleft 2005
Plugin topic: http://www.amxmodx.org/forums/viewtopic.php?p=91239


AUTOMATIC KNIFE DUEL
====================
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.

/JGHG


VERSIONS
========
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
*/

#include <amxmodx>
#include <fakemeta>
#include <fun>

#define DEBUG

#if defined DEBUG
#include <amxmisc>
#endif // defined DEBUG

#define MENUSELECT1                             0
#define MENUSELECT2                             1
#define TASKID_CHALLENGING              2348923
#define TASKID_BOTTHINK                 3242321
#define DECIDESECONDS                   10
#define ALLOWED_WEAPONS                 2
#define KNIFESLASHES                    3 // the nr of slashes within a short amount of time until a challenge starts...
// Globals below
new g_allowedWeapons[ALLOWED_WEAPONS] = {CSW_KNIFE, CSW_C4}
new g_MAXPLAYERS
new bool:g_challenging = false
new bool:g_knifeArena = false
new bool:g_noChallengingForAWhile = false
new g_challengemenu
new g_challenger
new g_challenged
new g_challenges[33]
// Globals above

public plugin_modules()
{
        require_module("fakemeta")
        require_module("fun")
}

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"))
                return FMRES_IGNORED

        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)
                        continue
                if (get_user_team(i) == team) {
                        // No fun.
                        return FMRES_IGNORED
                }
                else {
                        if (++otherteam > 1) {
                                // No fun.
                                return FMRES_IGNORED
                        }
                        matchingOpponent = i
                }
        }

        if (matchingOpponent == 0)
                return FMRES_IGNORED

        if (++g_challenges[PIRATE] >= KNIFESLASHES) {
                Challenge(PIRATE, matchingOpponent)
                if (is_user_bot(matchingOpponent)) {
                        new Float:val = float(DECIDESECONDS)
                        if (val < 2.0)
                                val = 2.0
                        remove_task(TASKID_BOTTHINK)
                        set_task(random_float(1.0, float(DECIDESECONDS) - 1.0), "BotDecides", TASKID_BOTTHINK)
                }
                g_challenges[PIRATE] = 0
        }
        else
                set_task(1.0, "decreaseChallenges", PIRATE)

        //client_print(PIRATE, print_chat, "Your challenges: %d", g_challenges[PIRATE])

        return FMRES_IGNORED
}

public decreaseChallenges(id) {
        if (--g_challenges[id] < 0)
                g_challenges[id] = 0
}

public BotDecides() {
        if (!g_challenging)
                return

        if (random_num(0,9) > 0)
                Accept()
        else {
                DeclineMsg()
        }
        g_challenging = false
        remove_task(TASKID_CHALLENGING)
}

Challenge(challenger, challenged) {
        g_challenger = challenger
        g_challenged = challenged
        g_challenging = true
        new challenger_name[32], challenged_name[32]
        get_user_name(challenger, challenger_name, 31)
        get_user_name(challenged, challenged_name, 31)

        Color_Print(0, "!y[!gДуэль!y]Вы вызвали !t%s !yна дуэль! Ждите ответа !t%d !yсекунд.", 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)
}

public timed_toolate() {
        if (g_challenging) {
                new challenger_name[32], challenged_name[32]
                get_user_name(g_challenger, challenger_name, 31)
                get_user_name(g_challenged, challenged_name, 31)
                Color_Print(0, "!y[!gДуэль!y]!t%s !yне ответил !t%s's !gдуэль не состоится!", challenged_name, challenger_name)
                CancelAll()
        }
}

public client_putinserver(id) {
        set_task(25.0, "Announcement", id)

        return PLUGIN_CONTINUE
}

public Announcement(id) {
        Color_Print(0, "!y[!gДуэль!y]Для вызова противника на дуэль при !g1vs1 !yбейте стену ножом.")
}

public challenged_menu(id, key) {
        switch (key) {
                case MENUSELECT1: {
                        // Accept
                        Accept()
                }
                case MENUSELECT2: {
                        // Decline
                        DeclineMsg()
                }
        }
        g_challenging = false
        remove_task(TASKID_CHALLENGING)

        return PLUGIN_HANDLED
}

DeclineMsg() {
        new challenger_name[32], challenged_name[32]
        get_user_name(g_challenger, challenger_name, 31)
        get_user_name(g_challenged, challenged_name, 31)
        Color_Print(0, "!y[!gДуэль!y]!t%s !yне согласился !t%s's !yдуэль не состоится!", challenged_name, challenger_name)
}

Accept() {
        new challenger_name[32], challenged_name[32]
        get_user_name(g_challenger, challenger_name, 31)
        get_user_name(g_challenged, challenged_name, 31)

        Color_Print(0, "!y[!gДуэль!y]!t%s !yсогласился !t%s's !yдуэль началась!", challenged_name, challenger_name)
        g_knifeArena = true
        give_item(g_challenger, "weapon_knife")
        give_item(g_challenged, "weapon_knife")
        engclient_cmd(g_challenger, "weapon_knife")
        engclient_cmd(g_challenged, "weapon_knife")
}

public event_holdwpn(id) {
        if (!g_knifeArena || !is_user_alive(id))
                return PLUGIN_CONTINUE

        new weaponType = read_data(2)

        for (new i = 0; i < ALLOWED_WEAPONS; i++) {
                if (weaponType == g_allowedWeapons[i])
                        return PLUGIN_CONTINUE
        }

        engclient_cmd(id, "weapon_knife")

        return PLUGIN_CONTINUE
}

public event_roundend() {
        if (g_challenging || g_knifeArena)
                CancelAll()
        g_noChallengingForAWhile = true
        set_task(4.0, "NoChallengingForAWhileToFalse")

        return PLUGIN_CONTINUE
}

public NoChallengingForAWhileToFalse() {
        g_noChallengingForAWhile = false
}

CancelAll() {
        if (g_challenging) {
                g_challenging = false
                // Close menu of challenged
                if (is_user_connected(g_challenged)) {
                        new usermenu, userkeys
                        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
                }
        }
        if (g_knifeArena) {
                g_knifeArena = false
        }
        remove_task(TASKID_BOTTHINK)
        remove_task(TASKID_CHALLENGING)
}

public event_death() {
        if (g_challenging || g_knifeArena)
                CancelAll()

        return PLUGIN_CONTINUE
}

#if defined DEBUG
public challengefn(id, level, cid) {
        if (!cmd_access(id, level, cid, 3))
                return PLUGIN_HANDLED

        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)
        Challenge(r, d)
        if (is_user_bot(d))
                Accept()

        return PLUGIN_HANDLED
}
#endif // defined DEBUG

public plugin_init() {
        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("SendAudio", "event_roundend", "a", "2&%!MRAD_terwin")
        register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_ctwin")
        register_event("SendAudio", "event_roundend", "a", "2&%!MRAD_rounddraw")

        #if defined DEBUG
        register_clcmd("0challenge", "challengefn", ADMIN_CFG, "<challenger> <challenged> - start knife duel challenge")
        #endif // defined DEBUG

        new Float:maptime = get_cvar_float("mp_timelimit")
        if (maptime == 0.0)
                maptime = 15.0

        new Float:anntime = 60.0 * 5.0 // 5 minutes
        if (maptime < 5.0)
                anntime = maptime / 3.0

        set_task(anntime, "Announcement", 0, "", 0, "b")
}

stock Color_Print(const id, const input[], any:...)
{
        new count = 1, players[32]
        static msg[191]
        vformat(msg, 190, input, 3)
      
        replace_all(msg, 190, "!g", "^4") // Green Color
        replace_all(msg, 190, "!y", "^1") // Default Color
        replace_all(msg, 190, "!team", "^3") // Team Color
      
        if (id) players[0] = id; else get_players(players, count, "ch")
        {
                for (new i = 0; i < count; i++)
                {
                        if (is_user_connected(players[i]))
                        {
                                message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
                                write_byte(players[i]);
                                write_string(msg);
                                message_end();
                        }
                }
        }
}

Вот плагин для дуэли на ножах. Я хочу чтобы вместо !y был синий цвет.[/code]
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: