trungviet
08-01-13, 12:37 PM
Box Server Chiến Quốc đã tồn tại khá lâu rồi mà vẫn chưa thấy ai động chạm đến vấn đề này, nay xin mạng phép mở đầu chủ đề, anh em cùng thảo luận cho vui :-" .
Guide này sẽ được cập nhật từ từ cho anh em có thời gian nghiên cứu :"> .
Cơ Sở Dữ Liệu (CSDL) là gì?
- Đại loại ở đây, do server Chiến Quốc không hỗ trợ kết nối trực tiếp đến các CSDL như MySQL, MSSQL nên CSDL đối với Server Chiến Quốc là một tập tin có thể thêm tài khoản, sau đó đọc tập tin này từ server để kiểm tra sự tồn tại của tài khoản hoặc đúng sai của mật khẩu.
Yêu cầu 1:
Để tạo một CSDL, bước đầu tiên là phải có CSDL (Troll nhau tí =)) ).
Giải quyết:
Tạo CSDL bằng thao tác: Mở thư mục current (Server Chiến Quốc), tạo một tập tin với tên tập tin là Database.dat (Hoặc tên gì tùy các bạn muốn). Nhiệm vụ của tập tin này là lưu trữ các dữ liệu sẽ được ghi vào (Tài khoản, mật khẩu blah blah tùy vào ý muốn, ở đây là tài khoản) để có thể đọc bất cứ lúc nào (Với cách này thì không chỉ dùng cho mỗi Server Chiến Quốc mà còn thể dùng cho rất nhiều server khác).
Yêu cầu 2:
Khi đã có CSDL, việc tiếp theo là gì? Chả nhẽ cứ để đấy là hệ thống có thể tự đọc được và gọi đây là CSDL :-B ? Ồ không :-| ! Chúng ta phải dùng phối hợp các hàm, thuật toán để Ghi, Đọc dữ liệu cho CSDL theo từng bước.
Giải quyết:
Vào thư mục current/sys/sys, tạo một tập tin script với tên database.c, sau đó mở tập tin này bằng một trình soạn thảo văn bản (Nếu muốn sử dụng Tiếng Việt trong tập tin này thì nên sử dụng các trình soạn thảo hỗ trợ encode UTF-8 nhưng lưu lại với encode ANSI), ở đây mình dùng Notepad++.
Viết vào nội dung như sau:
int is_legal_user(object me, string id, string passwd) {
int i, size;
string readData, *accountArray, *dataArray;
readData = read_file("Database.dat"); // Bước này sẽ đọc nội dung tập tin Database.dat đã tạo ở bước 1
accountArray = explode(readData, "\n"); // Đọc Database theo từng dòng
for (i = 0, size = sizeof(accountArray); i < size; i++) { // Vòng lặp kiểm tra từng dòng
dataArray = explode(accountArray[i], " "); // Ở mỗi dòng, tài khoản sẽ được lưu theo dạng: "taikhoan matkhau", ngăn nhau bằng một dấu " " nên ta sẽ chạy hàm explode để cắt ra. Vậy ta sẽ được ở biến dataArray: dataArray[0] = "taikhoan", dataArray[1] = "matkhau"
}
send_user(me, "%c%s", '!', "Tài khoản này không tồn tại! "); // Thông báo kết quả lên màn hình
send_user(me, "%c%c", 0xff, 0x11); // Làm trống ô nhập tài khoản và mật khẩu
return 0; // Trả về giá trị 0 khi gọi hàm (Đăng nhập thất bại)
}
Với đoạn code trên, những gì ta có là một hàm có thể đọc được dữ liệu từ Database.dat đã tạo ở bước 1, và chuyển dữ liệu thành từng mảng array tương ứng với từng dòng. Phân tích mỗi dòng, tách ra tài khoản, mật khẩu để so sánh.
Còn nữa...
P/S: Đã cố gắng viết đơn giản nhất cho newbie, nếu có cái nào không hiểu thì có thể google hoặc comment tại đây nhé :-s .
Guide này sẽ được cập nhật từ từ cho anh em có thời gian nghiên cứu :"> .
Cơ Sở Dữ Liệu (CSDL) là gì?
- Đại loại ở đây, do server Chiến Quốc không hỗ trợ kết nối trực tiếp đến các CSDL như MySQL, MSSQL nên CSDL đối với Server Chiến Quốc là một tập tin có thể thêm tài khoản, sau đó đọc tập tin này từ server để kiểm tra sự tồn tại của tài khoản hoặc đúng sai của mật khẩu.
Yêu cầu 1:
Để tạo một CSDL, bước đầu tiên là phải có CSDL (Troll nhau tí =)) ).
Giải quyết:
Tạo CSDL bằng thao tác: Mở thư mục current (Server Chiến Quốc), tạo một tập tin với tên tập tin là Database.dat (Hoặc tên gì tùy các bạn muốn). Nhiệm vụ của tập tin này là lưu trữ các dữ liệu sẽ được ghi vào (Tài khoản, mật khẩu blah blah tùy vào ý muốn, ở đây là tài khoản) để có thể đọc bất cứ lúc nào (Với cách này thì không chỉ dùng cho mỗi Server Chiến Quốc mà còn thể dùng cho rất nhiều server khác).
Yêu cầu 2:
Khi đã có CSDL, việc tiếp theo là gì? Chả nhẽ cứ để đấy là hệ thống có thể tự đọc được và gọi đây là CSDL :-B ? Ồ không :-| ! Chúng ta phải dùng phối hợp các hàm, thuật toán để Ghi, Đọc dữ liệu cho CSDL theo từng bước.
Giải quyết:
Vào thư mục current/sys/sys, tạo một tập tin script với tên database.c, sau đó mở tập tin này bằng một trình soạn thảo văn bản (Nếu muốn sử dụng Tiếng Việt trong tập tin này thì nên sử dụng các trình soạn thảo hỗ trợ encode UTF-8 nhưng lưu lại với encode ANSI), ở đây mình dùng Notepad++.
Viết vào nội dung như sau:
int is_legal_user(object me, string id, string passwd) {
int i, size;
string readData, *accountArray, *dataArray;
readData = read_file("Database.dat"); // Bước này sẽ đọc nội dung tập tin Database.dat đã tạo ở bước 1
accountArray = explode(readData, "\n"); // Đọc Database theo từng dòng
for (i = 0, size = sizeof(accountArray); i < size; i++) { // Vòng lặp kiểm tra từng dòng
dataArray = explode(accountArray[i], " "); // Ở mỗi dòng, tài khoản sẽ được lưu theo dạng: "taikhoan matkhau", ngăn nhau bằng một dấu " " nên ta sẽ chạy hàm explode để cắt ra. Vậy ta sẽ được ở biến dataArray: dataArray[0] = "taikhoan", dataArray[1] = "matkhau"
}
send_user(me, "%c%s", '!', "Tài khoản này không tồn tại! "); // Thông báo kết quả lên màn hình
send_user(me, "%c%c", 0xff, 0x11); // Làm trống ô nhập tài khoản và mật khẩu
return 0; // Trả về giá trị 0 khi gọi hàm (Đăng nhập thất bại)
}
Với đoạn code trên, những gì ta có là một hàm có thể đọc được dữ liệu từ Database.dat đã tạo ở bước 1, và chuyển dữ liệu thành từng mảng array tương ứng với từng dòng. Phân tích mỗi dòng, tách ra tài khoản, mật khẩu để so sánh.
Còn nữa...
P/S: Đã cố gắng viết đơn giản nhất cho newbie, nếu có cái nào không hiểu thì có thể google hoặc comment tại đây nhé :-s .