PDA

Просмотр полной версии : [Скрипт] Помогите если не сложно


kolyn10
27.12.2011, 22:36
#NoTrayIcon
#include <String.au3>
#include <GuiListView.au3>
#include <GuiListBox.au3>
#include <Array.au3>
#include "skillData.au3"
#include "itemData.au3"
#include "mobData.au3"

;---------------------------------------------------------------------------------------

Global $run = false, $targetId, $target = false, $myX, $myY, $myId, $attackTimer, $pickTimer, $walkTimer, $targetTimer
Global $dropId, $drop = false, $killedId, $imbueTimer, $mob_list[200], $buffing = false, $nextBuff, $buffTimer, $buffingDelay

Opt("GUIOnEventMode", 1)

;---------------------------------------------------------------------------------------

GUICreate("jreBot [vSRO110]", 283, 370, 297, 245)
GUICtrlCreateTab(0, 0, 281, 369)
GUICtrlCreateTabItem("Main")
GUICtrlCreateGroup("Center Area (x, y)", 8, 40, 249, 81)
$xInput = GUICtrlCreateInput("", 16, 72, 49, 21)
$yInput = GUICtrlCreateInput("", 72, 72, 49, 21)
$setXY = GUICtrlCreateButton("Set Current", 184, 72, 67, 25)
GUICtrlCreateGroup("Pick", 8, 136, 113, 137)
$goldCbox = GUICtrlCreateCheckbox("Gold", 16, 168, 97, 17)
$itemCbox = GUICtrlCreateCheckbox("Equipments", 16, 200, 97, 17)
$elixirCbox = GUICtrlCreateCheckbox("Elixirs", 16, 232, 97, 17)
$start = GUICtrlCreateButton("Start", 32, 320, 99, 33)
$stop = GUICtrlCreateButton("Stop", 152, 320, 99, 33)
GUICtrlCreateTabItem("Skills")
$skillList = GUICtrlCreateListView("Name|ID", 8, 48, 154, 310)
$attackList = GUICtrlCreateList("", 176, 49, 97, 90)
$buffList = GUICtrlCreateList("", 176, 177, 97, 90)
$addSkill = GUICtrlCreateButton("Add Attack", 192, 139, 67, 17)
$delSkill = GUICtrlCreateButton("Del Attack", 192, 158, 67, 17)
$addBuff = GUICtrlCreateButton("Add Buff", 192, 267, 67, 17)
$delBuff = GUICtrlCreateButton("Del Buff", 192, 286, 67, 17)
$imbueInput = GUICtrlCreateInput("", 176, 312, 89, 22)
$addImbue = GUICtrlCreateButton("Add Imbue", 176, 339, 67, 17)
GUISetState(@SW_SHOW)

;---------------------------------------------------------------------------------------

TCPStartUp()
$socket = TCPConnect("127.0.0.1", 22580)
If @Error Then Exit
Load()

GUISetOnEvent(-3, "Close")
GUICtrlSetOnEvent($start, "Start")
GUICtrlSetOnEvent($stop, "Stop")
GUICtrlSetOnEvent($setXY, "SetXY")
GUICtrlSetOnEvent($addSkill, "AddAttack")
GUICtrlSetOnEvent($addBuff, "AddBuff")
GUICtrlSetOnEvent($delSkill, "DelAttack")
GUICtrlSetOnEvent($delBuff, "DelBuff")
GUICtrlSetOnEvent($addImbue, "AddImbue")

;---------------------------------------------------------------------------------------

While 1
$recv = ReadPacket()
$size = Dec(StringMid($recv, 3, 2) & StringMid($recv, 1, 2))
$opcode = StringMid($recv, 7, 2) & StringMid($recv, 5, 2)
$data = StringMid($recv, 13)

Switch $opcode
Case "B021" ;object moving
BeginParse($data, $size)
$id = ParseDword()
ParseByte()
$xSection = Dec(ParseByte())
$ySection = Dec(ParseByte())
$xOffset = Dec(ParseWord())
$zOffset = Dec(ParseWord())
$yOffset = Dec(ParseWord())
$x = ($xSection - 135) * 192 + ($xOffset /10 )
$y = ($ySection - 92) * 192 + ($yOffset / 10 )
If $id = $myId Then
If $size = 24 Then
$myX = $x
$myY = $y
EndIf
EndIf

Case "B034"
If $data = "021218" Then
RemoveDrop($dropId)
EndIf

Case "B045" ;select response
If $size = 12 Then
BeginParse($data, $size)
$byte1 = ParseByte()
$id = ParseDword()
$byte2 = ParseByte()
$hp = Dec(ParseDword())
$byte3 = ParseByte()
$byte4 = ParseByte()

If $byte1 = "01" AND $byte2 = "01" AND $byte3 = "01" AND $byte4 = "05" AND $hp > 1 Then
SetTarget($id)
EndIf
EndIf

Case "B070" ;lot of things?
BeginParse($data, $size)
$flag = ParseByte()
$type = ParseWord()
If $flag = "01" Then
$idc = ParseDword()
$mobId = ParseDword()
$idc = ParseDword()
$victim = ParseDword()

If $victim = $myId Then ;something attacking us
If $run = true AND $mobId <> $targetId Then
InjectPacket("7045", Rev($mobId))
EndIf
EndIf
EndIf

Case "3013" ;chardata
BeginParse($data, $size)
LoadSkills($data)

Case "3015" ;singe spawn
BeginParse($data, $size)
$model = ParseDword()
If IsGold($model) = true Then
$amount = Dec(ParseDword())
$goldId = ParseDword()
$globalParseIndex += 46
$mobId = ParseDword()
If $mobId = $killedId AND GUICtrlRead($goldCbox) = 1 Then
SetDrop($goldId)
EndIf
ElseIf IsEquip($model) = true Then
$dunno = ParseByte()
$equipId = ParseDword()
$globalParseIndex += 46
$mobId = ParseDword()
If $mobId = $killedId AND GUICtrlRead($itemCbox) = 1 Then
SetDrop($equipId)
EndIf
ElseIf IsElixir($model) = true Then
$elixirId = ParseDword()
$globalParseIndex += 46
$mobId = ParseDword()
If $mobId = $killedId AND GUICtrlRead($elixirCbox) = 1 Then
SetDrop($elixirId)
EndIf
Else
LoadMobs($data)
EndIf

Case "3016" ;singe despawn
BeginParse($data, $size)
$id = ParseDword()
RemoveTarget($id)
RemoveDrop($id)
RemoveMob($id)

Case "3017" ;groupspawn start
BeginParse($data, $size)
Global $spawnType = ParseByte()
Global $spawnAmount = Dec(ParseWord())

Case "3019" ;groupspawn/despawn
BeginParse($data, $size)
If $spawnType = "01" Then
LoadMobs($data)
ElseIf $spawnType = "02" Then
For $i = 0 To $spawnAmount
$id = ParseDword()
RemoveTarget($id)
RemoveDrop($id)
RemoveMob($id)
Next
EndIf

Case "3020" ;charspawn
BeginParse($data, $size)
$myId = ParseDword()

Case "3056" ;exp received
BeginParse($data, $size)
$id = ParseDword()
$killedId = $id
RemoveTarget($id)
RemoveMob($id)

Case "70A1" ;skill update
BeginParse($data, $size)
$newId = ParseDword()
UpdateSkill($newId)
EndSwitch

If $run = true Then
If $target = true AND $drop = false AND TimerDiff($attackTimer) > 300 AND $buffing = false Then
UseSkill($targetId)
$attackTimer = TimerInit()
EndIf

If $target = false AND TimerDiff($targetTimer) > 500 Then
$nextTarget = $mob_list[0]
If $nextTarget <> "" AND $nextTarget <> $killedId Then
InjectPacket("7045", Rev($nextTarget))
EndIf
$targetTimer = TimerInit()
EndIf

If $drop = true AND TimerDIff($pickTimer) > 500 AND $buffing = false Then
InjectPacket("7074", "010201" & Rev($dropId))
$pickTimer = TimerInit()
EndIf

If TimerDiff($walkTimer) > 2000 AND $target = false AND $buffing = false Then
Walk(GUICtrlRead($xInput), GUICtrlRead($yInput))
$walkTImer = TimerInit()
EndIf

If TimerDiff($buffTimer) > 200000 Then BeginBuffing()
If TimerDiff($buffingDelay) > 4000 AND $buffing = true Then UseBuff()

If TimerDiff($imbueTimer) > 1000 AND $target = true Then
If GUICtrlRead($imbueInput) <> "" Then
InjectPacket("7074", "0104" & Rev(GUICtrlRead($imbueInput)) & "00")
EndIf
$imbueTimer = TimerInit()
EndIf
EndIf
WEnd

;GUI EVENT FUNCTIONS--------------------------------------------------------------------------

Func Close()
Exit
EndFUnc

Func Start()
Save()
BeginBuffing()
$attackTimer = TimerInit()
$pickTimer = TimerInit()
$walkTimer = TimerInit()
$targetTimer = TimerInit()
$imbueTimer = TimerInit()
$target = false
$drop = false
$run = true
EndFunc

Func Stop()
$run = false
EndFunc

Func SetXY()
GUICtrlSetData($xInput, $myX)
GUICtrlSetData($yInput, $myY)
EndFUnc

Func AddAttack()
$index = _GUICtrlListView_GetSelectedIndices($skillList)
$text = _GUICtrlListView_GetItemText($skillList, Int($index), 1)
GUICtrlSetData($attackList, $text & "|")
EndFunc

Func AddBuff()
$index = _GUICtrlListView_GetSelectedIndices($skillList)
$text = _GUICtrlListView_GetItemText($skillList, Int($index), 1)
GUICtrlSetData($buffList, $text & "|")
EndFunc

Func DelAttack()
$index = _GUICtrlListBox_GetCurSel($attackList)
_GUICtrlListBox_DeleteString($attackList, $index)
EndFunc

Func DelBuff()
$index = _GUICtrlListBox_GetCurSel($buffList)
_GUICtrlListBox_DeleteString($buffList, $index)
EndFunc

Func AddImbue()
$index = _GUICtrlListView_GetSelectedIndices($skillList)
$text = _GUICtrlListView_GetItemText($skillList, Int($index), 1)
GUICtrlSetData($imbueInput, $text)
EndFunc

;---------------------------------------------------------------------------------------

Func ReadPacket()
$recv = Hex(Binary(TCPRecv($socket, 2)))
If $recv = "" Then
Return ""
Else
$size = Dec(StringMid($recv, 3, 2) & StringMid($recv, 1, 2))
$recv &= Hex(Binary(TCPRecv($socket, $size+4)))
Return $recv
EndIf
EndFunc

Func InjectPacket($opcode, $data, $security = "0100")
$size = Hex(StringLen($data) / 2, 4)
$size = StringMid($size, 3, 2) & StringMid($size, 1, 2)
$opcode = StringMid($opcode, 3, 2) & StringMid($opcode, 1, 2)
$packet = _HexToString($size & $opcode & $security & $data)
TCPSend($socket, $packet)
EndFunc

Func Rev($val)
$result = ""
For $i = 1 To StringLen($val) / 2
$byte = StringRight($val, 2)
$val = StringTrimRight($val, 2)
$result &= $byte
Next
Return $result
EndFunc

Func SetTarget($id)
$targetId = $id
$target = true
EndFunc

Func SetDrop($id)
$dropId = $id
$drop = true
EndFunc

Func RemoveTarget($id)
If $targetId = $id Then
$targetId = ""
$target = false
EndIf
EndFunc

Func RemoveDrop($id)
If $dropId = $id Then
$dropId = ""
$drop = false
EndIf
EndFunc

Func IsGold($id)
If $id = "00000001" Then
Return true
ElseIf $id = "00000002" Then
Return true
ElseIf $id = "00000003" Then
Return true
Else
Return false
EndIf
EndFunc

Func IsEquip($id)
$search = _ArraySearch($item_id, $id)
If $search <> -1 Then
Return true
Else
Return false
EndIf
EndFunc

Func IsElixir($id)
For $i = 3675 To 3682
If $id = Hex($i, 8) Then
Return true
EndIf
Next
Return false
EndFunc

Func LoadSkills($data)
_GUICtrlListView_DeleteAllItems($skillList)
For $i = 0 To UBound($skill_id) - 1
$id = StringMid($skill_id[$i], 1, 8)
$name = StringMid($skill_id[$i], 10)

If StringInStr($data, "01" & Rev($id) & "01") AND $id <> "00000500" Then
GUICtrlCreateListViewItem($name & "|" & $id, $skillList)
EndIf
Next
EndFunc

Func UpdateSkill($newId)
$id = ""
$name = ""
For $i = 0 To UBound($skill_id) - 1
$id = StringMid($skill_id[$i], 1, 8)
$name = StringMid($skill_id[$i], 10)
If $id = $newId Then ExitLoop
Next

$index = _GUICtrlListView_FindText($skillList, $name)
$oldId = _GUICtrlListView_GetItemText($skillList, Int($index), 1)
If $index <> -1 Then
_GUICtrlListView_DeleteItem($skillList, Int($index))
GUICtrlCreateListViewItem($name & "|" & $newId, $skillList)
EndIf

$index = _GUICtrlListBox_FindString($attackList, $oldId)
If $index <> -1 Then
_GUICtrlListBox_DeleteString($attackList, Int($index))
GUICtrlSetData($attackList, $newId & "|")
EndIf

$index = _GUICtrlListBox_FindString($buffList, $oldId)
If $index <> -1 Then
_GUICtrlListBox_DeleteString($buffList, Int($index))
GUICtrlSetData($buffList, $newId & "|")
EndIf

If GUICtrlRead($imbueInput) = $oldId Then
GUICtrlSetData($imbueInput, $newId)
EndIf
EndFunc

Func Walk($x, $y)
$xPosition = Mod($x, 192) * 10
$yPosition = Mod($y, 192) * 10
$xSection = ($x - $xPosition / 10) / 192 + 135
$ySection = ($y - $yPosition / 10) / 192 + 92
InjectPacket("7021", "01" & Hex($xSection, 2) & Hex($ySection, 2) & Rev(Hex($xPosition, 4)) & "FAFF" & Rev(Hex($yPosition, 4)))
EndFunc

Func UseSkill($monster)
$count = _GUICtrlListBox_GetCount($attackList)
$random = Random(0, $count)

$skill = _GUICtrlListBox_GetText($attackList, $random)
If $skill <> "" Then
InjectPacket("7074", "0104" & Rev($skill) & "01" & Rev($monster))
Else
InjectPacket("7074", "010101" & Rev($monster))
EndIf
EndFunc

Func BeginBuffing()
$buffing = true
$nextBuff = 0

$buffingDelay = TimerInit()
$buffTimer = TimerInit()
EndFunc

Func UseBuff()
$buffingDelay = TimerInit()
$skill = _GUICtrlListBox_GetText($buffList, $nextBuff)
If $skill <> "" Then
InjectPacket("7074", "0104" & Rev($skill) & "00")
EndIf

If $skill = "" Then
$buffing = false
EndIf
$nextBuff += 1
EndFunc

Func LoadMobs($data)
For $i = 0 To UBound($monster_id) - 1
$array = StringRegExp($data, Rev($monster_id[$i]) & "(.{44}?)", 3)
If IsArray($array) Then
For $x = 0 To UBound($array) - 1
$id = StringMid($array[$x], 1, 8)
$word = StringMid($array[$x], 41, 4)
If StringMid(Rev($id), 1, 2) = "00" AND StringMid(Rev($id), 3, 2) <> "00" Then
If $word = "0100" OR $word = "0001" OR $word = "0101" OR $word = "0000" Then
_ArrayPush($mob_list, Rev($id), 1)
EndIf
EndIf
Next
EndIf
Next
EndFunc

Func RemoveMob($id)
For $i = 0 To UBound($mob_list) - 1
If $mob_list[$i] = $id Then
_ArrayDelete($mob_list, $i)
_ArrayAdd($mob_list, "")
EndIf
Next
EndFunc

;-----------Packet parsing functions by pushedx!----------------------------------------

Func BeginParse($buffer, $size)
Global $globalParseIndex = 1
Global $globalParseSize = $size
Global $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 Save()
IniWrite(@ScriptDir & "\jreBot.ini", "Settings", "x", GUICtrlRead($xInput))
IniWrite(@ScriptDir & "\jreBot.ini", "Settings", "y", GUICtrlRead($yInput))
IniWrite(@ScriptDir & "\jreBot.ini", "Settings", "gold", GUICtrlRead($goldCbox))
IniWrite(@ScriptDir & "\jreBot.ini", "Settings", "item", GUICtrlRead($itemCbox))
IniWrite(@ScriptDir & "\jreBot.ini", "Settings", "elixir", GUICtrlRead($elixirCbox))
IniWrite(@ScriptDir & "\jreBot.ini", "Settings", "imbue", GUICtrlRead($imbueInput))

$skill = ""
For $i = 0 To _GUICtrlListBox_GetCount($attackList) - 1
$skill &= _GUICtrlListBox_GetText($attackList, $i) & "|"
Next
IniWrite(@ScriptDir & "\jreBot.ini", "Settings", "skills", $skill)

$buff = ""
For $i = 0 To _GUICtrlListBox_GetCount($buffList) - 1
$buff &= _GUICtrlListBox_GetText($buffList, $i) & "|"
Next
IniWrite(@ScriptDir & "\jreBot.ini", "Settings", "buffs", $buff)

EndFunc

Func Load()
GUICtrlSetData($xInput, IniRead(@ScriptDir & "\jreBot.ini", "Settings", "x", "" ))
GUICtrlSetData($yInput, IniRead(@ScriptDir & "\jreBot.ini", "Settings", "y", "" ))
GUICtrlSetData($imbueInput, IniRead(@ScriptDir & "\jreBot.ini", "Settings", "imbue", "" ))
GUICtrlSetData($attackList, IniRead(@ScriptDir & "\jreBot.ini", "Settings", "skills", "" ))
GUICtrlSetData($buffList, IniRead(@ScriptDir & "\jreBot.ini", "Settings", "buffs", "" ))
GUICtrlSetState($goldCbox, IniRead(@ScriptDir & "\jreBot.ini", "Settings", "gold", "4"))
GUICtrlSetState($itemCbox, IniRead(@ScriptDir & "\jreBot.ini", "Settings", "item", "4" ))
GUICtrlSetState($elixirCbox, IniRead(@ScriptDir & "\jreBot.ini", "Settings", "elixir", "4"))
EndFunc


Переведите пожалста скрипт на код дельфи. Хоть нужный мне кусок. Вот как мне взять в тагрет моба и использовать первый скилл? Я прост не знаю этих функций на дельфи и хочу понять как пишется.:confused: Или посоветуйте литературу ближе к этой теме. Заранее спасибо!!

VeTaL_UA
27.12.2011, 22:43
Фигасе код. Половина, конечно, откидывается при переводе, но всё же это слишком много, чтобы на шару переводить...

kolyn10
29.12.2011, 13:48
Ну если не можете перевести хоть куски кода,хоть подскажите в какую сторону копать? Или литературу посоветуйте.

Mebius
29.12.2011, 15:10
Ну если не можете перевести хоть куски кода,хоть подскажите в какую сторону копать? Или литературу посоветуйте.

что б переводить с одного языка на другой надо знать хотя бы основы обоих языков, так что копать тебе в сторону учебников по обоим этим языкам, лучше всего из этих двух ты должен знать делфи, тк почти все языки отличаются друг от друга синтаксисом и назначением, компиляторы и среды я в расчет не беру

