PDA

View Full Version : Một số cái hay về tọa độ bản đồ



hongtu1
11-10-09, 01:57 PM
Thấy Box jx dạo nào trầm quá nên mình lập topic góp vui.

Như các bạn đã biết file *.dat quy định Npc, trap, obj, SetFightState. Đối với những map mà server đã có full những file *.dat như Ba Lang Huyện, Nam Nhạc Trấn thì mình không nói rồi vì nó đã có đầy đủ Npc, trap, obj, SetFightState. Nhưng đối với những map mà ta add thêm vào chỉ có file *.wor như Đại Lý, Cái Bang thì làm sao để add được Npc, obj và nhất là trap, SetFightState . Npc, obj thì các ban chắc ai cũng biết (nếu ai chưa biết thì vui lòng tìm xem lại bài của anh Akari), đây mình chỉ đề cập đến cách add trap và SetFightState.
Ai đã tìm hiểu về file *.dat rồi có nhận thấy rằng file *.dat của trap và SetFightState khác so với file *.dat của Npc và obj (cả về cấu trúc mã hex) là nó có tác dụng tới Player. Tức là khi Player di chuyển tới tọa độ đó thì nó sẽ gọi 1 file *.lua và thực thi nội dung của file này. Đường dẫn tới file *.lua đó được quy định trong đoạn mã hex của file *.dat ( nói thật là giờ mình vẫn chưa biết nó được mã hóa kiểu gì, nếu ai biết rồi thì có thể giải giúp mình được thì thank nhiều). Nhưng đoạn mã đó lại không quy định tọa độ bản đồ. Tức là khi ta thay đổi tên của file *.dat thì tọa độ tác dụng sẽ thay đổi theo. Do vậy mình có thể lợi dụng cái này để add trap và SetFightState cho những map khác. Sau đây mình lấy 1 tọa độ làm gốc và làm mẫu luôn đó là tọa độ cổng ra phí Đông của Ba Lăng Huyện (202/206).
Ta lấy tọa độ y/2 = 101 vậy tìm đến đường dẫn \Maps\两湖区\巴陵县\v_101 (các pro thông cảm, mình viết vậy để nếu new member có đọc thì cũng có thể hiểu được )
Ta lấy tọa độ x/2 = 103 vậy trong folder v_101 ta lấy file 103_Region_S.dat
File này quy định file *.lua có đường dẫn \Script\两湖区\巴陵县\trap\巴陵县东门.l ua.

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

(trong file *.dat này còn có thêm cả cái bảng thông báo nên mình đã đưa tọa độ của nó về 0 tất để tiện khi đưa vào các map khác)
Nhưng khi ta đem file 103_Region_S.dat để vào các map khác thì lúc di chuyển tới đó nó vẫn thực hiện hàm trong file 巴陵县东门.lua. Ví dụ mình đem file này để add trap đi từ Cái Bang sang Dương Châu chằng hạn, thì nó vẫn thực hiện đúng chức năng cũ là SetFightState. Vậy làm sao để cho nó hiểu tọa độ này là tọa độ trap di chuyển Player từ Cái Bang sang Dương Châu. Đơn giản thôi, mình dùng hàm GetWorldPos().
Cú pháp: w,x,y = GetWorldPos()
Trong đó: w = Id map mình đang đứng
x = tọa độ x *8
y = tọa đô y*16
Dùng hàm if..then để kiểm tra, nếu nhân vật đứng ở Ba Lang Huyện thì SetFightState, còn đứng ở Cái Bang thì di chuyển nhân vật sang Dương Châu.



function main(sel)
w,x,y = GetWorldPos()
if (w == 53) then
if ( GetFightState() == 0 ) then
SetPos(1654, 3242)
SetFightState(1)
else
SetPos(1652, 3237)
SetFightState(0)
end;
AddStation(10)
end
if (w == 115) then
NewWorld(80,244*8,177*16)
end
end;
Ta thấy rằng tọa độ trap di chuyển từ Cái Bang sang Dương Châu là 192/252.
Ta lấy 192/2 = 96, 252/2 = 126. Vậy ta copy file 103_Region_S.dat vào \Maps\中原南区\丐帮\丐帮\v_096\ rồi đổi tên thành 126_Region_S.dat. Ok, giờ chạy lại server và xem kết quả.

Như vậy, với cách làm này ta có thể add full trap một cách dễ dàng hơn và add SetFightState cho nhân vật khi ra vào thành mà chỉ cần quan tâm tới 1 file *.dat và 1 file *.lua. Thậm chí, mở rộng hơn ta có thể dùng nó để SetTask cho nhiệm vụ ( cái này do chơi TGHM thấy có dạng nhiệm vụ này hay hay nên add vào jx cho đa dạng ).
Ví dụ mình muốn có một nhiệm vụ như sau: Long Ngũ giao nhiệm vụ cho bạn đi về phía Nam Ba Lang Huyện dò xét. Bạn đi tới tọa độ 178/212 rồi phát hiện ra tình hình, quay về báo tin cho Long Ngũ, hoàn thành nhiệm vụ:

Longngu.lua:


function main()
sonhap = 1

if (GetTask(1) == 0) then
Say("<color=yellow>Long Ngu<color>: Nguoi muon lam nhiem vu so nhap ha?",2,"Dung vay/yes","Khong muon/no")
elseif (GetTask(1) == 1) then
Say("<color=yellow>Long Ngu<color>: Nhiem vu ta giao nguoi van chua lam sao?",1,"Oi chet, Ta quen khuay di mat/no")
elseif (GetTask(1) == 2) then
Talk(4,"thuong","<color=yellow>Long Ngu<color>: The nao? Nguoi da biet duoc gi noi ta nghe xem nao.","<color=green>"..GetName().."<color>: Tai ha phat hien O phia Nam moi xuat hien may ten sat thu","<color=yellow>Long Ngu<color>: Hen chi dan lang hay bi mat trom nhu vay. Can phai di trung tri chung moi duoc.","<color=yellow>Long Ngu<color>: Nguoi cung kha lam, da hoan thanh tot nhiem vu ta giao, ta se thuong cho nguoi")
else
Say("<color=yellow>Long Ngu<color>: Sao khong lo luyen cong di Dai hiep",1,"Ket thuc doi thoat/no")
end
end;

function yes()
Say("<color=yellow>Long Ngu<color>: Gan day ta nghe dan lang ke rang ho rat hay bi mat trom, Nguoi hay di ve phi Nam tim hieu xem su that do dau",1,"Ok. Ta di ngay/no")
SetTask(1,1)
end;

function thuong()
AddRepute(10)
Msg2Player("Nhan duoc 10 diem Danh Vong")
end;

function no()
end;
Àh, một vấn đề nữa ở đây là nếu 1 map cần add nhiều trap, SetFightState hoặc SetTask thì kiểm tra ID map vẫn chưa đủ nên ta cần phải kiểm tra thêm cả tọa độ nhân vật đang đứng.
Dùng hàm floor : chia lấy phần nguyên
Cú pháp: tdx = floor(x / 8) : lấy x chia cho 8 rồi gán kết quả vào tdx
Vậy trong file 巴陵县东门.lua của mình sẽ viết như sau:




function main(sel)
w,x,y = GetWorldPos()
tdx = floor(x / 8)
tdy = floor(y / 16)
if (w == 53) and (tdx >= 206 ) and (tdx <= 207) and (tdy == 202)then
if ( GetFightState() == 0 ) then
SetPos(1654, 3242)
SetFightState(1)
else
SetPos(1652, 3237)
SetFightState(0)
end;
AddStation(10)
end

if (w == 115) then
NewWorld(80,244*8,177*16)
end

if (w == 53) and
(tdx == 178) and
(tdy == 212) and
(GetTask(1) == 1 ) then
Talk(1,"","Thi ra la vay!Tai day moi xuat hien may ten sat thu, Ta phai ve bao tin cho <color=yellow>Long Ngu<color> biet moi duoc")
SetTask(1,2)
end
end;

Tương tự , ta đổi tên file 103_Region_S.dat thành 089_Region_S.dat và copy file vào \Maps\两湖区\巴陵县\v_106\ . Giờ add file longngu.lua vào npc nào đó rồi thử làm nhiệm vụ xem. Kết quả nè:

<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

Nếu ai chưa hiểu thì có thể download file mấy file của mình về tham khảo:
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
Topic kết thúc. Mod đọc bài thấy có ích thì cho xin cái ghim nha kẻo để lâu bị đẩy về sau bị mất tích

Àh nhân tiện share file *.wor map Tương Dương của võ lâm 2 cho mọi người ai đã add thành công map Phong Thần thì về add thử dùm mình vào xem có được không, nếu thành công thì chỉ cho mình với nha. Thank nhiều.
Link:<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>
Mình add vào toàn bị đen màn hình vậy nè:
<b><font color=red>[Chỉ có thành viên mới xem link được. <a href="register.php"> Nhấp đây để đăng ký thành viên......</a>]</font></b>

luckyboy2000
11-10-09, 03:01 PM
mở hàng nhaz :D bài viết rất hay \:D/

giangleloi
11-10-09, 03:40 PM
xem lại spr và các file dat của client, hoặc khai count của file pak mới cao lên, bài viết cũng thực chất là hd add trap => định hướng move ko cần npc như VNG => Thanks

Mr.Rezo™
11-10-09, 05:41 PM
Thực sự không hiểu cho lắm vì không rành về maps ;)) nhưng dù sao cũng thank 1 phát ;))

penhung
11-10-09, 09:45 PM
bài viếtt rất hay ! thanks nha bro

thaihoa91
12-10-09, 08:18 AM
Hay lắm hongtu1 ! Ngoài việc là làm trap có sẵn thì hongtu1 lại sáng tạo thêm 1 cách add nhiều trap bằng hàm ! Quá hay ! Quá hay ! ^__^

errorxviii
13-10-09, 08:02 AM
Cái maps VL2 mình cũng đã add thử rồi, không được đâu. Này nhé: các file spr ở jx1 thì được bỏ vào thư mục \spr\, nhưng bên bản jx2-kt thì KS để nó vào \images\, mà game jx1 không tài nào load được thư mục này? Muốn thử load không thì cậu thử unpack 1 cái file nào vào thư mục \images\ xem nó có chịu unpack cái đó không->suy ra game jx1 cũng không load được>.<

giangleloi
13-10-09, 10:05 AM
quy định spr trong dat của client mà error? chứ sao fs lại load dc ;))! thôi cho topic vào kho lưu trữ nhé!

errorxviii
13-10-09, 08:57 PM
Pa gà wa, FS với jx là bản nén file pak kiểu cũ. Bản mới phát triển từ jx2 đến bản kiếm thế đang chơi tui thấy nó nén hình ảnh spr ở thư mục khác. Thì các file .dat load hình ảnh cấu trúc, building thì dạng \spr\..\đường dẫn dến thư mục chứ spr phong cảnh, building\*.spr, còn các file dat của jx2 khác: dạng \images\path\*.spr
Pa mở data nó ra mà xem, có thấy các file pak của nó có dạng image_*.pak không?
Muốn add gì từ FS wa jx1 thì có thể khả thi, còn jx2 thì bó tay. Các hình ảnh hiển thị trong game trừ một số spr của ui thì còn lại đều ở chuẩn khác. VD: .mesh,3e
Không phải chê add tùm lum game khác wa làm hỏng game jx cổ điển sao mà giờ muốn làm làm gì?