Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

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

  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Проблема с меню.
Sunday Дата: Вторник, 29.01.2013, 22:17:15 | Сообщение # 1
Сообщений: 186
Репутация: 24 [ +/- ]
Mapige плагин для админов.

Парни, я пишу плагин и возникла такой вопрос с меню, у меня есть список, внутри он выглядит как мапцикл (список карт). Я его прочитываю и передаю в меню, далее я хочу сделать, когда админ нажимает на название карты в списке то переходит в подменю, там появляется кнопка "Продолжить" и в этот момент на экране у админа выводиться картинка с этой картой, все картинки находятся по адресу matireals/mapige, с точно такими же названиями как карты. Если он нажимает кнопку "Продолжить" то картинка отключается и карта меняется, если жмёт "Назад" то он возвращается в предыдущий пункт в котором остановился на выборе карт и картинка отключается.

Не получается сделать:

*******************************************************************
1. Передачу %s в установку картинке, к примеру:
статично Вот так работает: SetOverlay(client, "mapige/dm_dust");
А так, нет: SetOverlay(client, "mapige/%s", info[client]);
не получается передать название на установку изображения выбранного пункта имени карты...

Решение:
Цитата
decl String:format[70];
Format(format, sizeof(format), "mapige/%s", info);
SetOverlay(client, format);


Спасибо Scarface_slv.
*******************************************************************

Сделанно:
1. Осуществил загрузку картинок из дирректории.
2. Осуществил автозаполнение списка из папки с картинками, плагин смотрит и выбирает только vtf файлы и их названия которые точно такие же как и названия карт и заполняет их в список mapige.txt в корневом каталоге.

Остался в принципе это и еще пару мелочей но над этим уже третий день бьюсь и вот решил написать на форум. Я знаю что в приложенном скрипте ниже много косяков и он далек от истенны но он отображает ход мысли, парни уповаю на вашу помощь. Ниже скрипт:

Код

#include <sourcemod>
#include <sdktools>
#include <smlib>

public OnPluginStart()
{
           RegAdminCmd("sm_mapige", ConsoleCmd, ADMFLAG_GENERIC);
}

public Action:ConsoleCmd(client, args)
{
           new Handle:file = OpenFile("mapigelist.txt", "rt");
           new Handle:menu = CreateMenu(MenuHandler1);
           new String:mapname[255];
           while (!IsEndOfFile(file) && ReadFileLine(file, mapname, sizeof(mapname)))
           {
            if (mapname[0] == ';' || !IsCharAlpha(mapname[0]))
            {
             continue;
            }
            new len = strlen(mapname);
            for (new i=0; i<len; i++)
            {
             if (IsCharSpace(mapname[i]))
             {
              mapname[i] = '\0';
              break;
             }
            }
            AddMenuItem(menu, mapname, mapname);
           }
           CloseHandle(file);
           SetMenuTitle(menu, "Выберите карту:");

           SetMenuExitButton(menu, true);
           SetMenuExitBackButton(menu, false);
           DisplayMenu(menu, client, 0);
           return Plugin_Handled;
}

public MenuHandler1(Handle:menu, MenuAction:action, client, param2)
{
           if (action == MenuAction_Select)
           {
            new String:info[64];
            GetMenuItem(menu, param2, info, sizeof(info));

            if(strcmp(info, "%s") == client)
            {
             new Handle:imagemenu = CreateMenu(MenuHandler2);
             SetMenuTitle(imagemenu, "Продолжить?");

             SetOverlay(client, "mapige/dm_runoff"); // тут не получается добавить имя карты которую выбрал что бы установить ее картинку.

             AddMenuItem(imagemenu, "changemap", "Продолжить");

             SetMenuExitBackButton(imagemenu, true);
             DisplayMenu(imagemenu, client, 0);
             PrintToChat(client, "Меню продолжить: %s", info)
            }
           }
}

public MenuHandler2(Handle:menu, MenuAction:action, client, param2)
{
           if (action == MenuAction_Select)
           {
            new String:info[32];
            new bool:found = GetMenuItem(menu, param2, info, sizeof(info));
            PrintToConsole(client, "Вы выбрали: %d (found? %d info: %s)", param2, found, info);
            ServerCommand("changelevel %s", info);
           }
}