kolyn10
29.12.2011, 16:10
Так что мне искать в гугле я хз.Я толком незнаю чё ищу!Дельфи уроки но какие??Какие функции или компоненты мне нужны?Подскажите с чего начинать? Дельфи для начинающих,исходники каких то игр тут не катит! Так что мне искать????)

Number/1/
29.12.2011, 17:18
Так что мне искать в гугле я хз.Я толком незнаю чё ищу!Дельфи уроки но какие??Какие функции или компоненты мне нужны?Подскажите с чего начинать? Дельфи для начинающих,исходники каких то игр тут не катит! Так что мне искать????)
начинать нужно с основ делфи

kolyn10
30.12.2011, 21:59
Напишите простой код передачи пакетов!!Да и как пишется вот этот код

While 1
$recv = ReadPacket()
$size = Dec(StringMid($recv, 3, 2) & StringMid($recv, 1, 2))
$opcode = StringMid($recv, 7, 2) & StringMid($recv, 5, 2)
$data = StringMid($recv, 13)

Switch $opcode
Case "B021" ;object moving
BeginParse($data, $size)
$id = ParseDword()
ParseByte()
$xSection = Dec(ParseByte())
$ySection = Dec(ParseByte())
$xOffset = Dec(ParseWord())
$zOffset = Dec(ParseWord())
$yOffset = Dec(ParseWord())
$x = ($xSection - 135) * 192 + ($xOffset /10 )
$y = ($ySection - 92) * 192 + ($yOffset / 10 )
If $id = $myId Then
If $size = 24 Then
$myX = $x
$myY = $y
EndIf
EndIf

zver-42rus
02.01.2012, 20:03
Как я понимаю это скрип эмуляции нажатия клавиш мышки?

Mister_Shmister
14.05.2012, 21:03
Для плодотворного изучения делфи я бы посоветовал обратиться к этим материалам [Ссылки могут видеть только зарегистрированные и активированные пользователи] Имхо, лучшие лекции для этого) хотя решай для себя сам...

victor20011
17.05.2012, 04:40
я хз не понял вобше код))
но если эмулятор нажатия мышки то вот код


Кидай на форму Timer1.
Ставь:
Interval = 1
Enabled = true

procedure TForm1.Timer6Timer(Sender: TObject);var
HSD: HWND;
begin
HSD:=FindWindow(nil,'Counter-Strike'); // Ищем хандл
if GetKeyState(03) <> 0 then // когда нажимаем Mouse3 (mouse3 в коде пишется как 03), происходит:
begin
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN,Mouse.CursorPos.X,Mouse.Curso rPos.Y,0,0); //Нажимаем mouse2, тоесть целимся.
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP,Mouse.CursorPos.X,Mouse.CursorP os.Y,0,0);
Sleep(30);
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RIGHTDOWN,Mouse.CursorPos.X,Mouse.Curs orPos.Y,0,0); //нажимаем mouse1, тоесть стреляем.
Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_RIGHTUP,Mouse.CursorPos.X,Mouse.Cursor Pos.Y,0,0);
end;

end;

код не мой

ktulx
17.05.2012, 05:20
Напишите простой код передачи пакетов!!Да и как пишется вот этот код
Я, правда, не знаю к какой игре относится код - не вглядывался, но даже если тебе дадут код передачи пакетов, это тебе никоим образом не поможет, если ты не знаешь что с этим кодом потом делать )
Как уже сказали выше, начинай с основ. С самых основ. В гугле много есть :)

victor20011
17.05.2012, 05:47
Шас вчитался в код это что то по типу бота/кликера для ла2
Написан на С или С++ точно не знаю потому что сам С не знаю

VeTaL_UA
17.05.2012, 09:44
victor20011, скажу по секрету, это AutoIT и написан на нём, как я понял, что-то типо бота. /facepalm

VeTaL_UA
19.05.2012, 09:16
#include <String.au3>
Ну тут, извините, надо быть слепым :wtf: