Thursday, June 5, 2014

CVar - Cách sử dụng CVar


CVARs
Hướng dẫn này nhanh chóng sẽ cho bạn thấy những gì họ đang có và cách chúng hoạt động.

Dưới đây là một danh sách lớn của cvars: http://scripting.elxdraco.net/cvarlist/

Chúng là gì?

Bạn có thể nghĩ về chúng như (loại) biến toàn cầu. Bạn có thể lấy giá trị của chúng, thiết lập giá trị mới, và cũng tạo ra cvars mới. Chúng khác nhau từ biến toàn cục thực tế, bởi vì bạn có thể thay đổi các giá trị cvar từ console.
Đơn giản thì cái này là khi bạn bật console lên bạn gõ một dòng gì đó và nó xuất hiện bên dưới cùng với giá trị của nó và bạn có thể thay đổi giá trị của nó.
Cách sử dụng

Bạn có thể lưu trữ tất cả các loại công cụ trong cvars của bạn. Thông thường, chúng được sử dụng để kiểm soát plugins, biến chúng bật / tắt, hoặc để chứa dữ liệu tạm thời. Bạn có thể sử dụng những lá cờ được liệt kê dưới đây để thay đổi hành vi của cvars.

Nếu bạn sẽ đọc các giá trị cvar sau này trong kịch bản của bạn, sử dụng con trỏ.

Sử dụng get_pcvar_flagsget_pcvar_floatget_pcvar_num, or get_pcvar_string.
Không dùng get_cvar_flagsget_cvar_floatget_cvar_num, or get_cvar_string.

Code:
register_cvar ( const name[], const string[], flags = 0, Float:fvalue = 0.0 )

Tôi đã không tìm thấy bất kỳ ví dụ nơi fvalue được sử dụng, vì vậy xin vui lòng gửi nếu bạn biết những gì nó cho.

Ví dụ về cách sử dụng CVar: 

Code:
new cvar_MyCvar // Đây là một con trỏ new cvar_OtherCvar // Đây cũng là một con trỏ public plugin_init() {     //     cvar_MyCvar = register_cvar("amx_mycvar", "0")     //     cvar_OtherCvar = register_cvar("amx_other", "1", FCVAR_SPONLY|FCVAR_UNLOGGED) } public MyFunction() {     if(get_pcvar_num(cvar_MyCvar))         return 1     return 0 }

Làm thế nào để chúng hoạt động?

Code:
Order of Events:
1.Server is off  hlds.exe is not running
2.Server starts
3.plugin_init()  cvars are created
4.plugin_cfg()
5.amxx.cfg  cvars assigned values from amxx.cfg
6.server.cfg  cvars assigned values from server.cfg
7.Server restarts mapchange or 'restart' command
8.plugin_init()  cvars are NOT re-created or overwritten; if they exist, only pointers are gathered
9.plugin_cfg()
10.amxx.cfg  cvars assigned values from amxx.cfg (server.cfg is not called next)
Các hàm plugin_init () và plugin_cfg () được gọi là trên tất cả các bản đồ thay đổi, khởi động lại, và "tươi" bắt đầu. ("Tươi" bắt đầu có nghĩa là máy chủ bật sau khi được tắt.) Các tập tin amxx.cfg được đọc trên tất cả các bản đồ thay đổi, khởi động lại và "tươi" bắt đầu. File server.cfg là chỉ đọc trên "tươi" bắt đầu.

Khi bạn làm register_cvar ("cvar_name", "cvar_value"), bạn đang cố gắng để tạo ra một cvar mới với giá trị mặc định mới. Nếu cvar này đã tồn tại, hàm này sẽ không ghi đè lên các giá trị ban đầu. Thay vào đó, nó sẽ trả về một con trỏ đến cvar hiện tại mà bạn có thể truy cập sau đó withget_pcvar_flags, get_pcvar_float, get_pcvar_num, hoặc get_pcvar_string.

Để có được một con trỏ cho một cvar, sử dụng get_cvar_pointer ("cvarname").

CVAR flags

Điều này được lấy trực tiếp từ amxconst.inc:
FCVAR_ARCHIVE thiết lập để làm cho nó được lưu vào vars.rc
FCVAR_USERINFO thay đổi thông tin chuỗi của Client
FCVAR_SERVER thông báo cho người chơi khi thay đổi
FCVAR_EXTDLL xác định bởi DLL bên ngoài
FCVAR_CLIENTDLL xác định bởi dll khách hàng
FCVAR_PROTECTED Đó là một cvar máy chủ, nhưng chúng tôi không gửi dữ liệu vì nó là một mật khẩu, vv Gửi 1 nếu nó không nhạt nhẽo / zero, 0 nếu không như giá trị
FCVAR_SPONLY Cvar này không thể thay đổi của khách hàng kết nối với một máy chủ nhiều người chơi.
FCVAR_PRINTABLEONLY Chuỗi của cvar này không thể chứa các ký tự chưa in ra (ví dụ, sử dụng cho tên người chơi vv).
FCVAR_UNLOGGED Nếu đây là một FCVAR_SERVER, không đăng nhập thay đổi các tập tin log / giao diện điều khiển nếu chúng ta đang tạo ra một bản ghi

Thật không may, tôi không thể tìm thấy bất kỳ ví dụ cho những lá cờ sau đây: FCVAR_ARCHIVEFCVAR_USERINFOFCVAR_EXTDLLFCVAR_CLIENTDLL.

Vì vậy, tôi muốn hỏi bất cứ ai biết về những lá cờ để viết.

Ví Dụ

Dưới đây là một kịch bản đơn giản mà đếm bao nhiêu lần một máy chủ ngừng hoạt động. Nếu bạn có thể hiểu kịch bản này hoạt động, sau đó bạn có thể có nắm tốt trên cvars.

Kịch bản này chỉ nên được sử dụng như là minh họa để hiểu cvars. Nếu bạn thực sự muốn đếm chính xác treo máy, tôi muốn giới thiệu một phương pháp khác nhau. Hãy cho tôi biết nếu bạn quan tâm.


Code:
#include <amxmodx> #define PLUGIN "Crash Counter" #define VERSION "1.0" #define AUTHOR "stupok" #define DIR_CRASHLOG    "addons\amxmodx\logs\CrashLog" #define FILE_CRASHMAP   "addons\amxmodx\logs\CrashLog\crash_map.txt" #define FILE_LOG    "CrashLog.log" // will be found in addons\amxmodx\logs new cvar_Crashed public plugin_init() {     register_plugin(PLUGIN, VERSION, AUTHOR)         cvar_Crashed = register_cvar("server_crashed", "1", FCVAR_SPONLY) // không cho phép người chơi chỉnh sữa CVar này         if(!dir_exists(DIR_CRASHLOG)) mkdir(DIR_CRASHLOG) // Tạo thư mục addons\amxmodx\logs\CrashLog         if(!file_exists(FILE_CRASHMAP)) write_file(FILE_CRASHMAP, "-- Do not edit --", -1) // tạo file crash_map.txt         new szMapName[32]     new iLineLen     read_file(FILE_CRASHMAP, 2, szMapName, charsmax(szMapName), iLineLen) // Đọc bản đồ trước đó từ tập tin         if(get_pcvar_num(cvar_Crashed)) // Kiểm tra xem máy chủ mới bắt đầu, 1 = Bắt Đầu, 0 = Khởi động lại/map thay đổi     {         if(szMapName[0]) // chúng ta có bản đồ từ crash_map.txt hay không?         {             log_to_file(FILE_LOG, "The server exited or crashed on '%s' before this recorded time.", szMapName)         }         set_pcvar_num(cvar_Crashed, 0) // Điều này sẽ được thiết lập 1 lần nữa khi máy chủ có một sự khởi đầu "tươi" (Không khởi động lại).     }         get_mapname(szMapName, charsmax(szMapName)) //lấy tên của bản đồ hiện tại     write_file(FILE_CRASHMAP, szMapName, 2) // viết nó vào crash_map.txt }

0 nhận xét:

Post a Comment