Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Неадекватное меню (Злой и противный бобер, похищающий мои переменные)
Неадекватное меню
ЙОДА Дата: Пятница, 06.07.2012, 01:32:37 | Сообщение # 1
Сообщений: 41
Репутация: 0 [ +/- ]
Code
public menu1(i,String:player_steamid[25])
{

          new Handle:p = CreateMenu(Handler_menu1);
          decl String:text[350];

          Format(text,sizeof(text),"ololotitle");
          SetMenuTitle(p, text);   
            
          AddMenuItem(p,player_steamid, "ololo1");
          AddMenuItem(p,player_steamid, "ololo2");
          AddMenuItem(p,player_steamid, "ololo3");
          AddMenuItem(p,player_steamid, "ololo4");
          AddMenuItem(p,player_steamid, "ololo5");
          AddMenuItem(p,player_steamid, "ololo6");

          SetMenuExitBackButton(p, true);   
          SetMenuExitButton(p, true);    
          DisplayMenu(p, i, 0);
            
}

public Handler_menu1(Handle:menu, MenuAction:action, i, z)
{
          if (action == MenuAction_End)
          {
                  CloseHandle(menu);
                  return;   
          }
          if (action == MenuAction_Cancel)
          {
                  if (z == MenuCancel_ExitBack)
                  {
                          decl String:player_steamid[25];
                          GetMenuItem(menu, z, player_steamid, 25);   
            
                          к_какому_то_бобру(i, player_steamid);
                  }
          }
          if (action == MenuAction_Select)
          {
                  decl String:player_steamid[25];
                  GetMenuItem(menu, z, player_steamid, 25);   

                  menu2(i,player_steamid)
          }
}

public menu2(i,String:player_steamid[25])
{

          new Handle:p = CreateMenu(Handler_menu2);
          decl String:text[350];

          Format(text,sizeof(text),"trololotitle");
          SetMenuTitle(p, text);   
            
          AddMenuItem(p,player_steamid, "trololo1");
          AddMenuItem(p,player_steamid, "trololo2");
          AddMenuItem(p,player_steamid, "trololo3");
          AddMenuItem(p,player_steamid, "trololo4");
          AddMenuItem(p,player_steamid, "trololo5");
          AddMenuItem(p,player_steamid, "trololo6");

          SetMenuExitBackButton(p, true);   
          SetMenuExitButton(p, true);    
          DisplayMenu(p, i, 0);

}

public Handler_menu2(Handle:menu, MenuAction:action, i, z)
{
          if (action == MenuAction_End)
          {
                  CloseHandle(menu);
                  return;   
          }
          if (action == MenuAction_Cancel)
          {
                  if (z == MenuCancel_ExitBack)
                  {
                          decl String:player_steamid[25];
                          GetMenuItem(menu, z, player_steamid, 25);   
            
                          menu1(i, player_steamid);
                  }
          }
          if (action == MenuAction_Select)
          {
                  decl String:player_steamid[25];
                  GetMenuItem(menu, z, player_steamid, 25);   

                  menu2(i,player_steamid)
          }
}


Объясняю порядок действий и саму проблему:

Какая-то процедура вызывает menu1(i,String:player_steamid[25]). menu1 помещает player_steamid в каждый пункт себя, после чего его хэндлер вызывает menu2. menu2 получает все тот же самый player_steamid. При выборе любого пунка в menu2, оно закрывается и открывается вновь, и опять же player_steamid есть и известен при каждом вызове.

При нажатии кнопки Назад, происходит вызов menu1 с тем же параметром player_steamid, но дело в том, что в данном случае, строка player_stemid теряется и menu1 загружается с параметрами (i,"рандомные_символы").

Очень не нравится эта проблема, мешающая построению красивых многоуровневых меню.


Сообщение отредактировал ЙОДА - Пятница, 06.07.2012, 20:57:57
 
Scarface_slv Дата: Пятница, 06.07.2012, 16:16:56 | Сообщение # 2
Сообщений: 738
Репутация: 61 [ +/- ]
а сохранять его в глобальной переменной не пробывал?
 
ЙОДА Дата: Пятница, 06.07.2012, 17:14:36 | Сообщение # 3
Сообщений: 41
Репутация: 0 [ +/- ]
Попробовать то можно, но глупо ради одного меню, в котором сидит злой бобёр, создавать лишний массив строк.

Добавлено (06.07.2012, 16:36:34)
---------------------------------------------
Ведь ошибки в коде я не вижу, а значит есть какая-то бяка, про которую знает только вэсэшечка, который сидит и смеется надо мной)

Добавлено (06.07.2012, 17:14:36)
---------------------------------------------
Глупый бобёр крадет мою хорошенькую переменную и забивает её каким-то калом plach

 
_wS_ Дата: Пятница, 06.07.2012, 21:36:13 | Сообщение # 4
Ничего никто не крадет (в след раз, если столько кода, прикрепляй файл, неприятно поправлять отступы)

Прикрепления: test.zip(0.6 Kb)
 
ЙОДА Дата: Пятница, 06.07.2012, 22:06:49 | Сообщение # 5
Сообщений: 41
Репутация: 0 [ +/- ]
хм, а что такое #pragma semicolon 1 ?
 
_wS_ Дата: Пятница, 06.07.2012, 22:19:14 | Сообщение # 6
 
ЙОДА Дата: Пятница, 06.07.2012, 22:33:10 | Сообщение # 7
Сообщений: 41
Репутация: 0 [ +/- ]
Окей ;)
 
Форум » SourceMod >> CS:Source >> CSGO » Обсуждение » Неадекватное меню (Злой и противный бобер, похищающий мои переменные)
  • Страница 1 из 1
  • 1
Поиск: