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

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

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

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

Запись в массив

Статус пользователя Nickk
сообщение 18.1.2013, 19:58
Сообщение #1
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Здравствуйте.

Подскажите пожалуйста, как поступить в данной ситуации:
Есть меню со списком игроков; выбранный игрок записывается в массив.
Вопрос : как из этого массива его вывести, чтобы его можно было использовать в других пабликах?

Заранее спасибо.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя midorfeed
сообщение 18.1.2013, 20:15
Сообщение #2
Стаж: 13 лет

Сообщений: 303
Благодарностей: 87
Полезность: 243

Сделать глобальную переменную, в которой будет храниться инфо о твоем игроке.
Лучше исходник покажи
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 18.1.2013, 20:19
Сообщение #3


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

массив создать не в теле функции, а в теле плагина (там где #define и #include) и он будет доступен в других ф-ях. Как и сказал midorfeed


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Orty_Hart
сообщение 18.1.2013, 20:21
Сообщение #4
Стаж: 14 лет

Сообщений: 1399
Благодарностей: 408
Полезность: 725

Nickk,
Цитата
чтобы его можно было использовать в других пабликах

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

Ответ: Так нельзя сделать. Вы можете создать квар, и в нем передавать. К примеру, зарегистрировать квар user_id, в одном плагине вносить туда id игрока. А в втором плагине получать его из квара. После того, как получили, советую установить квару значение 0. (начальное). И в плагинах, проверять перед действиями, чтоб квар не был равен 0.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 18.1.2013, 20:24
Сообщение #5


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Orty_Hart,
так сделать можно несколькими способами (из плагина в плагин)
Но я так понял "другие паблик" это другие public функции


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 18.1.2013, 20:28
Сообщение #6
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Цитата(mazdan @ 18.1.2013, 20:19) *
массив создать не в теле функции, а в теле плагина (там где #define и #include) и он будет доступен в других ф-ях. Как и сказал midorfeed


Я не понимаю, как эго туда вывести.

Т.е., к примеру меню :

Вот пример :
Скрытый текст
Код
public My_Menu(id)
{
    // Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем
    new i_Menu = menu_create("\rPlayer menu:", "menu_handler")

    // Необходимые переменные, которые понадобятся нам при выводе меню из игроков
    new s_Players[32], i_Num, i_Player

    // Переменные для хранения информации об игроках
    new s_Name[32], s_Player[10]

    // Получаем массив игроков
    get_players(s_Players, i_Num)

    // Цикл по всем игрокам
    for (new i; i < i_Num; i++)
    {
        // Сохраняем текущего игрока в i_Player
        i_Player = s_Players[i]

        // Получаем имя и ID игрока
        get_user_name(i_Player, s_Name, charsmax(s_Name))
        num_to_str(i_Player, s_Player, charsmax(s_Player))

        // Добавляем опцию по данному игроку
        menu_additem(i_Menu, s_Name, s_Player, 0)

    }

    // Мы сформировали меню из игроков, присутствующих на сервере, теперь выводим его
    menu_display(id, i_Menu, 0)
}

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

    new s_Data[6], s_Name[64], i_Access, i_Callback
    menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

    // Получаем ID игрока, который был выбран в меню
    new i_Player = str_to_num(s_Data)

    // Проверяем, если игрок живой
    if (is_user_alive(i_Player))
        // Устанавливаем его здоровье в 100 HP
        set_user_health(i_Player, 100)

    menu_destroy(menu)
    return PLUGIN_HANDLED
}


Как отсюда вывести его? ( i_Player )

Orty_Hart, нет, я имел ввиду public Func()

Отредактировал: Nickk, - 18.1.2013, 20:30
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя midorfeed
сообщение 18.1.2013, 20:37
Сообщение #7
Стаж: 13 лет

Сообщений: 303
Благодарностей: 87
Полезность: 243

Nickk, вверху, перед всеми public-функциями.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 18.1.2013, 20:40
Сообщение #8
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Можно код? :D
Я просто не понимаю =/
Извините за наглость

Отредактировал: Nickk, - 18.1.2013, 20:42
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя midorfeed
сообщение 18.1.2013, 20:44
Сообщение #9
Стаж: 13 лет

Сообщений: 303
Благодарностей: 87
Полезность: 243

Код
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "New Plug-In"
#define VERSION "1.0"
#define AUTHOR "123"

new sld // <<-- глобальная переменная. Может быть использована в любой функции.

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    
    // Add your code here...
    new sld2 // <<-- переменная, которую можно использовать только в этой функции
    sld = 2
    sld2 = 4
    
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 18.1.2013, 20:49
Сообщение #10
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Да это я понял)
Меня интересует, как из локальной перемеенной вывести информацию в глобальную, чтобы использовать в другой функции.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя midorfeed
сообщение 18.1.2013, 20:52
Сообщение #11
Стаж: 13 лет

Сообщений: 303
Благодарностей: 87
Полезность: 243

Цитата(Nickk @ 18.1.2013, 20:49) *
Да это я понял)
Меня интересует, как из локальной перемеенной вывести информацию в глобальную, чтобы использовать в другой функции.

sld2=sld
:o
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 18.1.2013, 20:54
Сообщение #12
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Лол, я так пробовал, ругалось на индекс :D
Сейчас нету, мистика :D
Спасибо) Сейчас попробую
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 18.1.2013, 21:11
Сообщение #13
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

Нет, все равно эррорит

Код(пример):

Скрытый текст
Код
new choosed = i_Player

public My_Menu(id)
{
    // Сперва необходимо создать переменную для меню, с которой мы будем взаимодействовать в дальнейшем
    new i_Menu = menu_create("\rPlayer menu:", "menu_handler")

    // Необходимые переменные, которые понадобятся нам при выводе меню из игроков
    new s_Players[32], i_Num, i_Player

    // Переменные для хранения информации об игроках
    new s_Name[32], s_Player[10]

    // Получаем массив игроков
    get_players(s_Players, i_Num)

    // Цикл по всем игрокам
    for (new i; i < i_Num; i++)
    {
        // Сохраняем текущего игрока в i_Player
        i_Player = s_Players[i]

        // Получаем имя и ID игрока
        get_user_name(i_Player, s_Name, charsmax(s_Name))
        num_to_str(i_Player, s_Player, charsmax(s_Player))

        // Добавляем опцию по данному игроку
        menu_additem(i_Menu, s_Name, s_Player, 0)

    }

    // Мы сформировали меню из игроков, присутствующих на сервере, теперь выводим его
    menu_display(id, i_Menu, 0)
}

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

    new s_Data[6], s_Name[64], i_Access, i_Callback
    menu_item_getinfo(menu, item, i_Access, s_Data, charsmax(s_Data), s_Name, charsmax(s_Name), i_Callback)

    // Получаем ID игрока, который был выбран в меню
    new i_Player = str_to_num(s_Data)

    // Проверяем, если игрок живой
    if (is_user_alive(i_Player))
        // Устанавливаем его здоровье в 100 HP
        set_user_health(i_Player, 100)

    menu_destroy(menu)
    return PLUGIN_HANDLED
}

public omg(id){
client_print(choosed, print_chat, "omfg")
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 18.1.2013, 21:30
Сообщение #14


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

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Код
new choosed = i_Player
тут надо просто объявить
Код
new choosed

после этой строки можно присвоить
Код
new i_Player = str_to_num(s_Data) //Объявили локальную и присвоили
choosed = i_Player // присвоили глобальной

по сути нам ни к чему локальная в таком примере - её можно заменить глобальной
Код
choosed  = str_to_num(s_Data) //Объявили локальную и присвоили
Код
if (is_user_alive(choosed  ))
        // Устанавливаем его здоровье в 100 HP
        set_user_health(choosed  , 100)
Следующее что, наверное, может понадобится - вытекает из того что выбранный игрок choosed только один на весь сервер. т.е. кто-то выбрал, если меню откроет другой человек и выберет кого-то то он затрёт значение choosed. Если нужно хранить для каждого открывающего меню тогда вначале создаем массив
Код
new choosed[33]//на 32 игрока + 0 индекс
потом используем choosed[id] в функциях меню. т.е. можем для каждого игрока записать своё значение выбранного игрока


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Nickk
сообщение 18.1.2013, 21:34
Сообщение #15
Стаж: 13 лет

Сообщений: 438
Благодарностей: 120
Полезность: 523

mazdan, как всегда, выручаете :)
Большое спасибо)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 2 гостей читают эту тему: