PDA

View Full Version : [JX] Tạo Trap theo cách mới (JX DEV)



hadoson
01-05-15, 04:03 PM
Xin chào tất cả các bạn. Mình gia nhập diễn đàn đã lâu mà chưa có gì đóng góp cả.
Giờ chắc mọi người theo JX linux hết rồi nhưng mình vẫn thích vọc JX cũ. Chẳng biết còn ai như mình nữa không?
Nếu ai còn quan tâm thì đọc tiếp còn không thì hãy dừng ở đây nhé! Vì mình sẽ nói về source cũ thôi.

Thấy nhiều bạn đưa phương án tạo trap rồi, người thì viết hàm load riêng, người thì vào các Map để tạo hoặc sửa Region_S.
Mình tích lũy được kiến thức của các bạn, tự nghiên cứu và phát triển theo cách riêng của mình. Kết quả là đã thành công, server load trước tất cả trap khi khời động và client chạy nhẹ tênh :))
Có thể tùy ý load vài trăm cái trap trên mỗi map mà quản lý chúng rất dễ, rất tường minh, bỏ qua hết các thư mục toàn tiếng Tầu rắc rối kia.

Dưới đây là cách làm của mình:
bước 1- Tạo 1 tệp Trap.txt theo định dạng: IDMap, NumTrap,nX1,nY1,script1, nX2,nY2,script2,.......nXn,nYn,scriptn.
Ví dụ mình tạo ở Ba Lăng Huyện: 53 2 195 203 53_myscript1 213 206 53_myscript2
bước 2- Vào KSubWorld, void LoadMap gọi một thủ tục LoadTrap để lấy thông tin trên vào 1 Ktab. Sẽ lấy được số lượng trap trên mỗi bản đồ, tọa độ X,Y và script cho mỗi trap (Cái này các bạn có thể tham khảo thêm cách lấy từ bất kỳ đoạn code đọc Ini Load nào).
Trong LoadMap, nếu Region có nX và nY trùng với giá trị của IDtrap thì gán cho nó 2 tham số: m_havetrap=1 (có trap) và tham số thứ 2 m_script là script của trap đó.
Xong cái này là đã đỡ đi cả tháng ngồi soạn và tim trap ở mỗi Map rồi các bạn ạ.
bước 3: Gọi từ Client bằng cách gán cho các lệnh OnRun, OnJump, OnWalk một hàm kiểm tra,
Nếu thấy Region có trap mới gọi script của nó.
Phương pháp này giống hệt của chương trình nguyên bản: Load region trước, trong đó có thông số Npc, Object vàTrap. Khi Player chạy đến một Region, nếu Region đó có Trap mới đọc. Dựa vào nguyên tắc trên, mình chỉnh sửa theo cách mới, khắc phục được phương thức mỗi lần chạy lại quét tìm các giá trị như các cách cũ, làm chậm tốc độ máy đi khá nhiều hoặc vọc các thư mục chứa Map cực kỳ tốn công mà khó quản lý. Mỗi nhân vật khi di chuyển đến 1 region mới chỉ phải kiểm tra có giá trị 1 hay 0 mà thôi!

void KNpc:: DoTrap()
{
if (IsPlayer())
{
#ifdef _SERVER
if (SubWorld[m_SubWorldIndex].m_Region[m_RegionIndex].m_HaveTrap==1)
{
sprintf(TrapActionScript, "\\script\\trap\\%s",SubWorld[m_SubWorldIndex].m_Region[m_RegionIndex].m_script);
Player[m_nPlayerIdx].ExecuteScript(TrapActionScript,"main", 0);
ZeroMemory(TrapActionScript, 80);
}
#endif
}
Nếu bài viết của mình lạc hậu, xin các bạn bỏ qua vì mình thích viết source hơn viết script.
Mình không đưa code lên làm bài biết rắc rối mà không biết là còn có ích nữa không. Vì vậy mình chỉ nói hướng làm, mang tính trao đổi kinh nghiệm. Chi tiết nếu bạn nào cần thì ta bàn kỹ hơn nhé!

PS: Hiện nay mình đã fix và cá nhân hóa thành công khá nhiều chức năng như chạy trên MiniMap, tự xếp chồng vật phẩm khi auto nhặt đồ, chuyển đồ tự động, ép đồ tím và hoàng kim, Load, public phi phong và các hiệu ứng như vòng sáng, danh hiệu, trùng sinh... cho người xung quanh thấy được không cần đưa vào Skill, thay đồ bằng click chuột, bán hàng offline, thay avatar,vv.... , chỉ còn post rao đồ trên Chat vẫn còn đang loay hoay vì có một mình (hic!). Mình rất cần có bạn bè đam mê JX để trao đổi thêm nhưng giờ vắng vẻ quá.

phongmous96
01-05-15, 06:12 PM
Cho mình xin cái yahoo để trao đổi nhé :D

TranDoanDuc
05-05-15, 06:24 AM
Đúng là chỉ người lười biếng nhất mới làm công việc khó nhất bằng cách dễ dàng nhất, mình thì làm theo linux load cái maps.pak là xong, rồi code thêm hàm xóa trap thêm trap dùng cho scripts sự kiện event nữa là chia tay phần trap luôn, khỏi quan tâm đến trap nữa.

assaa
05-05-15, 08:56 AM
Code source thì trước thienthanden2 và systemerror đã từng share rồi. Nhưng cũng cảm ơn bạn đã chia sẽ thêm kinh nghiệm cho ae cùng dev jx.
Mình thì cũng load maps.pak của linux qua rồi gom lại mấy cái trap bên linux qua dùng cho khỏe đỡ công viết lại script :P