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_flags, get_pcvar_float, get_pcvar_num, or get_pcvar_string.
Không dùng get_cvar_flags, get_cvar_float, get_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)
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_ARCHIVE, FCVAR_USERINFO, FCVAR_EXTDLL, FCVAR_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