[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Добавление Категорий/Опций в SourceMod Админку (Взято с world-source.ru)
Добавление Категорий/Опций в SourceMod Админку
rootДата: Воскресенье, 03.02.2013, 00:59 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 561
Статус: Offline
Добавление Категорий/Опций в SourceMod Админку 

Даю код для примера с комментариями (скачайте архив в прикреплениях) : 

Код
#pragma semicolon 1  

#include <sourcemod>  
#undef REQUIRE_PLUGIN  
#include <adminmenu>  

new Handle:g_TopMenu = INVALID_HANDLE;    // для хранения Handle главного меню  
new TopMenuObject:g_SpecObject;   // храним 'Object' опции "Переместить себя в SPEC"  

public OnPluginStart()  
{  
      // Если библиотека "adminmenu" найдена, вызываем функцию "OnAdminMenuReady"  
      // В качестве параметра передаем Handle главного админ-меню (еще не известно, есть ли оно)  
      if (LibraryExists("adminmenu")) OnAdminMenuReady(GetAdminTopMenu());  
}  

// Это событие вызывается плагином adminmenu.sp после того, как было создано главное админ-меню  
public OnAdminMenuReady(Handle:topmenu)  
{  
      // Если вдруг админ-меню нет, или событие вызывается второй раз, то ничего не делаем  
      if (topmenu == INVALID_HANDLE || topmenu == g_TopMenu) return;  

      // Сохраняем Handle главного админ-меню в нашей глобальной переменной  
      g_TopMenu = topmenu;  

      // Если в меню ещё нет нашей категории, то создаем её  
      new TopMenuObject:MyCat = FindTopMenuCategory(g_TopMenu, "MyNewCategory");  
      if (MyCat == INVALID_TOPMENUOBJECT)  
      {  
          MyCat = AddToTopMenu(g_TopMenu, "MyNewCategory", TopMenuObject_Category, MyNewCategory_CallBack, INVALID_TOPMENUOBJECT);  
      }  

      // Добавляем опцию в нашу категорию (доступ имеют админы с флагом кик)  
      g_SpecObject = AddToTopMenu(g_TopMenu, "wS_Spec", TopMenuObject_Item, wS_CallBack, MyCat, "sm_kick", ADMFLAG_KICK);  
}  

public MyNewCategory_CallBack(Handle:topmenu, TopMenuAction:action, TopMenuObject:object_id, param, String:buffer[], maxlength)  
{  
      // Текст нашей категории в главном меню  
      if (action == TopMenuAction_DisplayOption) Format(buffer, maxlength, "МОЯ КАТЕГОРИЯ");  

      // Заглавие меню, которое откроется после выбора категории  
      else if (action == TopMenuAction_DisplayTitle) Format(buffer, maxlength, "Выберите действие:");  
}  

public wS_CallBack(Handle:topmenu, TopMenuAction:action, TopMenuObject:object_id, param, String:buffer[], maxlength)  
{  
      // Устанавливаем текст опции  
      if (action == TopMenuAction_DisplayOption) Format(buffer, maxlength, "Переместить себя в SPEC");  

      // Если игрок выбрал опцию  
      else if (action == TopMenuAction_SelectOption)  
      {  
          // Если это опция "Переместить себя в SPEC"  
          if (object_id == g_SpecObject)  
          {  
              if (GetClientTeam(param) > 1) ChangeClientTeam(param, 1);  
              else PrintToChat(param, "Вы и так в SPEC..");  
          }  

          if (g_TopMenu != INVALID_HANDLE) DisplayTopMenu(g_TopMenu, param, TopMenuPosition_LastCategory);  
          else PrintToChat(param, "Библиотека \"adminmenu\" не найдена");  
      }  
}  

public OnLibraryRemoved(const String:name[])  
{  
      // Если вдруг библиотека "adminmenu" удалилась, то очищаем переменную g_TopMenu  
      if (StrEqual(name, "adminmenu")) g_TopMenu = INVALID_HANDLE;  
}

AddToTopMenu(1, 2, 3, 4, 5, [6], [7], [8]) - добавляет категорию или опцию и возвращает ее TopMenuObject: 

Код
1 - Handle главного админ-меню  
2 - уникальное имя для категории/опции  
3 - TopMenuObject_Category (категория), TopMenuObject_Item (опция в категории)  
4 - функция, которая будет вызвана  
5 - если это опция, укажите здесь TopMenuObject: категории. Если категория, то INVALID_TOPMENUOBJECT  
6 - имя (название) команды для проверки доступа (не обязательно)  
7 - флаг для доступа к категории/опции (не обязательно)  
8 - какой-то текст, если вам нужно сохранить его здесь (не обязательно)

TopMenuAction 

Код
TopMenuAction_DisplayOption  
TopMenuAction_DisplayTitle  
TopMenuAction_SelectOption  
TopMenuAction_DrawOption  
TopMenuAction_RemoveObject

TopMenuObjectType 

Код
TopMenuObject_Category  
TopMenuObject_Item

TopMenuPosition 

Код
TopMenuPosition_Start - главное меню  
TopMenuPosition_LastRoot - Последняя позиция в главном меню  
TopMenuPosition_LastCategory - Последняя позиция в последней категории

TopMenuObject 

Код
INVALID_TOPMENUOBJECT

menu.zip(1.5 Kb)
 
Форум » Форум » Уроки SourceMod (SourcePawn) Скриптинга » Добавление Категорий/Опций в SourceMod Админку (Взято с world-source.ru)
  • Страница 1 из 1
  • 1
Поиск: