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

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

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

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

2 страниц V   1 2

Меню выбора напарника для выжившего

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

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

Всем привет. Почему плагин не работает? По задумке в раунде выжившего должно открыться меню выбора напарника (меню для выжившего).

Исходник
Код:
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>

#define PLUGIN "[ZP] Addon: Partner"
#define VERSION "1.0"
#define AUTHOR "Admin"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
}

public partner_menu(id)
{
new Menu = menu_create("\yВыберите напарника:", "menu_handler")

new Player
new sPlayerName[128]
new sPlayerId[11]

new playersList[32]
new playersnum
get_players(playersList, playersnum, "c")

for(new i; i<playersnum; i++)
{
Player = playersList[i]
get_user_name(Player, sPlayerName, charsmax(sPlayerName))
num_to_str(Player, sPlayerId, charsmax(sPlayerId))
menu_additem(Menu, sPlayerName, sPlayerId, 0)
}

menu_setprop(Menu, MPROP_NEXTNAME, "Дальше")
menu_setprop(Menu, MPROP_BACKNAME, "Назад")
menu_setprop(Menu, MPROP_EXITNAME, "Выход")

menu_display(id, Menu, 0)

return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

zp_make_user_survivor(id)

return PLUGIN_HANDLED
}

public zp_round_started(mode, id)
{
if(mode == MODE_SURVIVOR)
{
if(zp_get_user_survivor(id))
partner_menu(id)
}
}


Пробовал и так
Код:
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>

#define PLUGIN "[ZP] Addon: Partner"
#define VERSION "1.0"
#define AUTHOR "Admin"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("partner", "partner_menu")
}

public partner_menu(id)
{
new Menu = menu_create("\yВыберите напарника:", "menu_handler")

new Player
new sPlayerName[128]
new sPlayerId[11]

new playersList[32]
new playersnum
get_players(playersList, playersnum, "c")

for(new i; i<playersnum; i++)
{
Player = playersList[i]
get_user_name(Player, sPlayerName, charsmax(sPlayerName))
num_to_str(Player, sPlayerId, charsmax(sPlayerId))
menu_additem(Menu, sPlayerName, sPlayerId, 0)
}

menu_setprop(Menu, MPROP_NEXTNAME, "Дальше")
menu_setprop(Menu, MPROP_BACKNAME, "Назад")
menu_setprop(Menu, MPROP_EXITNAME, "Выход")

menu_display(id, Menu, 0)

return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

zp_make_user_survivor(id)

return PLUGIN_HANDLED
}

public zp_round_started(mode, id)
{
if(mode == MODE_SURVIVOR)
{
set_task(1.0, "zp_patrner", id)
}
}

public zp_patrner(id)
{
if(zp_get_user_survivor(id))
client_cmd(id, "partner")
}


И так
Код:
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>

#define PLUGIN "[ZP] Addon: Partner"
#define VERSION "1.0"
#define AUTHOR "Admin"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
}

public partner_menu(id)
{
new Menu = menu_create("\yВыберите напарника:", "menu_handler")

new Player
new sPlayerName[128]
new sPlayerId[11]

new playersList[32]
new playersnum
get_players(playersList, playersnum, "c")

for(new i; i < playersnum; i++)
{
Player = playersList[i]
get_user_name(Player, sPlayerName, charsmax(sPlayerName))
num_to_str(Player, sPlayerId, charsmax(sPlayerId))
menu_additem(Menu, sPlayerName, sPlayerId, 0)
}

menu_setprop(Menu, MPROP_NEXTNAME, "Дальше")
menu_setprop(Menu, MPROP_BACKNAME, "Назад")
menu_setprop(Menu, MPROP_EXITNAME, "Выход")

menu_display(id, Menu, 0)

return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
if (item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

zp_make_user_survivor(id)

return PLUGIN_HANDLED
}

public zp_user_humanized_post(id)
{
if(zp_get_user_survivor(id))
set_task(1.0, "partner_menu", id)
}


Использую чистый zombie plague 4.3
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Sorokin
сообщение 8.1.2017, 13:20
Сообщение #2
Стаж: 9 лет 5 месяцев

Сообщений: 427
Благодарности: выкл.

Captain, такс,

Во-первых вы использовали неверный API
Код:
zp_user_humanized_post(id)

->
Код:
zp_user_humanized_post(id, survivor)


Во-вторых надо делать вот так ;)

