Thursday, June 5, 2014

Using XVars - sử dụng XVars


XVars là gì ?
XVars là biến công cộng có thể được truy cập qua các plugin.
Chúng hoạt động và trông giống như các biến bình thường bên trong các plugin tạo ra chúng, nhưng phải được truy cập một cách khác nhau trong các plugin khác.


Mục đích:

XVars should be used instead of CVars when the variables need to be private to the plugins.
XVars cannot be changed from the server console or by any existing command unless a plugin is made for that purpose.
It basically provides security to variables.

If you have dynamic natives who's purpose is to only share a variable between plugins, XVars should be used instead.
Dynamic natives are a bit slower than using XVars (see Connor's post).


Tạo:

Khi tạo XVars, chúng cần phải global và Public.
Điều này có nghĩa là chúng không nên được bên trong bất kỳ hàm khi tạo ra và phải được bắt đầu bằng Public thay vì New hoặc Stock.

Ví Dụ:
Code:
public ExampleXvarVariable; public bool:ExampleXvarBoolean = true; public Float:ExampleXvarFloat = 3.14;
Bên trong các plugin đã tạo ra chúng, họ làm việc giống như các biến bình thường.
Gán các giá trị và truy cập các giá trị hoạt động giống như vậy.

XVars chỉ hoạt động với integers, floats, bools, etc.
Arrays (vvv) không thể sử dụng với XVars.


Cross-Plugin:

Khi truy cập XVars từ plugin khác, bạn phải sử dụng natives cụ thể.

Trước tiên, bạn cần phải nhận được định danh duy nhất của xVar:
Code:
new g_pExampleXvarVariable; new g_pExampleXvarBoolean; new g_pExampleXvarFloat; public plugin_init( ) {     // nhận được định danh duy nhất của XVar's và lưu trữ để sử dụng trong suốt Plugin     g_pExampleXvarVariable = get_xvar_id( "ExampleXvarVariable" );         // Kiểm tra nếu XVar hợp lệ     if( g_pExampleXvarVariable == -1 )     {         set_fail_state( "XVar did not exist: ExampleXvarVariable" );     }         // Lặp lại trên 2 XVar Khác }

Nếu bạn chỉ quan tâm đến việc kiểm tra nếu xVar là hợp lệ, bạn có thể làm điều này:
Code:
public plugin_init( ) {     // kiểm tra nếu Xvar hợp lệ     if( !xvar_exists( "ExampleXvarVariable" ) )     {         set_fail_state( "XVar did not exist: ExampleXvarVariable" );     }         // Lặp lại trên 2 XVar Khác }

Để truy cập giá trị của một xVar, bạn có thể sử dụng hai natives:
Code:
// Lấy giá trị Integer new iValue = get_xvar_num( g_pExampleXvarVariable ); // Lấy giá trị Boolean new bool:bValue = bool:get_xvar_num( g_pExampleXvarBoolean ); // Lấy giá trị float new Float:flValue = get_xvar_float( g_pExampleXvarFloat );

Để thiết lập giá trị của một xVar, bạn có thể sử dụng hai natives:
Code:
// thiết lập giá trị Integer set_xvar_num( g_pExampleXvarVariable, 10 ); // thiết lập giá trị boolean set_xvar_num( g_pExampelXvarBoolean, false ); // thiết lập giá trị float set_xvar_float( g_pExampleXvarFloat, 19.6 );

Để biết thêm thông tin. đọc funcwiki.

Lưu ý: Các plugin tạo ra các biến không phải là trên các plugin khác được truy cập vào các biến trong plugins.ini.


Sao chép:

Plugin có thể có các biến công cộng cùng mà không có lỗi biên dịch hoặc lỗi thời gian chạy.
Tác động duy nhất vào đây là nơi mà các giá trị đang được thay đổi / lấy.
Plugin đầu tiên tạo ra các biến công cộng là plugin sẽ bị ảnh hưởng bởi giá trị của nó và sẽ gửi giá trị cho các plugin khác withget_xvar_ * ().

Đây là một ví dụ:
Code:
// This is plugin #1 in the plugins.ini #include < amxmodx > public DisplayRoundMessage; public plugin_init( ) {     register_plugin( "New Round Display", "0.0.1", "Exolent" );         register_event( "HLTV", "EventNewRound", "a", "1=0", "2=0" ); } public EventNewRound( ) {     if( DisplayRoundMessage )     {         client_print( 0, print_chat, "A new round has started!" );     } }
Code:
// This is plugin #2 in the plugins.ini #include < amxmodx > public DisplayRoundMessage; public plugin_init( ) {     register_plugin( "New Round Display", "0.0.1", "Exolent" );         register_event( "HLTV", "EventNewRound", "a", "1=0", "2=0" ); } public EventNewRound( ) {     if( DisplayRoundMessage )     {         client_print( 0, print_chat, "A new round has started!" );     } }
Vâng, họ là cùng một plugin do đó, nó là một ví dụ yếu kém, nhưng nó được ý tưởng trên.
Được rồi, do đó, các plugin có 2 biến công tương tự.
Nếu chúng ta có plugin này:

Code:
#include < amxmodx > public plugin_init( ) {     register_plugin( "New Round Display Enabler", "0.0.1", "Exolent" );         new pDisplayRoundMessage = get_xvar_id( "DisplayRoundMessage" );         if( pDisplayRoundMessage != -1 )     {         set_xvar_num( pDisplayRoundMessage, 1 );     } }
Điều này sẽ chỉ ảnh ​​hưởng đến biến các plugin đầu tiên và các plugin thứ hai sẽ vẫn không hiển thị thông báo.



Ghi chú thêm:

Các tập tin thử nghiệm của tôi có thể được sử dụng nếu bạn cần bất kỳ sự hiểu biết hơn về cách thức họ làm việc. 
xvar_holder.sma là trên xvar_finder.sma trong plugins.ini. 
Các lệnh mà bắt chước người bản địa yêu cầu các đối số đó, chỉ cần ở định dạng lệnh. 
Ví dụ: get_xvar_id1 "SomeXvarVariable" 

Tất cả các thông tin phản hồi và đề nghị được hoan nghênh.

0 nhận xét:

Post a Comment