/* Устанавливаем Изображение Карты */
stock SetOverlay(client, String:overlay[])
{
           Client_SetScreenOverlay(client, overlay);
}

/* Выключаем Рисунок Карты, функция будет активироваться клавишей в меню "Назад" и так же если Админ активирует "Продолжить" */
public Action:ResetOverlay(Handle:timer, any:client)
{
           if(Client_IsIngame(client) && Client_IsValid(client))
           {
            Client_SetScreenOverlay(client, "");
           }
}



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


Сообщение отредактировал Sunday - Вторник, 29.01.2013, 23:10:00
 
Scarface_slv Дата: Вторник, 29.01.2013, 22:29:05 | Сообщение # 2
Сообщений: 737
Репутация: 61 [ +/- ]
Цитата (Sunday)
А так, нет: SetOverlay(client, "mapige/%s", info[client]);

а так ты пробывал SetOverlay(client, "mapige/%s", info);
 
Sunday Дата: Вторник, 29.01.2013, 22:32:05 | Сообщение # 3
Сообщений: 186
Репутация: 24 [ +/- ]
Цитата (Scarface_slv)
ЦитатаSunday писал(а):
А так, нет: SetOverlay(client, "mapige/%s", info[client]);

а так ты пробывал SetOverlay(client, "mapige/%s", info);


да! и выводит вот эту ошибку:
mapige_menu_0.9.sp(55) : error 092: number of arguments does not match definition
Количество параметров (аргументов) не совпадает с объявленными в функции


Сообщение отредактировал Sunday - Вторник, 29.01.2013, 22:32:48
 
Scarface_slv Дата: Вторник, 29.01.2013, 22:34:24 | Сообщение # 4
Сообщений: 737
Репутация: 61 [ +/- ]
Через format попробуй
decl String:format[70];
Format(format, sizeof(format), "mapige/%s", info);
SetOverlay(client, format);
 
Sunday Дата: Вторник, 29.01.2013, 22:39:51 | Сообщение # 5
Сообщений: 186
Репутация: 24 [ +/- ]
сейчас
Цитата (Scarface_slv)
Через format попробуй
decl String:format[70];
Format(format, sizeof(format), "mapige/%s", info);
SetOverlay(client, format);


Спасибо Scarface_slv, сейчас попробую!

Добавлено (29.01.2013, 22:39:51)
---------------------------------------------
Scarface_slv Получилось, что бы я без Вас делал!!! Осталось только передать название карты в ServerCommand("changelevel %s", info); после нажатия кнопки "Продолжить". Как можно это осуществить?


Сообщение отредактировал Sunday - Вторник, 29.01.2013, 22:43:05
 
Scarface_slv Дата: Вторник, 29.01.2013, 22:42:56 | Сообщение # 6
Сообщений: 737
Репутация: 61 [ +/- ]
Так же попробуй через format
 
Meow_1337 Дата: Вторник, 29.01.2013, 22:43:11 | Сообщение # 7
Сообщений: 207
Репутация: 11 [ +/- ]
Sunday, поделись таким замечательным плагином :3
 
Scarface_slv Дата: Вторник, 29.01.2013, 22:50:46 | Сообщение # 8
Сообщений: 737
Репутация: 61 [ +/- ]
Он же кинул код в первом посте
 
Sunday Дата: Вторник, 29.01.2013, 22:57:20 | Сообщение # 9
Сообщений: 186
Репутация: 24 [ +/- ]
Цитата (Meow_1337)
Sunday, поделись таким замечательным плагином :3


Парни, разумеется я им поделюсь со всеми Вами и плагин будет под логотипом http://world-source.ru, тем более форум для меня стал уже вторым домом. Надо только закончить начатое и довести до ума и он сразу отправиться в раздел "Плагины от пользователей" и будет только у нас на форуме :)

Добавлено (29.01.2013, 22:52:33)
---------------------------------------------
Цитата (Scarface_slv)
Он же кинул код в первом посте


в первом посте один из трех кодов. это код меню.

Добавлено (29.01.2013, 22:57:20)
---------------------------------------------
Код
public MenuHandler2(Handle:menu, MenuAction:action, client, param2)
{
     if (action == MenuAction_Select)
     {
      new String:info[64];
      // new bool:found = GetMenuItem(menu, param2, info, sizeof(info));
      decl String:format[70];     
      Format(format, sizeof(format), "%s", info);     
      ServerCommand("changelevel %s", format);
     }
}


Выводит в консоль: changelevel <lvelname> : continue game on a new level.

и дальше тишина, Парни в чем может быть проблема? приложил скрипт.

Гости не могут скачивать файлы


Сообщение отредактировал Sunday - Вторник, 29.01.2013, 23:00:16
 
Scarface_slv Дата: Вторник, 29.01.2013, 23:11:10 | Сообщение # 10
Сообщений: 737
Репутация: 61 [ +/- ]
decl String:format[70];
Format(format, sizeof(format), "changelevel %s", info);
ServerCommand(format);
 
Sunday Дата: Вторник, 29.01.2013, 23:15:32 | Сообщение # 11
Сообщений: 186
Репутация: 24 [ +/- ]
Цитата (Scarface_slv)
decl String:format[70];
Format(format, sizeof(format), "changelevel %s", info);
ServerCommand(format);


Спасибо Scarface_slv, непонятно из за чего но все равно выводит в консоль: changelevel <lvelname> : continue game on a new level.

может что то не правильно в AddMenuItem(imagemenu, "changemap", "Продолжить"); ?

Код
public MenuHandler1(Handle:menu, MenuAction:action, client, param2)
{
  if (action == MenuAction_Select)
  {
   new String:info[64];
   GetMenuItem(menu, param2, info, sizeof(info));

   if(strcmp(info, "%s") == client)
   {
    new Handle:imagemenu = CreateMenu(MenuHandler2);
    SetMenuTitle(imagemenu, "Продолжить?");

    decl String:format[70];  
    Format(format, sizeof(format), "mapige/%s", info);  
    SetOverlay(client, format);

    AddMenuItem(imagemenu, "changemap", "Продолжить");

    SetMenuExitBackButton(imagemenu, true);
    DisplayMenu(imagemenu, client, 0);
   }
  }
}

public MenuHandler2(Handle:menu, MenuAction:action, client, param2)
{
  if (action == MenuAction_Select)
  {
   new String:info[64];
   decl String:format[70];  
   Format(format, sizeof(format), "changelevel %s", info);  
   ServerCommand(format);
  }
}


Сообщение отредактировал Sunday - Вторник, 29.01.2013, 23:16:02
 
Scarface_slv Дата: Вторник, 29.01.2013, 23:26:21 | Сообщение # 12
Сообщений: 737
Репутация: 61 [ +/- ]
Код

public MenuHandler1(Handle:menu, MenuAction:action, client, param2)
{
    if (action == MenuAction_Select)
    {
     new String:info[64];
     GetMenuItem(menu, param2, info, sizeof(info));
     new Handle:imagemenu = CreateMenu(MenuHandler2);
     SetMenuTitle(imagemenu, "Продолжить?");
     decl String:format[70];    
     Format(format, sizeof(format), "mapige/%s", info);    
     SetOverlay(client, format);
     AddMenuItem(imagemenu, info, "Продолжить");
     SetMenuExitBackButton(imagemenu, true);
     DisplayMenu(imagemenu, client, 0);
    }
}

public MenuHandler2(Handle:menu, MenuAction:action, client, param2)
{
    if (action == MenuAction_Select)
    {
     decl String:info[64];
     GetMenuItem(menu, param2, info, sizeof(info));
     decl String:format[70];    
     Format(format, sizeof(format), "changelevel %s", info);    
     ServerCommand(format);
    }
}

забыл про формат


Сообщение отредактировал Scarface_slv - Вторник, 29.01.2013, 23:32:53
 
Sunday Дата: Вторник, 29.01.2013, 23:45:29 | Сообщение # 13
Сообщений: 186
Репутация: 24 [ +/- ]
Цитата (Scarface_slv)
public MenuHandler1(Handle:menu, MenuAction:action, client, param2)
{
if (action == MenuAction_Select)
{
new String:info[64];
GetMenuItem(menu, param2, info, sizeof(info));
new Handle:imagemenu = CreateMenu(MenuHandler2);
SetMenuTitle(imagemenu, "Продолжить?");
decl String:format[70];
Format(format, sizeof(format), "mapige/%s", info);
SetOverlay(client, format);
AddMenuItem(imagemenu, info, "Продолжить");
SetMenuExitBackButton(imagemenu, true);
DisplayMenu(imagemenu, client, 0);
}
}

public MenuHandler2(Handle:menu, MenuAction:action, client, param2)
{
if (action == MenuAction_Select)
{
decl String:info[64];
GetMenuItem(menu, param2, info, sizeof(info));
decl String:format[70];
Format(format, sizeof(format), "%s", info);
ServerCommand("changelevel %s", format);
}
}


Scarface_slv Работает, что бы я без Вас делал, вы меня уже в который раз выручает, в авторах плагина Ваше имя будет сиять ярким пламенем klas ! Осталось только сделать когда жмешь "Назад" то возвращалось в список раздела выбора карт на котором остановился, и выболняется вот этот скрипт который уже есть в коде, он убивает изображение:

Код
public Action:ResetOverlay(Handle:timer, any:client)
{
   if(Client_IsIngame(client) && Client_IsValid(client))
   {
    Client_SetScreenOverlay(client, "");
   }
}

если Вас не затруднит с этим помочь? Остальным, проверками на Валидность файлов и прочих вещей я сейчас буду заниматься! У меня просто жуткая проблема, я еще плохо изучил литературу по меню, боюсь что я опять попаду в ступор с этим.


Сообщение отредактировал Sunday - Вторник, 29.01.2013, 23:50:26
 
Scarface_slv Дата: Вторник, 29.01.2013, 23:51:03 | Сообщение # 14
Сообщений: 737
Репутация: 61 [ +/- ]
добавь в начало блока public MenuHandler1 это
Код

if (action == MenuAction_Cancel)
{
      if (option == MenuCancel_ExitBack)
      {
          CreateTimer(0.1, ResetOverlay, client);
          ConsoleCmd(client, 0);
      }
}

думаю так уберет оверлей если нажать назад


Сообщение отредактировал Scarface_slv - Вторник, 29.01.2013, 23:54:48
 
Sunday Дата: Среда, 30.01.2013, 00:01:13 | Сообщение # 15
Сообщений: 186
Репутация: 24 [ +/- ]
Цитата (Scarface_slv)
добавь в начало блока public MenuHandler1 это
if (action == MenuAction_Cancel)
{
if (option == MenuCancel_ExitBack) ConsoleCmd(client, 0);
}


Код
public MenuHandler1(Handle:menu, MenuAction:action, client, param2)
{
   if (action == MenuAction_Cancel)   
   {   
    if (option == MenuCancel_ExitBack) ConsoleCmd(client, 0);   
   }

   if (action == MenuAction_Select)
   {
    new String:info[64];
    GetMenuItem(menu, param2, info, sizeof(info));
    new Handle:imagemenu = CreateMenu(MenuHandler2);
    SetMenuTitle(imagemenu, "Продолжить?");
    decl String:format[70];
    Format(format, sizeof(format), "mapige/%s", info);
    SetOverlay(client, format);
    AddMenuItem(imagemenu, info, "Продолжить");
    SetMenuExitBackButton(imagemenu, true);
    DisplayMenu(imagemenu, client, 0);
   }
}


Спасибо Scarface_slv, Выводит: mapige_menu_1.0.sp(48) : error 017: undefined symbol "option". Я так понимаю , его нужно добавить в обработчик как Handle:option?


Сообщение отредактировал Sunday - Среда, 30.01.2013, 00:02:26
 
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: