Knight Raider
Legend of Zelda
Bây giờ trong box này 4 người đã có soure của Phbot, nhưng mỗi người lại làm độc lập với nhau, lúc trước tôi và HS có thảo luận vài thứ nhưng mỗi người lúc rảnh lúc bận khác nhau nên ko được nhiều. Topic này tôi mở ra để tập trung code lại, nếu thấy ổn thì có thể giữ nguyên hoặc bổ xung thêm. Những vấn đề cần giải quyết có thể post vào để mọi người cùng thảo luận tìm hướng giải quyết. Hy vọng HS, holy, HCM có thời gian thì up những gì mình làm được để phbot dùng cho VN nhanh chóng được phát triển.
Theo tôi để tiện, nên post code theo khung như sau:
Sau đây là 2 phần tôi làm được và đã thêm vào phbot7.
I - Auto PT:
Tạo 1 check box trong frm có tên là chkautoformpt, sau đó thêm đoạn code dưới đây vào frmMain.frm, nếu muốn đếm số người trong PT tạo thêm 1 textbox có tên là textpt.
Trong modul Party.bas thêm 2 đoạn code:
1. Đồng ý PT.
2. Đăng kí lại PT nếu người thứ 2 hoặc người thứ 4 thoát khỏi PT:
Trong PacketParser.bas thêm vào:
Các opcode cần thiết trong autoPT:
7069 (C-> J): Đăng kí PT.
706D (J->C): chứa thông tin người xin gia nhập PT
3864 (J->C): chứa thông tin người thoát ra khỏi PT.
Xong auto PT.
II - Pet Filter.
+ Trong frmMain tạo textbox tên là petIDtxt để hiển thị ID của pet, đồng thời cũng là điều kiện kiểm tra người chơi có pet hay không.
+ Trong mFunction.bas:
- Khai báo mảng IPetData chứa các loại Item mà pet sẽ nhặt.
- Bên dưới, trong function LoadText() thêm vào đoạn code:
- Trong Pet.bas thêm 2 đoạn code:
1. Lấy petID:
2. Kiểm tra Item rơi ra, xem có đúng với Item cần nhặt hay ko
- Trong PacketParser.bas thêm vào 2 đoạn code:
- Các opcode cần thiết trong phần này:
70C5 (C->J): điều khiển pet nhặt.
30C8 (J->C): chứa ID của pet, ko có pet sẽ ko có opcode này
3015 (J->C): chứa ID của Item rơi ra.
Đây là toàn bộ những gì tôi đã thêm vào Phbot vừa rồi, còn vài cái nữa đang nghiên kíu tiếp nhưng chưa hoàn thiện.
Phần auto PT nếu được có thể phát triển lên PT 8 và tùy ý đặt tên PT.
Phần Pet Filter, cần thêm lựa chọn cho người dùng, sau đó trích Item cần thiết vào file txt ở ngoài hoặc load trực tiếp vào mảng.
Mục tiêu cần đạt đến bây giờ là phải sửa lại phần target, tiếp đến là thoát khỏi các vị trí bị vướng, sau đó là buff.
Phần target tôi mới chỉ xem qua và chưa có cách giải quyết tối ưu, phần vướng vật cản, tôi và HS có thảo luận qua, nếu ai có quan tâm đến vấn đề này có thể thảo luận thêm. Phần buff chưa động đến do 2 vấn đề trên cần phải giải quyết trước
.
Hy vọng thành viên trong team hoặc các mem quan tâm đến cái này đóng góp thêm.
Thk mọi người đã đọc :-*
Theo tôi để tiện, nên post code theo khung như sau:
Mã:
Tên modul:
Code kèm chú thích:
I - Auto PT:
Tạo 1 check box trong frm có tên là chkautoformpt, sau đó thêm đoạn code dưới đây vào frmMain.frm, nếu muốn đếm số người trong PT tạo thêm 1 textbox có tên là textpt.
Mã:
Private Sub Chkautoformpt_Click()
InjectPacket "7069", "00000000000000000400015A0C005068626F74204175746F5054", True, False ' [COLOR="Red"]Đoạn số Hex bên trong mặc định là pt ko share, tên PT là "Phbot auto Party"[/COLOR]
frmMain.Textpt.Text = 1 [COLOR="Red"]' gán giá trị 1 vào textpt[/COLOR]
End Sub
Trong modul Party.bas thêm 2 đoạn code:
1. Đồng ý PT.
Mã:
Public Function acceptpt(sData As String)
Dim ID As String
Dim Tag As String
Dim i As Integer
ID = Mid(sData, 1, 14) ' [COLOR="Red"]Tách lấy ID của người xin gia nhập PT[/COLOR]
Tag = Mid(sData, 15, 2) '[COLOR="Red"]Tách lấy 2 số để nhận biết có người xin PT[/COLOR]
If frmMain.Chkautoformpt.value = 0 Then Exit Function
If Tag = "00" Then
InjectPacket "306E", ID & "0001", True, False
i = frmMain.Textpt.Text
i = i + 1 ' Tăng số người trong PT lên 1
frmMain.Textpt.Text = i
End If
End Function
2. Đăng kí lại PT nếu người thứ 2 hoặc người thứ 4 thoát khỏi PT:
Mã:
Public Function reformpt(sData As String)
Dim Tag As String
Dim i As Integer
Tag = Mid(sData, 1, 2) ' [COLOR="Red"]tách 2 số để kiểm tra trạng thái PT[/COLOR]
If Tag = "01" Then ' [COLOR="Red"]01: người thứ 2 vào rồi out ra luôn[/COLOR]
InjectPacket "7069", "00000000000000000400015A0C005068626F74204175746F5054", True, False
End If
If Tag = "03" And frmMain.Textpt.Text <= 4 Then ' [COLOR="Red"]03: đăng kí lại khi người thứ 4 thoát khỏi PT.[/COLOR]
InjectPacket "7069", "00000000000000000400015A0C005068626F74204175746F5054", True, False
i = frmMain.Textpt.Text
i = i - 1
frmMain.Textpt.Text = i
End If
End Function
Trong PacketParser.bas thêm vào:
Mã:
Case Is = "706D" '[COLOR="Red"]accept PT[/COLOR]
Call acceptpt(sData)
Case Is = "3864" '[COLOR="Red"]reform PT[/COLOR]
Call reformpt(sData)
7069 (C-> J): Đăng kí PT.
706D (J->C): chứa thông tin người xin gia nhập PT
3864 (J->C): chứa thông tin người thoát ra khỏi PT.
Xong auto PT.
II - Pet Filter.
+ Trong frmMain tạo textbox tên là petIDtxt để hiển thị ID của pet, đồng thời cũng là điều kiện kiểm tra người chơi có pet hay không.
+ Trong mFunction.bas:
- Khai báo mảng IPetData chứa các loại Item mà pet sẽ nhặt.
Mã:
Public ItemData(50000) As String
Mã:
Dim File As String
Dim Data As String
Dim Tag As String ' [COLOR="Red"]Lưu dữ liệu đọc từ file[/COLOR]
Dim tag1 As String ' [COLOR="Red"]Tách lấy Item cần thiết[/COLOR]
Dim Tag2 As String ' [COLOR="Red"]nt[/COLOR]
Dim i As Integer
File = App.Path & "\Data\item.txt"
i = 1
Open App.Path & "\data\pickup.txt" For Output As 2
Open File For Input As 1
If Not EOF(1) Then
Do Until EOF(1)
Line Input #1, Tag
tag1 = Mid(Tag, 18, 3)
If tag1 = "QNO" Or Tag = "QSP" Then ' [COLOR="Red"]QNO và QSP là các item Quest[/COLOR]
Tag2 = Mid(Tag, 2, 4) '[COLOR="Red"]2byte số Hex của Item[/COLOR]
Print #2, Tag2
' [COLOR="Red"]Các Item khác có thể thêm vào đây[/COLOR]
' [COLOR="Red"]Dựa vào tên Item trong file Item.txt để lọc ra kí tự đặc trưng sau đó lưu vào file[/COLOR]
End If
Loop
End If
Close #1
Close #2
File = App.Path & "\Data\pickup.txt"
i = 1
Open File For Input As 1
If Not EOF(1) Then
Do Until EOF(1)
Line Input #1, Data
IPetData(i) = Data ' [COLOR="Red"]Lưu dữ liệu từ file pickup.txt sang mảng IPetData[/COLOR]
i = i + 1
Loop
End If
Close #1
frmSplash.pBar.value = 30
frmSplash.pBar.Refresh
frmSplash.lblStatus.Caption = "Loading IPetData.."
1. Lấy petID:
Mã:
Public Function getpetid(sData As String)
Dim Tag As String
Tag = Mid(sData, 1, 8) '[COLOR="Red"]Tách lấy 4byte là ID của pet[/COLOR]
frmMain.petidtxt.Text = Tag
End Function
2. Kiểm tra Item rơi ra, xem có đúng với Item cần nhặt hay ko
Mã:
Public Function checkitem(sData As String)
Dim itemtype As String
Dim ItemID As String
Dim i As Integer
If frmMain.petidtxt.Text = "" Then Exit Function ' [COLOR="Red"]Nếu petidtxt trông thì thoát luôn[/COLOR].
ItemID = Mid(sData, 9, 8) ' [COLOR="Red"]4byte ID của Item[/COLOR]
itemtype = Mid(sData, 1, 4) ' [COLOR="Red"]2byte kiểm tra Item thuộc loại nào[/COLOR]
For i = 1 To 200
If IPetData(i) = itemtype Then
InjectPacket "70C5", frmMain.petidtxt.Text & "08" & ItemID, True, False
Exit For
End If
Next i
End Function
Mã:
Case Is = "30C8"
Call getpetid(sData)
Case Is = "3015"
Call checkitem(sData)
70C5 (C->J): điều khiển pet nhặt.
30C8 (J->C): chứa ID của pet, ko có pet sẽ ko có opcode này
3015 (J->C): chứa ID của Item rơi ra.
Đây là toàn bộ những gì tôi đã thêm vào Phbot vừa rồi, còn vài cái nữa đang nghiên kíu tiếp nhưng chưa hoàn thiện.
Phần auto PT nếu được có thể phát triển lên PT 8 và tùy ý đặt tên PT.
Phần Pet Filter, cần thêm lựa chọn cho người dùng, sau đó trích Item cần thiết vào file txt ở ngoài hoặc load trực tiếp vào mảng.
Mục tiêu cần đạt đến bây giờ là phải sửa lại phần target, tiếp đến là thoát khỏi các vị trí bị vướng, sau đó là buff.
Phần target tôi mới chỉ xem qua và chưa có cách giải quyết tối ưu, phần vướng vật cản, tôi và HS có thảo luận qua, nếu ai có quan tâm đến vấn đề này có thể thảo luận thêm. Phần buff chưa động đến do 2 vấn đề trên cần phải giải quyết trước
Hy vọng thành viên trong team hoặc các mem quan tâm đến cái này đóng góp thêm.
Thk mọi người đã đọc :-*