Код:
public zp_user_humanized_post(id, survivor)
{
return partner_menu(survivor); // вернуть меню выбора выжившему (Сурвивору)
}


В-третьих там, где у вас выбор меню, нету menu_item_getinfo, а узнать id выбраного игрока можно только так, ну и потом
Код:
new pId;

pId = str_to_num(iData);

zp_make_user_survivor(pId); // Превратить именно выбраного игрока в Сурвивора


Cкрытый текст
p.s.: на amx-x не помогли?


Отредактировал: Sorokin, - 8.1.2017, 13:25
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 13:35
Сообщение #3
Стаж: 12 лет

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

Sorokin, спасибо, всё работает. Но, у меня остались вопросы.

1. После выбора напарника (второго выжившего), как я предполагаю, что у и второго выжившего выйдет меню выбора напарника. Как же предотвратить это?
2. На сервере ещё есть режимы Чума, Армагеддон (50% немезид, против 50% выживших). В этих режимах у выживших будет ли меню выбора напарника?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Sorokin
сообщение 8.1.2017, 13:41
Сообщение #4
Стаж: 9 лет 5 месяцев

Сообщений: 427
Благодарности: выкл.

Captain, насчет первого вопроса скажу то, что надо применить булевую переменную, которая примет значение true тогда, когда игрок выберет другого. И сделать проверку, а в начале нового раунда сбросить это значение


По второму: будет работать, но это надо сделать проверку на режим ;)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 13:44
Сообщение #5
Стаж: 12 лет

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

Цитата(Sorokin @ 8.1.2017, 14:41) *
Captain, насчет первого вопроса скажу то, что надо применить булевую переменную, которая примет значение true тогда, когда игрок выберет другого. И сделать проверку, а в начале нового раунда сбросить это значение


По второму: будет работать, но это надо сделать проверку на режим ;)

А почему не получается сделать через public zp_round_started(mode, id)?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 8.1.2017, 13:48
Сообщение #6
Стаж: 15 лет

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

Цитата(Sorokin @ 8.1.2017, 15:41) *
что надо применить булевую переменную


Глобальные переменные надо использовать в самых крайних случаях. В случае ТС, можно сделать проверку форвардом "zp_round_started"

Отредактировал: SISA, - 8.1.2017, 13:51
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 14:31
Сообщение #7
Стаж: 12 лет

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

Правильно?

Исходник
Код:
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>

#define PLUGIN "[ZP] Addon: Partner"
#define VERSION "1.0"
#define AUTHOR "Admin"

new bool:once_open[33]

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_logevent("round_start", 2, "1=Round_Start")
}

public round_start()
{
arrayset(once_open, false, 33)
}

public partner_menu(id)
{
new Menu = menu_create("\yВыберите напарника:", "menu_handler")

new Player
new sPlayerName[128]
new sPlayerId[11]

new playersList[32]
new playersnum
get_players(playersList, playersnum, "c")

if(once_open[id])
{
return PLUGIN_HANDLED
}
else
{
for(new i; i < playersnum; i++)
{
Player = playersList[i]

if(!is_user_connected(Player))
continue;

get_user_name(Player, sPlayerName, charsmax(sPlayerName))
num_to_str(Player, sPlayerId, charsmax(sPlayerId))
menu_additem(Menu, sPlayerName, sPlayerId, 0)
}
}

menu_setprop(Menu, MPROP_NEXTNAME, "Дальше")
menu_setprop(Menu, MPROP_BACKNAME, "Назад")
menu_setprop(Menu, MPROP_EXITNAME, "Выход")

menu_display(id, Menu, 0)
return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

new pId
new iData[32]
pId = str_to_num(iData)

if(is_user_connected(pId))
{
if(id == pId)
{
client_print(id, print_center, "Выберите другого игрока!")
partner_menu(id)
}

zp_make_user_survivor(pId)
once_open[id] = true
}
return PLUGIN_HANDLED
}

public zp_round_started(mode, id)
{
if(mode != MODE_SURVIVOR)
{
once_open[id] = true
}
}

public zp_user_humanized_post(id, survivor)
{
if(zp_get_human_count() < 10)
{
return PLUGIN_HANDLED
}
else
{
return partner_menu(survivor)
}
return PLUGIN_HANDLED
}


Отредактировал: Captain, - 8.1.2017, 14:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 8.1.2017, 14:47
Сообщение #8
Стаж: 15 лет

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

Captain,

Не, лучше нативу использовать zp_has_round_started

zp_round_started и once_open не нужны.

Зачем ставить else, если выше уже есть ретурн ?

if(once_open[id])
{
return PLUGIN_HANDLED
}
else
{

Короч так делаешь и всё:

Код
public partner_menu(id)
{
    new Menu = menu_create("\yВыберите напарника:", "menu_handler")

    new Player
    new sPlayerName[128]
    new sPlayerId[11]

    new playersList[32]
    new playersnum
    get_players(playersList, playersnum, "c")

    if(zp_has_round_started())
        return PLUGIN_HANDLED

    for(new i; i < playersnum; i++)
    {
        Player = playersList[i]

        if(!is_user_connected(Player))
            continue;

        get_user_name(Player, sPlayerName, charsmax(sPlayerName))
        num_to_str(Player, sPlayerId, charsmax(sPlayerId))
        menu_additem(Menu, sPlayerName, sPlayerId, 0)
    }

    menu_setprop(Menu, MPROP_NEXTNAME, "Дальше")
    menu_setprop(Menu, MPROP_BACKNAME, "Назад")
    menu_setprop(Menu, MPROP_EXITNAME, "Выход")

    menu_display(id, Menu, 0)

    return PLUGIN_HANDLED
}


Отредактировал: SISA, - 8.1.2017, 14:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 15:10
Сообщение #9
Стаж: 12 лет

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

SISA, а так получается, что zp_has_round_started вызывается после начала раунда и меню не откроется вовсе. Не так ли?

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

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

Цитата(Captain @ 8.1.2017, 17:10) *
SISA, а так получается, что zp_has_round_started вызывается после начала раунда и меню не откроется вовсе. Не так ли?


zp_has_round_started - это натив.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 15:18
Сообщение #11
Стаж: 12 лет

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

SISA, это получается, что меню будет открываться только у 1 выжившего, когда будет режим "Выживший"? И в других режимах, если будет выживший, то у них не откроется меню?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 8.1.2017, 15:23
Сообщение #12
Стаж: 15 лет

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

Цитата(Captain @ 8.1.2017, 17:18) *
SISA, это получается, что меню будет открываться только у 1 выжившего, когда будет режим "Выживший"? И в других режимах, если будет выживший, то у них не откроется меню?


Меню, по идее, должно будет открыться у игрока, который стал выжившим при старте игрового режима (любого). Если нужны исключения для других игровых режимов, открывай инклуд от ЗП и ищи соответствующие нативы "zp_is_plague_round()"

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

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

SISA, понял

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

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

Цитата(Captain @ 8.1.2017, 17:24) *
SISA, любого игрового режима, где будет выживший?


Ну да.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 15:32
Сообщение #15
Стаж: 12 лет

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

SISA,

Правильно же я вас понял?

Исходник
Код:
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>

#define PLUGIN "[ZP] Addon: Partner"
#define VERSION "1.0"
#define AUTHOR "Admin"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
}

public partner_menu(id)
{
new Menu = menu_create("\yВыберите напарника:", "menu_handler")

new Player
new sPlayerName[128]
new sPlayerId[11]

new playersList[32]
new playersnum
get_players(playersList, playersnum, "c")

if(zp_has_round_started() || zp_is_plague_round() || zp_is_lnj_round())
return PLUGIN_HANDLED

for(new i; i < playersnum; i++)
{
Player = playersList[i]

if(!is_user_connected(Player))
continue;

get_user_name(Player, sPlayerName, charsmax(sPlayerName))
num_to_str(Player, sPlayerId, charsmax(sPlayerId))
menu_additem(Menu, sPlayerName, sPlayerId, 0)
}

menu_setprop(Menu, MPROP_NEXTNAME, "Дальше")
menu_setprop(Menu, MPROP_BACKNAME, "Назад")
menu_setprop(Menu, MPROP_EXITNAME, "Выход")

menu_display(id, Menu, 0)
return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

new pId
new iData[32]
pId = str_to_num(iData)

if(is_user_connected(pId))
{
if(id == pId)
{
client_print(id, print_center, "Выберите другого игрока!")
partner_menu(id)
}

zp_make_user_survivor(pId)
}
return PLUGIN_HANDLED
}

public zp_user_humanized_post(id, survivor)
{
if(zp_get_human_count() < 10)
{
return PLUGIN_HANDLED
}

return partner_menu(survivor)

return PLUGIN_HANDLED
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 8.1.2017, 15:35
Сообщение #16
Стаж: 15 лет

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

Captain,

Да. Советую вам освоить дебаг собственного кода, в виде расстановки принтов и вывода значений.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 15:36
Сообщение #17
Стаж: 12 лет

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

Цитата(SISA @ 8.1.2017, 16:35) *
Captain,

Да. Советую вам освоить дебаг собственного кода, в виде расстановки принтов и вывода значений.

Хорошо, спасибо за помощь
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 15:59
Сообщение #18
Стаж: 12 лет

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

Не знаю почему, но меню не открывается :( Я уже даже не знаю, что не так...

Исходник
Код:
#include <amxmodx>
#include <fakemeta>
#include <cstrike>
#include <zombieplague>

#define PLUGIN "[ZP] Addon: Partner"
#define VERSION "1.0"
#define AUTHOR "Admin"

public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
}

public partner_menu(id)
{
new Menu = menu_create("\yВыберите напарника:", "menu_handler")

new Player
new sPlayerName[128]
new sPlayerId[11]

new playersList[32]
new playersnum
get_players(playersList, playersnum, "c")

if(zp_has_round_started() || zp_is_plague_round() || zp_is_lnj_round())
return PLUGIN_HANDLED

if(zp_get_human_count() < 0)
{
return PLUGIN_HANDLED
}

for(new i; i < playersnum; i++)
{
Player = playersList[i]

if(!is_user_connected(Player))
return PLUGIN_CONTINUE

get_user_name(Player, sPlayerName, charsmax(sPlayerName))
num_to_str(Player, sPlayerId, charsmax(sPlayerId))
menu_additem(Menu, sPlayerName, sPlayerId, 0)
}

menu_setprop(Menu, MPROP_NEXTNAME, "Дальше")
menu_setprop(Menu, MPROP_BACKNAME, "Назад")
menu_setprop(Menu, MPROP_EXITNAME, "Выход")

menu_display(id, Menu, 0)
return PLUGIN_HANDLED
}

public menu_handler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}

new pId
new iData[32]
pId = str_to_num(iData)

if(is_user_connected(pId))
{
if(id == pId)
{
client_print(id, print_center, "Выберите другого игрока!")
partner_menu(id)
}

zp_make_user_survivor(pId)
}
return PLUGIN_HANDLED
}

public zp_user_humanized_post(id, survivor)
{
return partner_menu(survivor)
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя SISA
сообщение 8.1.2017, 16:22
Сообщение #19
Стаж: 15 лет

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

Где принты ? Где вывод значений с zp_has_round_started(), zp_is_plague_round(), zp_is_lnj_round() ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Captain
сообщение 8.1.2017, 16:46
Сообщение #20
Стаж: 12 лет

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

Цитата(SISA @ 8.1.2017, 17:22) *
Где принты ? Где вывод значений с zp_has_round_started(), zp_is_plague_round(), zp_is_lnj_round() ?

А как понять выводы?

if(zp_has_round_started() || zp_is_plague_round() || zp_is_lnj_round())
return PLUGIN_HANDLED

Отредактировал: Captain, - 8.1.2017, 16:58
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
2 страниц V   1 2
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: