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

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

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

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

Авто открытие меню

, Описание ниже
Статус пользователя Captain
сообщение 27.9.2016, 22:00
Сообщение #1
Стаж: 12 лет

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

Возможно ли сделать автоматическое открытие меню, после того как игрок выберет команду, за которую он будет играть (если зрители, то меню не открывалось)? Если да, то как?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя daywer
сообщение 27.9.2016, 22:02
Сообщение #2


Стаж: 13 лет
Город: Санкт-Петербург


Сообщений: 136
Благодарностей: 121
Полезность: 1051

register_menucmd(register_menuid("#Terrorist_Select"), 1023, "CMenu_SelectClass");
register_menucmd(register_menuid("#CT_Select"), 1023, "CMenu_SelectClass");


Написание плагинов на заказ.(sql,sqlite,nvault)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 27.9.2016, 22:06
Сообщение #3
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(Captain @ 28.9.2016, 0:00) *
Возможно ли сделать автоматическое открытие меню


Какого меню ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 27.9.2016, 22:25
Сообщение #4
Стаж: 12 лет

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

SISA, ну любое меню. Например меню, которое открывается командой в консоли adminmenu
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 27.9.2016, 23:31
Сообщение #5
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(Captain @ 28.9.2016, 0:25) *
SISA, ну любое меню. Например меню, которое открывается командой в консоли adminmenu


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

Короч полностью опишите, что должно происходить и как.

Отредактировал: SISA, - 27.9.2016, 23:34
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 28.9.2016, 0:18
Сообщение #6
Стаж: 12 лет

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

SISA, Заходит игрок на сервер. Перед ним же выходит окошко, где выбираешь, за какую команду играть. После того как он выбирает команду и модельку. То через пару секунд чтобы открылось у него меню возрождения например (/respawn)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 28.9.2016, 1:36
Сообщение #7
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(Captain @ 28.9.2016, 2:18) *
SISA, Заходит игрок на сервер. Перед ним же выходит окошко, где выбираешь, за какую команду играть. После того как он выбирает команду и модельку. То через пару секунд чтобы открылось у него меню возрождения например (/respawn)


Таки команду и модельку ? А если он не выбрал модельку, допустим, открыл amxmodmenu или другое меню которое перекроет меню выбора модельки ? Там ещё есть 2 типа меню Вгуи и обычное текстовое. Тот код, что выше давали, на сколько я помню, перехватывает только текстовое меню. Для перехвата вгуи надо register_clcmd("menuselect" или register_clcmd("chooseteam" но точно не помню которое из них.

Чтобы задетектить всё четко, надо зарегать:

register_clcmd("chooseteam", "clcmd_changeteam");
register_clcmd("jointeam", "clcmd_changeteam");
register_clcmd("menuselect", "clcmd_changeteam");

public clcmd_changeteam(id)
{
if(!is_user_connected(id) || pev_valid(id) != 2)
return PLUGIN_CONTINUE;

тут проверяешь значения оффсетов

return PLUGIN_CONTINUE;
}

И уже дальше смотреть клиентские оффсеты:

#define m_iMenu 205
#define m_iJoiningState 121
#define m_iTeam 114

без них ты нормально состояние меню выбора команд не чекнешь.

Отредактировал: SISA, - 28.9.2016, 1:41
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 28.9.2016, 5:02
Сообщение #8
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

http://amxxmodx.ru/core/amxmodxinc/289-get...-ego-imeni.html
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 28.9.2016, 16:30
Сообщение #9
Стаж: 12 лет

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

Сделал так, но менюшка автоматически открывается у всех, как только новый игрок зайдет на сервер и выберет команду. Как быть?

Код
new g_maxplayers

public plugin_init()
{
    register_plugin("[ZP] Addon: Respawn Menu", "1.0", "Admin")
    g_maxplayers = get_maxplayers()
    register_event("TextMsg", "joined_a_team", "a", "1=1", "2=#Game_join_terrorist", "2=#Game_join_ct")
    register_menu("respawn_menu", KEYSMENU, "respawn")
    register_concmd("respawn", "respawn_dead")
}

public joined_a_team()
{
    for (new id = 1; id <= g_maxplayers; id++)

    if(zp_has_round_started())
    {
        client_cmd(id, "respawn")
    }
    return 1
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 28.9.2016, 16:46
Сообщение #10
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(Captain @ 28.9.2016, 18:30) *
Сделал так, но менюшка автоматически открывается у всех, как только новый игрок зайдет на сервер и выберет команду. Как быть?

Код
new g_maxplayers

public plugin_init()
{
    register_plugin("[ZP] Addon: Respawn Menu", "1.0", "Admin")
    g_maxplayers = get_maxplayers()
    register_event("TextMsg", "joined_a_team", "a", "1=1", "2=#Game_join_terrorist", "2=#Game_join_ct")
    register_menu("respawn_menu", KEYSMENU, "respawn")
    register_concmd("respawn", "respawn_dead")
}

public joined_a_team()
{
    for (new id = 1; id <= g_maxplayers; id++)

    if(zp_has_round_started())
    {
        client_cmd(id, "respawn")
    }
    return 1
}


Перехват конечно жопный, но зачем там цикл ? register_event с флагов А - это глобально, а вам надо на игрока: http://amxxmodx.ru/core/amxmodxinc/78-regi...yh-sobytiy.html

поставьте соответствующие флаги и joined_a_team(id) используйте без всяких циклов.

Отредактировал: SISA, - 28.9.2016, 16:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя georgeml
сообщение 28.9.2016, 17:01
Сообщение #11
Стаж: 12 лет

Сообщений: 1467
Благодарностей: 439
Полезность: 423

Captain,
1. Не нужен цикл. На кой отправлять команду всем...
2. Самое главное- выкинул из примера! Из того примера замени client_print на свое действие! Смысл-то- узнай id игрока, которому отправить!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 28.9.2016, 17:07
Сообщение #12
Стаж: 12 лет

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

SISA, цикл поставил, потому что индекс id client_cmd(id, "respawn") при компиляции не понимает
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 28.9.2016, 17:32
Сообщение #13
Стаж: 12 лет

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

public plugin_init()
{
register_plugin("[ZP] Addon: Respawn Menu", "1.0", "Admin")
register_event("TextMsg", "joined_a_team", "d", "1=1", "2=#Game_join_terrorist", "2=#Game_join_ct")
register_menu("respawn_menu", KEYSMENU, "respawn")
register_concmd("respawn", "respawn_dead")
}

public joined_a_team()
{
new name[32]
read_data(3, name, 31)

new id = get_user_index(name)

client_cmd(id, "respawn")
}


Сделал как ты сказал. Поставил флаг d, убрал цикл. Но в итоге меню не открывается, после того как игрок выбирает команду, за которую он собирается играть
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 28.9.2016, 17:59
Сообщение #14
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Я вам выше уже давал практически готовый код. Осталось лишь состояния оффсетов проверить и сделать необходимые условия.

Цитата
new name[32]
read_data(3, name, 31)

new id = get_user_index(name)


А это зачем ? Я же выше вам написал про флаги.

Отредактировал: SISA, - 28.9.2016, 18:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 28.9.2016, 18:25
Сообщение #15
Стаж: 12 лет

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

SISA, я что-то не понял (( сделай сам пожалуйста
Прикрепленный файл  zp_addon_respawn_menu.sma ( 2,55 килобайт ) Кол-во скачиваний: 7

Потом я разберусь)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 28.9.2016, 18:41
Сообщение #16
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Цитата(Captain @ 28.9.2016, 20:25) *
я что-то не понял


Что именно ? Код я писать вам не буду, ибо работа с этим меню выбора команд - отдельный и крайне жесткий онанизм, если делать без багов.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 28.9.2016, 18:50
Сообщение #17
Стаж: 12 лет

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

SISA, я сделал так:

Код
public plugin_init()
{
    register_plugin("[ZP] Addon: Respawn Menu", "1.0", "Admin")
    register_event("TextMsg", "joined_a_team", "a", "1=1", "2=#Game_join_terrorist", "2=#Game_join_ct")
    register_menu("respawn_menu", KEYSMENU, "respawn")
    register_concmd("respawn", "respawn_dead")
}

public joined_a_team()
{
    new name[32]
    read_data(3, name, 31)

    new id = get_user_index(name)

    if(zp_has_round_started())
    {
        client_cmd(id, "respawn")
    }
    return 1
}


Все работает, но щас некоторые игроки заходят на сервер и не возрождаются в след раунде. Просто в таблице (Tab) написано их ники и то что они мертвы. Они не в зрителях

из инклуда. Мне кажется, что я неправильно использовал этот натив в плагине
/**
* Returns whether the ZP round has started, i.e. first zombie
* has been chosen or a game mode has begun.
*
* @return 0 - Round not started
* 1 - Round started
* 2 - Round starting
*/
native zp_has_round_started()

Отредактировал: Captain, - 28.9.2016, 18:53
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 28.9.2016, 19:37
Сообщение #18
Стаж: 15 лет

Сообщений: 2774
Благодарностей: 2956
Полезность: 994

Captain,

А - глобальный флаг. Вам нужны флаги bd (игроку + мертвому). Не ищите код в других плагинах. В 99% там полный идиотизм. Сходу вижу, что вот этот бред:

Цитата
new name[32]
read_data(3, name, 31)
new id = get_user_index(name)


вы где-то увидели и скопировали.

Вам нужно перехватывать команды/эвенты с игрока, а не глобальные евенты, которые вызываются на 0. Потом, вы в этом глобальном эвенте пытаетесь найти ID игрока по его имени и ещё дополнительно блокируете секцию и ещё в дополнение вызываете client_cmd. Как до такого вообще можно было догадаться ?

Цитата
return 1


Почему тут 1 ? А не 125 например ? Что такое 1 в данном случае, вы знаете ?

Вы хотите игрока зареспать после того, как он выбрал команду шоль ?

Отредактировал: SISA, - 28.9.2016, 19:40
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: