Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±

    Вопрос по диалоговому окну

    Доброго времени суток, товарищи, не могу разобраться, как же мне быть...
    Суть системы такова:
    Вводишь команду, тебе вылазит диалоговое окно, в этом диалоговом окне максимум 20 игроков написано, 21 строка идёт кнопка Далее,
    чтобы отобразить следующую страницу.
    Если допустим нажимаешь на какого-то игрока, вылазит про него информация, и там ты уже выбираешь как тебе поступить, редактировать его
    или просто нажать назад.
    Проблема заключается вот в чём, ид игрока, на которого я нажимаю не правильно записывается в пвар, и из-за этого я не могу получить
    данные этого игрока.
    Когда нажимаешь далее, новая страница просто не открывается...
    И как сделать на второй странице кнопку назад?

    Код:

    PHP код:
    stock fMemembers(playerid)
    {
        new 
    string[90];
        new 
    online_frack[MAX_PLAYERS] = 0;
        for(new 
    0GetPlayerPoolSize(); <= ji++)
        {
            if(!
    IsPlayerConnected(i) && gPlayerLogged[i] == false) continue;
            if(
    PI[i][pForma] == 0)continue;
            
    online_frack[i] ++;
            
    format(stringsizeof(string), "[%i] %s\n",iPI[i][pName]);
            if(
    == playerid)continue;
            
    SetPVarInt(playerid,"fMemberID",i);
            if(
    online_frack[i] == 2format(stringsizeof(string), "%s{00ffff}Далее >>>\n"string);        
        }
        
    SPD(playerid962"{00ffff}Члены организации Online:"string"Выбор""Назад");
        return 
    1;

    Диалог:

    PHP код:
            case 96:
            {
                if(
    response)
                {
                    switch(
    listitem)
                    {
                        case 
    0,1:
                        {
                            new 
    id_players GetPVarInt(playerid,"fMemberID");
                            
                            static const 
    fMmembersText[] = "Ник:\t\t\t\t\t%s\n\Номер телефона:\t\t\t%d";
                            
                            new 
    string[sizeof(fMmembersText) + + (-MAX_PLAYER_NAME) + (-5)];
                            
                            
    format(string,sizeof(string), fMmembersText,PI[id_players][pName],PI[id_players][pPnumber]);
                            
                            if(
    IsAZamAndLeader(playerid))SPD(playerid97DIALOG_STYLE_MSGBOX"Информация:"string"Выбор""Назад");
                            else 
    SPD(playerid97DIALOG_STYLE_MSGBOX"Информация:"string"Назад""");
                        }
                        case 
    2SCM(playerid,-1,"Далее");
                    }
                }
            } 

  2. #2
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Естественно ID не будет записываться. Ты ведь записываешь все ID в один и тот же pVar (точнее, перезаписываешь pVar всё новыми и новыми ID).
    Если делать по простому, то можно сделать так:

    PHP код:
    new pvar_name_buff[10+3+1],
        
    listitem_id 0;
    for(...)
    {
        
    format(pvar_name_buffsizeof(pvar_name_buff), "fMemberID_%d"listitem_id++); 
        
    SetPVarInt(playeridpvar_name_buffi); 

    И уже в самом диалоге делать так:
    PHP код:
    new pvar_name_buff[10+3+1];
    format(pvar_name_buffsizeof(pvar_name_buff), "fMemberID_%d"listitem); 
    new 
    giveplayerid GetPVarInt(playeridpvar_name_buff); 
    Только не забудь потом все эти 20 pVar удалить

    Чтоб отображать кнопку "Далее", воспользуйся всё той же переменной listitem_id. Если она дошла до значения 20, ищешь после этого ещё одного игрока онлайн и если он есть - заканчиваешь цикл, добавляя "Далее".

    Чтоб добавить "Назад", добавь в свою функцию fMemembers параметр, в котором будет передаваться номер страницы. Если больше 0 - добавляй "Назад".

    Хотя, на самом деле, проще воспользоваться foreach и создать новый итератор, в котором уже хранить игроков каждой фракции отдельно. Тогда не нужно будет никаких танцев с бубном проводить
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. #3
    Аватар для Сергей
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Сообщений
    161
    Репутация:
    3 ±
    Как же мне их удалять? Все эти 20 pvaro'v
    И при каком условии их удалять?
    В каждом диалоге теперь использовать ?
    PHP код:
    new pvar_name_buff[10+3+1];
    format(pvar_name_buffsizeof(pvar_name_buff), "fMemberID_%d"listitem); 
    new 
    giveplayerid GetPVarInt(playeridpvar_name_buff); 

  4. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Удаление:
    PHP код:
    for(new ipvar_name_buff[10+3+1]; 20i++)
    {
        
    format(pvar_name_buffsizeof(pvar_name_buff), "fMemberID_%d"i); 
        
    DeletePVar(playeridpvar_name_buff); 

    Ну а если подумать головой немного? Разве нельзя при выборе одного из пунктов извлекать его значения в новый pVar, удаляя остальные 20, и уже работать с новым pVar?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •