Thảo luận Code và thuật toán cho Phbot

Status
Không mở trả lời sau này.

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:
Mã:
Tên modul:
Code kèm chú thích:
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.
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)
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.
Mã:
Public ItemData(50000) As String
- Bên dưới, trong function LoadText() thêm vào đoạn code:
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.."
- Trong Pet.bas thêm 2 đoạn code:
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
- Trong PacketParser.bas thêm vào 2 đoạn code:
Mã:
Case Is = "30C8"
             Call getpetid(sData)
Case Is = "3015"
             Call checkitem(sData)
- 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 :-*
 
KR tách hộ ae cái PetFilter ra đi KR. Dựa trên những gì có sẵn mình nghĩ đơn giản thôi mà. Bớt chút thời gian tách ra hộ cho ae đỡ cực :x. Chỉ cần có chỗ để thay đổi cổng (Port, Bot) để kết hợp (Proxy+Revbot) hay (Proxy+AutoSelect) là OK lắm rồi.

Rất tiếc vì phi vụ Phbot này k tham gia được với ae lên đành ngồi chơi chờ kết quả của mọi người vậy =(( sory ::(.
 
Đây là cách thoát khỏi vật cản mà tôi và HSSS đã thảo luận với nhau.
Chấm xanh là char, chấm đỏ là mob.
Xc,Yc: tọa độ char tại vị trí kẹt.
Xm,Ym: tọa độ mob.
bot.jpg

Trước hết phải tìm ra sự kiện để nhận biết char đang bị kẹt. Sau khi biết bị kẹt thì so sánh Xc với Xm, nếu khác nhau thì chia ra các trường hợp:
1. Nếu Xc < Xm thì tạo 1 packet cho char di chuyển đến tọa độ (Xc-i,Yc), với i là 1 số cố định có trước, mục đích là cho char di chuyển sang trái.
Mã:
Packet = CreatePacket(frmMain.huntx.Text - i, frmMain.hunty.Text)
InjectPacket "7021", Packet, True, False 'change
- Nếu vật cản là khá bé thì chỉ cần inject 1 packet như trên, nhưng nếu vật cản to, có thể cho char di chuyển tiếp lên đến vị trí có tọa độ (Xc-i, Ym).

2. Nếu Xc>Xm thì cho char di chuyển đến tọa độ mới có dạng (Xc+i,Yc) sau đó tiếp tục đi đến tọa độ (Xc+i,Ym)

3. Nếu Yc = Ym, tùy theo Xc > hoặc < Xm mà sẽ cho + hoặc - i, thứ tự + và - giống như trên, ở đây tối ví dụ Xc < Xm. Cho char di chuyển đến (Xc, Yc - i), sau đi đi tiếp (Xc + i, Yc -i) hoặc (Xm, Yc - i). Trường hợp Xc > Xm thì thay chỗ nào là + thành -.

Tạm thời cách giải quyết là như vậy, có thể sẽ kéo theo 1 số vấn đề phát sinh.
Có thể các bạn ko biết về VB nhưng về có thể giúp team về thuật toán, nhiều người tham gia thì vấn đề được giải quyết nhanh hơn và nếu được có thể code lại để có 1 bot riêng cho vSro. Hy vọng nhiều người tham gia hơn. Thk mọi người đã đọc.
 
Tớ thì mù tịt về IT nhưng có ý tưởng như thế này:

- Xác định opcode "không thể tấn công khi có vật cản".
- Làm 1 vùng đệm để nhớ n tọa độ gần nhất (5 tọa độ chẳng hạn).
- Khi opcode trên được gửi đến thì char sẽ chạy về 1 trong n tọa độ đó (tương tự như cái return).
- Để tránh việc kẹt tiếp thì mob vừa target ở vị trí kẹt sẽ được bỏ qua, ko attack nữa trừ khi nó tấn công mình.
 
Tạo các điểm sẵn làm cho thời gian tìm lối thoát có thể tăng lên.
Còn việc con mob char target lúc kẹt, chắc cũng chỉ bỏ qua 1 khoảng thời gian thôi, đề phòng trường hợp kẹt liên tục bỏ qua hết, đến lúc ko có quái target, quái đánh thì đánh lại nhưng vẫn kẹt --> chết :|, ngoài ra nếu đánh chỗ quái bị động mà ko target những còn bị kẹt thì sẽ dẫn đến tình trạng bỏ qua những con đó ko bao giờ đánh, revbot cũng bị cái lỗi này.
 
Attribute VB_Name = "AutoRes"
Public Function AutoRes(sData As String)
Dim Tag As String

Tag = Mid(sData, 1, 2) 'Res type

Select Case Tag
Case "04" ' Hoi sinh binh thuong
If frmMain.cmbHoiSinh.Text = "Hoi sinh Binh Thuong" Then
InjectPacket "3080", "0101", True, False
End If
Case "08" ' Hoi sinh den
If frmMain.cmbHoiSinh.Text = "Hoi sinh Den" Then
InjectPacket "3080", "0101", True, False
End If
End Select
' Bổ sung thêm dòng if ( xác định thêm 1 checkbox)
InjectPacket "7074", "0105302E000000", True, False
End Function
Bổ sung thêm cái dòng đỏ để hủy chiêu sái tự hồi sinh, khi down lv các account có máu nhiều ( vì chiêu này khi hồi sinh tăng máu và def ) con quái nó đánh không bị mỏi tay:D. KR kiểm tra dùm mình nha. Do không có VB nên mình không test được với PHbot. Nhưng đã kiểm tra với chương trình của mình rùi.:hug:
Nguyên Data Packet : 0700747001000105302E000000

Còn về các target quái khi bị kẹt :
- Cách xử lí của ultral : chạy lùi về phía sau và lệch qua 1 bên ( chạy về tọa độ x -a, y -a), sau đó tiếp tục target.
+ Cách này là để né vật cản tốt nhưng lúc nhân vật chạy lùi có thể con quái đã chết do bị ks.Đánh ở những nơi nhiều vật cản thì nó chạy vui lắm. Cách này đang được KR đưa ra đó.
- Sro-bot : Trong vòng 15s, nếu không kill sẽ bỏ qua, chọn con quái khác.
+ Cách này nếu áp dụng cho thì có nghĩa là sẽ bỏ ID của con quái đi không thèm nhìn mày nữa. Con quái sẽ chết khi nó tấn công nhân vật thôi. Còn không thì nó đứng chơi với mình:wink:
Đó là 2 cách của 2 bot đi trước, còn PHbot VSRO thì sao ??
 
Ko có VB sao H_R lại đọc đuợc đoạn code trên, nếu ko có thì tôi gửi link cho mà down, 86 mb thôi.
Vn của tui dow tới 257MB lận! Hixhix!
Còn về vụ quái kẹt thì ta có thể giải quyết bằng cách chia giai đaọn ra! Khi mà gửi packet để attack con quái trong vòng 15s mà chưa nhận dc octec con quái đã chết thì tọa độ mình đang đứng sẽ được cộng trừ vào! Và sao đó 15s tiếp nếu chưa nhận dc Octec con quái đã chết nữa! Thì nó tự động cho vào danh sách những con quái ko đánh dc. (Cái này trước khi gửi packet tấn công 1 con quái nào đó thì phải có 1 số octec dữ liệu quái xung quanh được gửi tới :P). Cho nên khi đánh ko được thì ta cho nó ignore cái PACKET của con quái đó lun! :devil:
 
Thanks KR. Tính nói bác post giùm link VB.
Mình dùng toàn notepad để đọc source Phbot. dù trình độ thấp kém nhưng cũng hiểu sơ sơ. Tính đi mua cái đĩa VB mà lười quá::(

Cách của ghost_ranger1112 thì giống cách bỏ quái kẹt của SroBot. Nhưng mình nhận gói ra skill mà không có tác dụng thôi hay bắt gói "không thể tấn công do có vật cản".
Còn nếu 15s mà không quái không chết thì lỡ tấn công con khổng lồ nhóm thì sao ??
 
Hì nếu như bắt dc octec ko thể tấn công do có vật cản như lời HCM_Royal nói thì mọi chuyện xem ra đơn giản roài! Cố gắng tìm ra gói đó! :hug: như vậy thì cũng giải quyết vấn đề kẹt mob khỏi phải tính theo giây chi cho rắc rối :P
 
Hì nếu như bắt dc octec ko thể tấn công do có vật cản như lời HCM_Royal nói thì mọi chuyện xem ra đơn giản roài! Cố gắng tìm ra gói đó! :hug: như vậy thì cũng giải quyết vấn đề kẹt mob khỏi phải tính theo giây chi cho rắc rối :P

Cái này PHBot đã làm đc rất tốt rồi bạn ah, kẹt char ko phải chỉ là "Ko thể tấn công khi có vật cản" đâu
 
Đúng rồi, bị kẹt còn có nhiều lý do, việc tôi đưa thêm con mob vào mục đích chính là có 1 cái để xác định xem char cần phải di chuyển theo hướng nào.
Còn việc up soure lên hay ko thì có lẽ để HSSS quyết định, vì việc up lên có thể kéo theo vài vấn đề, thuận lợi cũng có mà rắc rối cũng có :|.
 
Cách lấy tọa độ bất cứ lúc nào trong PHBOT:
1. Tạo 2 text1, text2 ẩn ngay dưới trainning area.
2. Bấm đôi vào nút cmdGetHuntArea thêm vào đoạn mã:
Private Sub cmdGetHuntArea_Click()
Dim sData As String
If myX.Text <> "0" Then
huntx.Text = myX.Text
hunty.Text = myY.Text
ElseIf frmMain.Text1.Text <> "" Then
frmMain.Text2.Text = frmMain.Text1.Text
frmMain.huntx.Text = GetXFromPacket(frmMain.Text2.Text)
frmMain.hunty.Text = GetYFromPacket(frmMain.Text2.Text)
End If
End Sub
3. Trong PacketParser thêm
'Client
If blnFromServer = False Then
Select Case sOpCode
Case Is = "7045"
Call SelectedMonster(sData) 'Gets selected monster ID - change
Case Is = "7001"
Charname = HexToString(Mid(sData, 5, Len(sData))) 'Character name - change
frmMain.Charname.Text = HexToString(Mid(sData, 5, Len(sData)))
Case Is = "7021"
frmmain.Text1.Text = sData

End Select
End If
4. Trong phần Attacking.bas, sửa lại 1 chút về chỗ chạy về. Tôi thấy hình như hàm Packet = CreatePacket(frmMain.huntx.Text, frmMain.hunty.Text) có vấn đề, không lấy packet đúng. Nên chủ động từ mình lấy:
'No monsters so walk to hunting area
If frmMain.mList.ListCount = 0 And frmmain.Text2.Text <> "" Then ' không có mob và text2 đã có.
InjectPacket "7021", frmmain.Text2.Text, True, False
Exit Function
End If
@KR: Việc tách ra như thế nào để có holyreturn chắc KR hiểu...
 
Cách lấy ID nhân vật bất cứ lúc nào:
1. Trong frmmain, tạo 1 text ẩn: tên là ID ngay trên PlayerID. Thêm 1 nút cmdGetIDPlayer bên dưới.
2. Trong PacketParser thêm vào chỗ này:
Case Is = "3057" ' khi HP MP nhân vật hay mob thay đổi sẽ có ID của MOB, Mình và người khác.
frmmain.ID.Text = Mid(sData, 1, 8)
Call HPMPUpdate(sData) 'HP/MP - change
3. Thêm frmmain cái này: nhấp đôi vào nút cmdGetIDPlayer:
Private Sub cmdGetIDPlayer_Click()
If ID.Text <> "" Then
PlayerID.Text = ID.Text
InjectPacket "7045", PlayerID.Text, True, False ' select thử nếu nó chỉ vào mình là ID của mình đó.
End If
End Sub
 
Cách nhận biết đầu là ID của MOB và của người khác:
1. Khi gói tin "B045", mob đã được chọn, thì phía sau nó Mid(sData, 11, 2) <> "01" ==> tức là player, và = "01" là MOB.
2. Mỗi khi được chọn, ở frmmain chỗ Current Selection ID và HP tự động hiện lên, ta có thể sửa lại 1 chỗ, Ở PacketParser, ta có thể thêm hàng này:
Case Is = "B045"
If Mid(sData, 11, 2) <> "01" Then
frmmain.MobID.Text = "Player" ' ngừoi đó bạn
frmmain.MonsterHP.Text = "0"
Else ' MOB đó
frmmain.MonsterHP.Text = "Max"

End If
3. Ai viết tiếp chỗ Clear mob khi nó là Player dùm :)
.
___________Auto Merge________________

.
Cách lấy Skill nhận vật bất cứ lúc nào:
1. frmmain: thêm nút cmdGetSkill, listbox tên GetISkillID:
Thêm đoạn mã cho nút:
Private Sub cmdGetSkill_Click()

Dim i As Integer
If frmmain.GetISkillID.ListCount > 0 Then
i = frmmain.GetISkillID.ListCount - 1 ' lấy từ dưới lên

frmmain.lSkillName.AddItem GetSkillName(frmmain.GetISkillID.List(i)) & "(" & frmmain.GetISkillID.List(i) & ")"

frmmain.GetISkillID.RemoveItem (i)
End If
End Sub
2. Trong PacketParser thêm cái này chỗ 'Client:
Case Is = "7074" ' khi có sự kiện ra skill
frmmain.GetISkillID.AddItem Mid(sData, 5, 8) 'lấy từ chỗ thứ 5
3. Sửa lại 1 chút ở các chỗ add imbue, skill, buff:
Private Sub ImbueAdd_Click()
cmbImbue.Text = ""
ImbueID.Text = Mid(lSkillName.Text, Len(lSkillName.Text) - 8, 8)
ImbueStatus.Text = "Not Active"
cmbImbue.Text = lSkillName.Text
End Sub
Private Sub cmdAddBuff_Click()
If lSkillName.ListCount > 0 Then

lBuffStatus.AddItem "Not Active"
lBuffID.AddItem Mid(lSkillName.Text, Len(lSkillName.Text) - 8, 8)
lBuffList.AddItem lSkillName.Text

End If
End Sub
Private Sub cmdAddSkill_Click()
lSkillID.AddItem Mid(lSkillName.Text, Len(lSkillName.Text) - 8, 8)
lSkillStatus.AddItem "Not Active"
lAttackList.AddItem lSkillName.Text
End Sub
4. Ý định:
Viết 1 autoskill theo dạng send ngầm.... :), chưa thực hiện :d
 
Cái phBot này phân tích cái opcode này từ packet theo kiểu gì vậy! Chứ cứ nói thế này không thống nhất lẫn nhau gì cả! Sniffing packet mỗi người mỗi khác mà! :D ! Ai có source thì up lên đoạn mã phân tích cái opcode và cái sData đằng sau cho coi với! Sợ phân tích opcode mỗi người mỗi khác ráp lại với nhau chả packet nào ra packet nào :'>
 
Dĩ nhiên là việc phân tích opcode phải được thống nhất chung chứ. Dựa trên analyzer thôi.
Đầu tiên tôi phân tích nguyên tắc làm việc của PHBot cho bạn :
- Đầu tiên nuconnect sẽ connect tới server (VN): 222.255.38.18 với cổng : 15779.
- Nuconnect sẽ mở thêm 2 socket listen:
+ Với bot ( IP : 127.0.0.1 ,cổng 22580)
+ Với game client ( IP : 127.0.0.1 đã chỉnh cổng 15778 trong media.pk2)
Như vậy : khi có 1 tín hiệu từ server chuyển tới nuconnect, nuconnect sẽ gởi packet tới bot + game. Hoặc ngược lại packet từ bot hay game sẽ được chuyển tới server thông qua nuconnect.
Tiếp theo là việc phân tích opcode :
Giả sử có 1 gói tín hiệu như sau gởi tới server: 0700 7470 0100 0105302E000000 (chuỗi này được viết liền)
được chia ra làm các phần sau :
- 0700 : độ dài của sdata là 14/2 = 7
- 7470 : được inverse 70 74, đây là opcode 7074
- 0100 : được qui định là gởi tới server và Encrypted hay không.
- sdata : 0105302E000000
 
Chà! Cái analyze của HCM_Roya làm việc tốt quá. Có 1 điếu là tui chưa hiểu là khi mình nhận cái packet từ server gửi đến thì nó gửi dưới dạng chuổi string hay là hex (vì cái packet sniffer của mình nó hiện tới 2 cái lận)! ::) Đây là packet mình đã mã hóa định dạng dưới dạng gì để gửi đến server! Bạn có thể upsource để phân tích packet từ server và mã hóa packet để gửi đến server cho mình tham khảo dc không :p
 
Chà! Cái analyze của HCM_Roya làm việc tốt quá. Có 1 điếu là tui chưa hiểu là khi mình nhận cái packet từ server gửi đến thì nó gửi dưới dạng chuổi string hay là hex (vì cái packet sniffer của mình nó hiện tới 2 cái lận)! ::) Đây là packet mình đã mã hóa định dạng dưới dạng gì để gửi đến server! Bạn có thể upsource để phân tích packet từ server và mã hóa packet để gửi đến server cho mình tham khảo dc không :p

http://forum.gamevn.com/showthread.php?t=326108
Cái này là do bác mudzot đi đầu. Những người theo sau đều một phần từ đó mà ra cả :D.
 
Status
Không mở trả lời sau này.
Back
Top