Using New Menu System
Contents[hide] |
Beginners Menu Tutorial
Bây giờ cho phép thảo luận về cách sử dụng hệ thống menu mới. Chúng tôi sẽ đi qua những điều cơ bản trong hướng dẫn này và làm cho một cuộc bỏ phiếu Change Level đơn giản.
Includes - Khai Baos
Như mọi khi, chúng tôi sẽ bắt đầu bằng cách thêm các thư viện cần thiết
#include <amxmodx>
Biến Global
new g_Menu; // Xử lý Menu chính new g_Votes[3]; // Lưu trữ Có bình chọn 1, Không có ở 2
Ở đây chúng tôi tạo ra 2 biến Global. Một tổ chức xử lý đơn của chúng tôi, và khác để lưu trữ phiếu bầu Menu của chúng tôi. Bình chọn của 'Có' sẽ được lưu trữ trong g_Votes [1] và 'Không' bình chọn sẽ được lưu trữ trong g_Votes [2].
Registering Plugin and Menu
public plugin_init()
{
// Đăng ký Plugin của chúng tôi
register_plugin("Vote Menu","1.0","Freecode");
// Đăng ký menu của chúng tôi
g_Menu = menu_create("Change Level?","menu_handle");
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");
// Bây giờ thì xây dựng menu của chúng tôi
build_menu();
}
Giải thích một số chức năng:
- Đăng ký plugin
register_plugin("Vote Menu","1.0","Freecode");
- g_Menu - Handle Menu của chúng tôi. Nó sẽ được thiết lập sau khi menu_create được gọi.
g_Menu = menu_create("Change Level?","menu_handle");
//menu_create ( title[], handler[], ml=0 )
//title[] - Tiêu đề menu
//handler[] - Đây là hàm sẽ được gọi khi ai đó nhấn mộ phím trên menu của bạn
- Chúng tôi thực hiện lệnh của khách hàng này vì vậy chúng tôi có thể bắt đầu bình chọn của chúng tôi.
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");
- Đây là một cuộc gọi hàm. build_menu () chức năng sẽ xây dựng Menu bình chọn của chúng tôi.
build_menu();
Xây dựng menu
Xây dựng thực đơn chỉ là thêm các mục cần thiết để thực đơn của bạn. Trước khi chúng tôi đi trước với việc thêm các mặt hàng chúng ta phải nhìn vào bản địa menu_additem.
menu_additem ( menu, const name[], const command[], paccess=0, callback=-1 )
- menu - Menu Handle. Điều này cho menu_additem menu mà chúng tôi có thêm mục của chúng tôi.
- const name[] -tên mục. Đây là những gì được hiển thị vào menu.
- const command[] - thông tin item
Bây giờ cho phép được vào xây dựng Menu của chúng tôi. Như đã nói, đây là một cuộc bỏ phiếu đơn giản cho một thay đổi của Level. Vì vậy, chúng tôi sẽ chỉ cần 2 mục. "Có" và "Không".
build_menu()
{
menu_additem(g_Menu, "Yes", "1");
menu_additem(g_Menu, "No", "2");
menu_setprop(g_Menu, MPROP_PERPAGE, 0);
}
- Ghi chú
- Như bạn có thể thấy tôi đặt lệnh const [] để số. Này là để chúng ta xác định các mục dễ dàng hơn.
- Tôi cũng đã thêm menu_setprop. Điều này đặt ra Menu của chúng tôi không có trang. Cho các thuộc tính bổ sung nhìn vào newmenus.inc
Hiển thị Vote menu
Để hiển thị menu của chúng tôi, chúng tôi chỉ đơn giản là phải sử dụng menu_display.
menu_display ( id, menu, page )
- id - id của người sử dụng Menu hiển thị của bạn.
- menu - mà Menu được bạn hiển thị người sử dụng.
- page - những gì trang (menu) để bắt đầu vào. Trang của trình đơn bắt đầu từ 0.
Ok cho phép tiến hành mã của chúng tôi.
public startvote(id)
{
for(new i = 0; i < 33; i++)
{
if( is_user_alive(i) )
{
menu_display(i, g_Menu, 0);
}
}
return PLUGIN_HANDLED;
}
- Ghi chú:
- The for loop is used to cycle through players and display the menu to players that are alive.
Xử lý menu Lựa chọn
Bước cuối cùng là actualy xử lý các lựa chọn menu. Điều này xảy ra thông qua chức năng xử lý Menu. Nó sẽ được gọi là một lần một người nào đó chọn một mục ra khỏi thực đơn. Có 3 biến được truyền cho hàm.
- id - id của người chơi
- menu - menu người sử dụng đã mở
- item - và item người sử dụng chọn
Hiện nay có một vài trong số các mặt hàng đặc biệt như mục Exit.
#define MENU_EXIT -3
#define MENU_BACK -2
#define MENU_MORE -1
Vì vậy, chúng ta phải kiểm tra lúc đầu nếu các mặt hàng được lựa chọn không phải là một trong những người đặc biệt. Lưu ý rằng các mục đặc biệt duy nhất có thể gây ra xử lý của bạn được gọi là là MENU_EXIT, bởi vì MENU_BACK và MENU_MORE mục được hoàn toàn xử lý lõi amxx (bạn không thể treo chúng).
if( item < 0 ) return PLUGIN_CONTINUE;
Tiếp theo chúng ta phải lấy thông tin sản phẩm. Những gì chúng tôi đang tìm kiếm các số chúng tôi đã được những món đồ (Có = 1, Không = 2). Và để làm được điều này chúng tôi sử dụng menu_item_getinfo.
menu_item_getinfo ( menu, item, &access, command[], cmdlen, name[]="", namelen=0, &callback )
- menu - menu nơi mục tồn tại.
- item -mục chính
- &access - (chỉnh sửa)
- command[] - (chỉnh sửa)(đây là nơi mà chúng tôi lưu trữ mã số hàng của chúng tôi)
- cmdlen - chiều dài của command[]
- name[] - tên của items
- namelen - chiều dài của name[]
- &callback - (chỉnh sửa)
Sau khi chúng tôi nhận được thông tin các mục của chúng tôi, chúng tôi sẽ chuyển đổi các command [] với một số (hoặc sẽ là một 1 hoặc 2) và cập nhật các mảng g_Votes có phiếu thích hợp được lựa chọn. Đây là hàm Handle thành của chúng tôi:
public menu_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
// Get item info
new cmd[3];
new access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new iChoice = str_to_num(cmd);
g_Votes[iChoice]++;
return PLUGIN_HANDLED;
}
Fenito
Cuối. Bạn đã hoàn thành menu Hướng dẫn của người mới bắt đầu. Sử dụng hệ thống menu mới, chúng tôi có quyền kiểm soát nhiều hơn đối với menu. Trong hướng dẫn sau, bạn sẽ thấy cách mạnh mẽ hệ thống menu mới. Việc sử dụng callback và phá hủy và tạo các menu. Đây là mã hoàn thành sau khi trình đơn.
#include <amxmodx>
new g_Menu; // Main Menu handler
new g_Votes[3]; // Store Yes votes at 1, No at 2
public plugin_init()
{
// Register Our Plugin
register_plugin("Vote Menu","1.0","Freecode");
// Register our Change Level vote menu
g_Menu = menu_create("Change Level?","menu_handle");
register_clcmd("amx_startvote","startvote",ADMIN_CFG,"Gaben");
// Now we need to build our menu
build_menu();
}
build_menu()
{
menu_additem(g_Menu, "Yes", "1");
menu_additem(g_Menu, "No", "2");
menu_setprop(g_Menu, MPROP_PERPAGE, 0);
}
public startvote(id)
{
for(new i = 0; i < 33; i++)
{
if( is_user_alive(i) )
{
menu_display(i, g_Menu, 0);
}
}
return PLUGIN_HANDLED;
}
public menu_handle(id, menu, item)
{
if( item < 0 ) return PLUGIN_CONTINUE;
// Get item info
new cmd[3];
new access, callback;
menu_item_getinfo(menu, item, access, cmd,2,_,_, callback);
new iChoice = str_to_num(cmd);
g_Votes[iChoice]++;
return PLUGIN_HANDLED;
}
0 nhận xét:
Post a Comment