PDA

View Full Version : [TLBB] Xin giúp đỡ về add item vào khung giao diện client



nvanh2611
30-04-15, 01:29 PM
Như tiêu đề của mình!

Mình đã gọi được khung giao diện ở client hiện ra rồi.

<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>

Nhưng không add được bất kỳ item nào vào khung giao diện này cả, click chuột phải vào item không được, kéo item vào khung cũng không được và cũng không có thông báo gì!
link file khung giao diệ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>

có ai biết xin được chỉ giáo.

nvanh2611
06-05-15, 11:35 PM
Có vẻ không có ai đào sâu về code trên client ngoài Hữu Duyên.

nhưng cũng không thấy Hữu Duyên cho 1 cái gợi ý nhỉ?

Cho mình xin Quy trình thực hiện giữa client và server - khai báo - hàm - hay câu lệnh gì đó cũng được.

Đã dùng các bảng tương tự đổi tên các hàm ở file lua và xml add vào vẫn hiện được bảng nhưng vẫn bị lỗi. b-( b-( b-(

makute7413
06-05-15, 11:51 PM
Chắc bạn đang tìm cái này nhỉ, thấy nó nằm trong topic Lua in TLBB (<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ột điều cuối cùng khá quan trọng chính là thao tác kết nối giữa SV với Client và ngược lại, giải thích nguyên lý hoạt động của file Lua bên Client.
1. UI_COMMAND và XScript

Đây chính là công cụ kết nối Server và Client.
Muốn truyền dữ liệu từ Server lên, ta dùng UI_COMMAND theo cấu trúc


BeginUICommand(sceneId)
UICommand_AddInt(sceneId,GetMissionData(sceneId,se lfId,y)
UICommand_AddString(sceneId,GetMissionData(sceneId ,selfId,z)
EndUICommand(sceneId)
DispatchUICommand(sceneId,selfId,x)

Truyền UI_COMMAND với số đại diện là x lên Client và truyền các biến tương ứng lên Client, y kiểu nguyên và z kiểu chuỗi. Các bạn có thể thay đổi tùy mục đích, tối đa là 15 biến truyền từ sv lên thôi nhé.
Cái x kia đặt bất kỳ kiểu nguyên miễn không trùng với UI_COMMAND khác.
Tại client ta check UI_COMMAND như sau:
Xét hàm PreLoad, ta sẽ khai báo thêm 1 dòng sử dụng chức năng UI_COMMAND cho nó như sau:

this:RegisterEvent("UI_COMMAND")
Thế là ok rồi. Giờ ta sẽ get giá trị được truyền từ Server lên như sau:
Xét hàm OnEvent, ta sẽ kiểm tra như sau


if event == "UI_COMMAND" and tonumber(arg0) == x then
local z=Get_XParam_INT(0)
local y=Get_XParam_String(1)
end

Thì biến z này chính là biến kiểu nguyên mà sv truyền lên và y là biến kiểu chuỗi. SV truyền lên các biến đánh số từ 0 nhé. Và UI_COMMAND này nhận dạng nó là số x
Ngoài ra bạn cũng có thể truyền UI_COMMAND từ file Lua khác bên Client qua bằng cấu trúc

PushEvent("UI_COMMAND",x,Danh_sách_các_tham_biến_cần_truyền)
Với x cũng là giá trị nguyên bất kỳ đúng với cái UI_COMMAND trỏ tới. Và các biến truyền sang là dạng chuỗi đánh số từ arg1 trở lên (vì arg0 là cái x kia rồi). Cái arg1 trở lên ko cần khai báo nhé nó mặc định được định nghĩa rồi. Và lấy giá trị bạn chỉ cần lấy 1 biến = cái arg1 này là xong.

Vậy là xong việc truyền dữ liệu từ SV lên, bây giờ ta quan tâm truyền dữ liệu từ Client về Sv nhé.
Đó chính là cái XScript. Cấu trúc như sau


Clear_XSCRIPT();
Set_XSCRIPT_Function_Name("Tên_hàm_thao_tác_tại_SV")
Set_XSCRIPT_ScriptID(ID_Script_thao_tác)
Set_XSCRIPT_Parameter(0,x)
Set_XSCRIPT_Parameter(1,y)
...
Set_XSCRIPT_Parameter(n,z)
Set_XSCRIPT_ParamCount(n+1)
Send_XSCRIPT()
Nó sẽ gửi các tham biến trên về cái hàm được khai báo trong Server. Các tham biến đó sẽ đứng sau sceneId và selfId.
Tùy mục đích bạn sử dụng nó như thế nào.
Một chú ý là cái hàm kia bạn phải khai báo nó trong tlbb/Server/Config/AllowableScriptFunc.txt nếu không nó sẽ diss ngay. Cái này đơn giản để chống hack thôi mà.

Chú ý cuối cùng là UI_COMMAND khi gọi từ SV lên nếu gọi nhiều cái cùng lúc thì nó chỉ thực hiện cái UI_COMMAND cuối cùng thôi nhé. Mình cũng không hiểu vì sao. Còn XScript thì bạn truyền vô tư nhiều cái 1 lúc không sao.
Và trong code hạn chế việc chuyển dữ liệu qua lại sv và client nhé nó đỡ lag SV hơn.

Với các thứ trên bạn hoàn toàn fake được vài thứ rồi đấy.

2. XML và Lua trong Interface

Nếu bạn học qua lập trình Java thì bạn sẽ hiểu vai trò của xml file. Nó để dựng khung giao diện và bắt các sự kiện khi người dùng thao tác vào đâu đó. Nói cái này để bạn hiểu mấy cái hàm trong Lua tại Client ấy để khi edit bị lỗi còn xem lại.
Ngoài ra để khai báo 1 file Lua nào bên Client ta khai báo trong file InterfaceEx.txt trong Config.axp. Bạn cũng nên biết qua về xml thì bạn sẽ rõ hoạt động của file Lua tại Interface. Thông thường khi copy file từ đâu đó vào ví dụ của FPT qua bị lỗi thì ngoài Lua file bạn cũng nên để ý cái xml này.

Trên đây là tất cả những gì sơ đẳng nhất liên quan đến Client, ngoài ra có vài hàm đặc biệt thì bạn phải hiểu xml và thực hành nhiều nhé. Để làm đc cái khung dễ nhất như cái tu luyện thì bạn cũng cần biết nhiều và đến đây bạn cũng khá pro rồi đó nhe :D

songtu
07-05-15, 09:15 AM
mình nhớ là đã trả lời một câu hỏi tương tự thế này rồi, muốn item hiển thị lên đc khung thì phải xem cả script trong Packet.lua, để bắt sự kiện click vào item trong túi đồ , rồi gửi đến khung mình cần nó hiển thị...!! Chịu khó đọc lại topic cũ , cũng nhiều cái hay đó !!
Thân!!

vocweb
07-05-15, 11:01 AM
Nếu bạn học qua lập trình Java thì bạn sẽ hiểu vai trò của xml file




Cái này cần nói cho chính xác, hầu như tất cả ngôn ngữ lập trình đều có thể xử lý được file XML, cho nên không nên kéo Java vô đây làm gì.

nvanh2611
07-05-15, 01:06 PM
mình nhớ là đã trả lời một câu hỏi tương tự thế này rồi, muốn item hiển thị lên đc khung thì phải xem cả script trong Packet.lua, để bắt sự kiện click vào item trong túi đồ , rồi gửi đến khung mình cần nó hiển thị...!! Chịu khó đọc lại topic cũ , cũng nhiều cái hay đó !!
Thân!!

Mình cũng đã lục lọi lại rồi! giờ mới biết packet.lua này ảnh hưởng tới việc đó! để mình tìm hiểu xem.
Trước mình chỉ chăm chăm đào sâu vào khung mình muốn add mà không để ý đến cái túi đồ này.
Cảm ơn bạn nhé!

nvanh2611
08-05-15, 01:48 AM
Đã tìm hiểu để add được item vào khung giao diện mới tự viết phức tạp hơn nhiều, không đơn giản 1 chút nào

Mỗi ô của Khung giao diện client (file XML) đều có 1 giá trị để có thể accept khi click chuột phải vào item ở tay nải.
<Property Name="DragAcceptName" Value="xxxxx"/>

Đào sâu vẫn trở về con số 0. Ai đã từng tự viết khung giao diện mới hoạt động tốt rồi xin được chỉ giáo!

songtu
08-05-15, 08:54 AM
nhấn thanks đi :/:), nó đơn giản là trong .lua thôi, ko liên quan cho lắm cái thằng packet.xml!!

nvanh2611
08-05-15, 09:41 AM
nhấn thanks đi :/:), nó đơn giản là trong .lua thôi, ko liên quan cho lắm cái thằng packet.xml!!

songtu: Thắc mắc về khung giao diện điêu văn 1 chút!! khi mình nhấn chuột vào món đồ thì sao nó ko chui vào ô mà lại bị mặc lên người mất nhi?? ai có cao kiến xin chỉ giáo !!

Mình có tìm được thắc mắc của bạn trong "Ðề: Hướng dẫn add 1 khung giao diện mới".

Cái này bạn làm được rồi à? tình trạng của mình cũng giống như bạn đã từng thắc mắc, nó đơn giản là trong packet.lua thôi đúng ko bạn?

songtu
08-05-15, 12:37 PM
songtu: Thắc mắc về khung giao diện điêu văn 1 chút!! khi mình nhấn chuột vào món đồ thì sao nó ko chui vào ô mà lại bị mặc lên người mất nhi?? ai có cao kiến xin chỉ giáo !!

Mình có tìm được thắc mắc của bạn trong "Ðề: Hướng dẫn add 1 khung giao diện mới".

Cái này bạn làm được rồi à? tình trạng của mình cũng giống như bạn đã từng thắc mắc, nó đơn giản là trong packet.lua thôi đúng ko bạn?

đơn giản là trong ý thôi, xử lý phải đồng bộ cả ở trong packet và trong cái khung mình cần nó hiện lên nữa!! chỉ trong đấy thôi, ko đâu cả !!! good luck !! 8-}

Sói Đẹp Trai
08-05-15, 01:49 PM
Bạn đặt được câu hỏi là vì sao ấn vào nó lại đeo lên người trong khi một số cái nó lại chui vào khung thao tác thì bạn vui lòng xem kỹ cấu trúc file Packet.lua và SelfEquip.lua
Đây là câu trả lời cho 2 cái vấn đề đó. Tại client Lua nó hơi mệt vì phải mổ xẻ cả XML nữa nhưng kiên trì thì không gì là không thể được bạn nhé.

nvanh2611
09-05-15, 01:18 PM
Bạn đặt được câu hỏi là vì sao ấn vào nó lại đeo lên người trong khi một số cái nó lại chui vào khung thao tác thì bạn vui lòng xem kỹ cấu trúc file Packet.lua và SelfEquip.lua
Đây là câu trả lời cho 2 cái vấn đề đó. Tại client Lua nó hơi mệt vì phải mổ xẻ cả XML nữa nhưng kiên trì thì không gì là không thể được bạn nhé.

mình tìm được ra vấn đề tại sao rồi, do cái giá trị của "DragAcceptName" trong file xml:

<Property Name="DragAcceptName" Value="D1" />
<Event Name="RBClicked" Function="Resume_Equip_Dress_Stiletto(1);" />

Muốn add vào 1 khung dao diện mới mà giá trị của DragAcceptName trong file xml mà file game.exe không hiểu thì phải dùng thuật toán và code đồng bộ giữa Packet.lua và Frame giao diện mới.

Nhưng hiểu biết về các câu lệnh trên client của mình còn quá ít trong đầu có thuật toán rồi nhưng không biết câu lệnh để viết.

VD:
Truyền giá trị từ frame này sang frame khác như thế nào?
Bắt giá trị từ frame đó truyền sang như thế nào?

Biết được nhưng câu lệnh của client này mình mới có thể viết được.

nvanh2611
10-05-15, 09:44 AM
Truyền giá trị từ frame này sang frame khác như thế nào?
Bắt giá trị từ frame đó truyền sang như thế nào?

ai có biết thì hướng dẫn mình với. :-?

songtu
10-05-15, 03:31 PM
Truyền giá trị từ frame này sang frame khác như thế nào?
Bắt giá trị từ frame đó truyền sang như thế nào?

ai có biết thì hướng dẫn mình với. :-?
tải client của mấy thằng làm game off về mà nó chưa giấu file , vào đấy mà xem !!