Thanks , but it doesn't work.
Here the au3 file from the 1# Post but I edited the Opcodes/Packes.
I'm playing iSro.
Thanks for replays.
Code:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <string.au3>
Global $controlArray[37][5]
Global $globalParseIndex = 0
Global $globalParseSize = 0
Global $globalParseBuffer = ""
Global $globalSendBuffer = ""
Global $globalSendSize = 0
Global $mainwindow = 0
Global $serverStatsTimer = 0
Global $doRequestStats = true
;SplashImageOn("edxLabs Proudly Presents...", "beeker2.jpg", 304, 378)
;Sleep(3000)
;SplashOff()
TCPStartup()
$iIP = TCPNameToIP("127.0.0.1")
$iSocket = TCPConnect($iIP, 22580);22580 / Standart: 16000 / Kp: 15778
If $iSocket = -1 Then
MsgBox(64, "edxAutoitClientless", "Connection Failure.")
Exit
EndIf
$mainwindow = GUICreate("edxAutoItClientless", 800, 600)
GUISwitch($mainwindow)
$tab = GUICtrlCreateTab(10, 10, 800 - 20, 600 - 20)
$tab0 = GUICtrlCreateTabItem("Home")
$tab1 = GUICtrlCreateTabItem("Server Stats")
For $i = 0 to 18
$controlArray[$i][0] = GUICtrlCreateInput("000", 20, 40 + $i * 20, 25, 20)
$controlArray[$i][1] = GUICtrlCreateInput("Servername", 50, 40 + $i * 20, 90, 20)
$controlArray[$i][2] = GUICtrlCreateInput("0000", 140, 40 + $i * 20, 30, 20)
$controlArray[$i][3] = GUICtrlCreateInput("0000", 170, 40 + $i * 20, 30, 20)
$controlArray[$i][4] = GUICtrlCreateInput("00", 200, 40 + $i * 20, 20, 20)
Next
For $i = 19 to 36
$controlArray[$i][0] = GUICtrlCreateInput("000", 20 + 240, 40 + ($i - 19) * 20, 25, 20)
$controlArray[$i][1] = GUICtrlCreateInput("Servername", 50 + 240, 40 + ($i - 19) * 20, 90, 20)
$controlArray[$i][2] = GUICtrlCreateInput("0000", 140 + 240, 40 + ($i - 19) * 20, 30, 20)
$controlArray[$i][3] = GUICtrlCreateInput("0000", 170 + 240, 40 + ($i - 19) * 20, 30, 20)
$controlArray[$i][4] = GUICtrlCreateInput("00", 200 + 240, 40 + ($i - 19) * 20, 20, 20)
Next
$tab2 = GUICtrlCreateTabItem("Login")
GUICtrlCreateLabel("Account: ", 20, 43, 50)
Global $controlName = GUICtrlCreateInput("", 80, 40, 121, 20, BitOR($SS_LEFT, $ES_PASSWORD))
GUICtrlCreateLabel("Password: ", 20, 63, 50)
Global $controlPass = GUICtrlCreateInput("", 80, 60, 121, 20, BitOR($SS_LEFT, $ES_PASSWORD))
GUICtrlCreateLabel("Server: ", 20, 83, 50)
Global $controlServer = GUICtrlCreateCombo("xian", 80, 80, 121, 20)
GUICtrlSetData(-1, "aege|troy|athens|oasis|venice|greece|alps|olympus|tibet|babel|redsea|rome|sparta|********|pacific|alexander|persia|zeus|poseidon|hercules|odin|mercury|mars|saturn|venus|uranus|pluto|neptune|hera|gaia|eos|phoenix|ares|iris|titan|apollo") ; add other item snd set a new default
Global $controlLogin = GUICtrlCreateButton("Login!", 125, 105, 75)
Global $controlLog = GUICtrlCreateEdit("Welcome to edxAutoItClientless!" & @CRLF, 20, 150, 755, 420, $ES_AUTOVSCROLL + $WS_VSCROLL)
GUICtrlSetData($controlLog, "Made By: pushedx" & @CRLF, 1)
GUICtrlSetData($controlLog, "" & @CRLF, 1)
Global $controlCharacter = GUICtrlCreateCombo("Character Select", 300, 40, 121, 20)
Global $controlJoin = GUICtrlCreateButton("Let's Roll!", 430, 40, 75, 20)
GUISetState(@SW_SHOW)
$loginAttempts = 0
while 1
UpdateGui()
If @error Then
ExitLoop
Endif
if $doRequestStats and TimerDiff($serverStatsTimer) > 3000 Then
BeginPacket(0x6101)
EndPacket()
TCPSend($iSocket, GetPacket())
$doRequestStats = False ; Wait for the new packet to be received
Endif
$packetSize = TryReadWord($iSocket)
If @error == 0 Then
$packetOpcode = ReadWord($iSocket)
If @error Then
ExitLoop
Endif
$packetSecurity = ReadWord($iSocket)
If @error Then
ExitLoop
Endif
$packetData = ReadArray($iSocket, Dec($packetSize))
If @error Then
ExitLoop
Endif
;MsgBox(0, "", "$packetSize =" & $packetSize & chr(13) & "$packetOpcode =" & HexToStrWord($packetOpcode) & chr(13) & "$packetSecurity =" & $packetSecurity & chr(13) & $packetData)
Switch $packetOpcode
case "1007" ; Identify ;ps 2001
BeginParse($packetData, Dec($packetSize))
$field1 = Dec(ParseWord()) ; length
$field2 = ParseAscii($field1)
if $field2 == "GatewayServer" then
BeginPacket(0x6100)
AppendByte(18) ; ISRO locale
AppendWord(9) ; length
AppendString("SR_Client") ; identity
AppendDword(290) ; version
EndPacket()
TCPSend($iSocket, GetPacket())
elseif $field2 == "AgentServer" then
; Nothing to do here
endif
case "A107" ; Server stats ;ps A101
$doRequestStats = true
BeginParse($packetData, Dec($packetSize))
$field1 = Dec(ParseByte())
$field2 = Dec(ParseByte())
$coreNameLength = Dec(ParseWord())
$coreName = ParseAscii($coreNameLength)
$nullTerm = ParseByte() ; null terminator
$nextServer = Dec(ParseByte())
$index = 0
while $nextServer == 1
$serverId = Dec(ParseWord())
$serverNameLength = Dec(ParseWord())
$serverName = ParseAscii($serverNameLength)
$serverCur = Dec(ParseWord())
$serverMax = Dec(ParseWord())
$serverState = Dec(ParseByte())
$nextServer = Dec(ParseByte())
GUICtrlSetData($controlArray[$index][0], $serverId)
GUICtrlSetData($controlArray[$index][1], $serverName)
GUICtrlSetData($controlArray[$index][2], $serverCur)
GUICtrlSetData($controlArray[$index][3], $serverMax)
GUICtrlSetData($controlArray[$index][4], $serverState)
$index = $index + 1
WEnd
$serverStatsTimer = TimerInit()
case "0FF2" ; Login result // old: A102 oder 2 ;ps A102 oder 0FF2 - 3
BeginParse($packetData, Dec($packetSize))
$result = Dec(ParseByte())
if $result == 1 Then
$loginId = Dec(ParseDword())
$ipNameLength = Dec(ParseWord())
$ipName = ParseAscii($ipNameLength)
$ipPort = Dec(ParseWord())
AppendStatusText("You are ready to join the world server!")
AppendStatusText("Connecting to " & $ipName & ":" & $ipPort)
$iSocket = 0
$iSocket = TCPConnect($ipName, $ipPort) ; All we have to do is connect to the new IP/Port
$doRequestStats = False
Else
$result = Dec(ParseByte()) ; Some error, we need to handle them all in a real program
if $result == 5 Then
$loginAttempts = $loginAttempts + 1
AppendStatusText("Could not connect due to server traffic [" & $loginAttempts & "]")
Else
AppendStatusText("There was an error logging into this account")
EndIf
EndIf
case "0FF3" ; World server login result // A107 old ;ps A103
BeginParse($packetData, Dec($packetSize))
$result = Dec(ParseByte())
if $result == 1 Then
AppendStatusText("You are now connected to the world server!")
BeginPacket(0x749F) ; Request character listing [TODO: Update each opcode change]
AppendByte(2) ; Request list
EndPacket()
TCPSend($iSocket, GetPacket())
EndIf
case "B007" ; Char listing [TODO: Update each opcode change]
BeginParse($packetData, Dec($packetSize))
$operation = Dec(ParseByte())
if $operation == 2 then ; char listing
$result = Dec(ParseByte())
$charCount = Dec(ParseByte())
AppendStatusText("Found " & $charCount & " characters")
For $c = 1 to $charCount
$charType = Dec(ParseDword())
$charNameLength = Dec(ParseWord())
$charName = ParseAscii($charNameLength)
AppendStatusText("Found character: " & $charName)
GUICtrlSetData($controlCharacter, $charName, 1)
$charVol = Dec(ParseByte())
$charLvl = Dec(ParseByte())
AppendStatusText("Level: " & $charLvl)
$charExp = Dec(ParseQWord())
$charStr = Dec(ParseWord())
$charInt = Dec(ParseWord())
$charAttr = Dec(ParseWord())
$charHp = Dec(ParseDword())
$charMp = Dec(ParseDword())
AppendStatusText("HP/MP: " & $charHp & "/" & $charMp)
$doDelete = Dec(ParseByte())
if $doDelete == 1 then
$charMinsToDel = Dec(ParseDword())
EndIf
$unk1 = Dec(ParseWord())
$unk2 = Dec(ParseByte())
$itemCount = Dec(ParseByte())
AppendStatusText("This character has " & $itemCount & " items equipped.")
For $i = 1 to $itemCount
$itemId = Dec(ParseDword())
$itemPlus = Dec(ParseByte())
AppendStatusText("[" & $itemId & "][+ " & $itemPlus & "]")
Next
$itemCount = Dec(ParseByte())
AppendStatusText("This character has " & $itemCount & " avatar items equipped.")
For $i = 1 to $itemCount
$itemId = Dec(ParseDword())
$itemPlus = Dec(ParseByte())
AppendStatusText("[" & $itemId & "][+ " & $itemPlus & "]")
Next
AppendStatusText("")
Next
Endif
case "B001" ; Char selection (205) [TODO: Update each opcode change]
BeginParse($packetData, Dec($packetSize))
$result = Dec(ParseByte())
if $result == 1 then
AppendStatusText("Joining the game now...")
else
AppendStatusText("There was an error selecting this character. Please choose a different one.")
EndIf
case "3013" ; Char id and time (205) [TODO: Update each opcode change] ;ps 332A
BeginParse($packetData, Dec($packetSize))
$charId = ParseDword()
$time_celestialPosition = Dec(ParseWord()) ; moon/sun
$time_hrs = Dec(ParseByte())
$time_mins = Dec(ParseByte())
AppendStatusText("My Character Id: " & $charId)
AppendStatusText("Time " & $time_hrs & ":" & $time_mins)
AppendStatusText("Celestial Position: " & $time_celestialPosition)
BeginPacket(0x328A) ; Send spawn packet [TODO: Update each opcode change]
EndPacket()
TCPSend($iSocket, GetPacket())
EndSwitch
ElseIf @error <> -3 Then
ExitLoop
Endif
wend
TCPShutdown()
;----------------------------------------------------------------------------------------------------
Func ReadByte($iSocket)
$lb = TCPRecv($iSocket, 1)
while $lb == ""
UpdateGui()
If @error Then
SetError(-2)
return 0
EndIf
$lb = TCPRecv($iSocket, 1)
If @error Then
SetError(-1)
return 0
EndIf
WEnd
return Hex(Binary($lb))
EndFunc
;----------------------------------------------------------------------------------------------------
Func ReadWord($iSocket)
$hb = TCPRecv($iSocket, 1)
while $hb == ""
UpdateGui()
If @error Then
SetError(-2)
return 0
EndIf
$hb = TCPRecv($iSocket, 1)
If @error Then
SetError(-1)
return 0
EndIf
WEnd
$lb = TCPRecv($iSocket, 1)
while $lb == ""
UpdateGui()
If @error Then
SetError(-2)
return 0
EndIf
$lb = TCPRecv($iSocket, 1)
If @error Then
SetError(-1)
return 0
EndIf
WEnd
return Hex(Binary($lb) & Binary($hb))
EndFunc
;----------------------------------------------------------------------------------------------------
Func TryReadWord($iSocket)
$hb = TCPRecv($iSocket, 1)
if $hb == "" Then
SetError(-3)
return 0
EndIf
$lb = TCPRecv($iSocket, 1)
while $lb == ""
UpdateGui()
If @error Then
SetError(-2)
return 0
EndIf
$lb = TCPRecv($iSocket, 1)
If @error Then
SetError(-1)
return 0
EndIf
WEnd
SetError(0)
return Hex(Binary($lb) & Binary($hb))
EndFunc
;----------------------------------------------------------------------------------------------------
Func ReadArray($iSocket, $count)
$data = ""
For $i = 1 to $count Step 1
UpdateGui()
If @error Then
SetError(-2)
return 0
EndIf
$data = $data & ReadByte($iSocket)
If @error Then
SetError(-1)
return 0
EndIf
Next
return $data
EndFunc
;----------------------------------------------------------------------------------------------------
Func HexToStrWord($var)
$len = StringLen($var)
if $len > 4 then
return StringRight($var, 4)
elseif $len == 4 then
return $var
elseif $len == 3 then
return "0" & $var
elseif $len == 2 then
return "00" & $var
elseif $len == 1 then
return "000" & $var
endif
EndFunc
;----------------------------------------------------------------------------------------------------
Func HexToStrDword($var)
$len = StringLen($var)
if $len > 8 then
return StringRight($var, 8)
elseif $len == 8 then
return $var
elseif $len == 7 then
return "0" & $var
elseif $len == 6 then
return "00" & $var
elseif $len == 5 then
return "000" & $var
elseif $len == 4 then
return "0000" & $var
elseif $len == 3 then
return "00000" & $var
elseif $len == 2 then
return "000000" & $var
elseif $len == 1 then
return "0000000" & $var
endif
EndFunc
;----------------------------------------------------------------------------------------------------
Func HexToStrByte($var)
$len = StringLen($var)
if $len > 2 then
return StringRight($var, 2)
elseif $len == 2 then
return $var
else ; Error condition
return "00"
endif
EndFunc
;----------------------------------------------------------------------------------------------------
Func BeginParse($buffer, $size)
$globalParseIndex = 1
$globalParseSize = $size
$globalParseBuffer = $buffer
EndFunc
;----------------------------------------------------------------------------------------------------
Func ParseByte()
$result = StringMid($globalParseBuffer, $globalParseIndex, 2)
$globalParseIndex = $globalParseIndex + 2
return $result
EndFunc
;----------------------------------------------------------------------------------------------------
Func ParseWord()
$low = ParseByte()
$hi = ParseByte()
return $hi & $low
EndFunc
;----------------------------------------------------------------------------------------------------
Func ParseDword()
$low = ParseWord()
$hi = ParseWord()
return $hi & $low
EndFunc
;----------------------------------------------------------------------------------------------------
Func ParseQWord()
$low = ParseDword()
$hi = ParseDword()
return $hi & $low
EndFunc
;----------------------------------------------------------------------------------------------------
Func ParseAscii($length)
$result = StringMid($globalParseBuffer, $globalParseIndex, $length * 2)
$globalParseIndex = $globalParseIndex + ($length * 2)
$len = StringLen($result)
$strResult = ""
For $i = 1 to $len Step 2
$strResult = $strResult & Chr(Dec(StringMid($result, $i, 2)))
Next
return $strResult
EndFunc
;----------------------------------------------------------------------------------------------------
Func ParseUnicode($length)
$result = StringMid($globalParseBuffer, $globalParseIndex, $length * 4)
$globalParseIndex = $globalParseIndex + ($length * 4)
$len = StringLen($result)
$strResult = ""
For $i = 1 to $len Step 4
$strResult = $strResult & ChrW(Dec(StringMid($result, $i, 4)))
Next
return $strResult
EndFunc
;----------------------------------------------------------------------------------------------------
Func BeginPacket($opcode)
$globalSendBuffer = ""
$globalSendSize = 0
$sOpcode = HexToStrWord(Hex($opcode))
$globalSendBuffer = StringMid($sOpcode, 3, 2) & StringMid($sOpcode, 1, 2)
$globalSendBuffer = $globalSendBuffer & "0000" ; Security bytes
;MsgBox(0, "", $globalSendBuffer)
EndFunc
Func AppendByte($value)
$sValue = HexToStrByte(Hex($value))
$globalSendBuffer = $globalSendBuffer & $sValue
$globalSendSize = $globalSendSize + 1
EndFunc
Func AppendWord($value)
$sValue = HexToStrWord(Hex($value))
$globalSendBuffer = $globalSendBuffer & StringMid($sValue, 3, 2) & StringMid($sValue, 1, 2)
$globalSendSize = $globalSendSize + 2
EndFunc
Func AppendDword($value)
$sValue = HexToStrDword(Hex($value))
$globalSendBuffer = $globalSendBuffer & StringMid($sValue, 7, 2) & StringMid($sValue, 5, 2) & StringMid($sValue, 3, 2) & StringMid($sValue, 1, 2)
$globalSendSize = $globalSendSize + 4
EndFunc
Func AppendString($value)
For $i = 1 to StringLen($value) Step 1
$xh = StringMid($value, $i, 1)
$sValue = HexToStrByte(Hex(Asc($xh)))
$globalSendBuffer = $globalSendBuffer & $sValue
$globalSendSize = $globalSendSize + 1
Next
EndFunc
Func EndPacket()
$sSize = HexToStrWord(Hex($globalSendSize))
$globalSendBuffer = (StringMid($sSize, 3, 2) & StringMid($sSize, 1, 2)) & $globalSendBuffer
;MsgBox(0, "", $globalSendBuffer)
EndFunc
Func GetPacket()
return _HexToString($globalSendBuffer)
EndFunc
;----------------------------------------------------------------------------------------------------
Func UpdateGui()
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
SetError(-2)
Return
Case $msg = $controlJoin
$n = GUICtrlRead($controlCharacter, 1)
if StringLen($n) == 0 then
$n = GUICtrlRead($controlCharacter)
if StringLen($n) == 0 then
MsgBox(0, "", "Please choose a Character")
return
endif
endif
if StringCompare($n, "Character Select") == 0 then
MsgBox(0, "", "Please choose a Character")
return
endif
BeginPacket(0x77B0) ; [TODO: Update each opcode change]
AppendWord(StringLen($n))
AppendString($n)
EndPacket()
TCPSend($iSocket, GetPacket())
AppendStatusText("Attempting to login with character: " & $n)
Case $msg = $controlLogin
$n = GUICtrlRead($controlName)
if StringLen($n) == 0 then
MsgBox(0, "", "Please enter an Account")
return
endif
$p = GUICtrlRead($controlPass)
if StringLen($p) == 0 then
MsgBox(0, "", "Please enter a Password")
return
endif
$s = GUICtrlRead($controlServer)
;MsgBox(0, "", $n & " " & $p & " " & $s)
$doRequestStats = False
BeginPacket(0x6102)
AppendByte(18)
AppendWord(StringLen($n))
AppendString($n)
AppendWord(StringLen($p))
AppendString($p)
AppendWord(ServerToId($s))
EndPacket()
TCPSend($iSocket, GetPacket())
EndSelect
EndFunc
;----------------------------------------------------------------------------------------------------
Func ServerToId($server)
if StringCompare($server, "xian") == 0 Then
return 65
Endif
if StringCompare($server, "aege") == 0 Then
return 74
Endif
if StringCompare($server, "troy") == 0 Then
return 76
Endif
if StringCompare($server, "athens") == 0 Then
return 94
Endif
if StringCompare($server, "oasis") == 0 Then
return 96
Endif
if StringCompare($server, "venice") == 0 Then
return 102
Endif
if StringCompare($server, "greece") == 0 Then
return 107
Endif
if StringCompare($server, "alps") == 0 Then
return 113
Endif
if StringCompare($server, "olympus") == 0 Then
return 114
Endif
if StringCompare($server, "tibet") == 0 Then
return 132
Endif
if StringCompare($server, "babel") == 0 Then
return 134
Endif
if StringCompare($server, "redsea") == 0 Then
return 150
Endif
if StringCompare($server, "rome") == 0 Then
return 151
Endif
if StringCompare($server, "sparta") == 0 Then
return 152
Endif
if StringCompare($server, "********") == 0 Then
return 156
Endif
if StringCompare($server, "pacific") == 0 Then
return 159
Endif
if StringCompare($server, "alexander") == 0 Then
return 162
Endif
if StringCompare($server, "persia") == 0 Then
return 165
Endif
if StringCompare($server, "zeus") == 0 Then
return 166
Endif
if StringCompare($server, "poseidon") == 0 Then
return 174
Endif
if StringCompare($server, "hercules") == 0 Then
return 178
Endif
if StringCompare($server, "odin") == 0 Then
return 179
Endif
if StringCompare($server, "mercury") == 0 Then
return 180
Endif
if StringCompare($server, "mars") == 0 Then
return 181
Endif
if StringCompare($server, "saturn") == 0 Then
return 182
Endif
if StringCompare($server, "venus") == 0 Then
return 183
Endif
if StringCompare($server, "uranus") == 0 Then
return 187
Endif
if StringCompare($server, "pluto") == 0 Then
return 188
Endif
if StringCompare($server, "neptune") == 0 Then
return 190
Endif
if StringCompare($server, "hera") == 0 Then
return 191
Endif
if StringCompare($server, "gaia") == 0 Then
return 194
Endif
if StringCompare($server, "eos") == 0 Then
return 204
Endif
if StringCompare($server, "phoenix") == 0 Then
return 205
Endif
if StringCompare($server, "ares") == 0 Then
return 206
Endif
if StringCompare($server, "iris") == 0 Then
return 207
Endif
if StringCompare($server, "titan") == 0 Then
return 208
Endif
if StringCompare($server, "apollo") == 0 Then
return 209
Endif
EndFunc
;----------------------------------------------------------------------------------------------------
; Wrapper function to make life a little easier
Func AppendStatusText($text)
GUICtrlSetData($controlLog, $text & @CRLF, 1)
EndFunc
;----------------------------------------------------------------------------------------------------