PDA

Просмотр полной версии : Смена цели с игрока на моба AutоIt


Sword12
19.11.2011, 18:47
Написал код для смены цели с игрока на моба если бот был атакован ПК (выделено оранжевым)
Все работает. Как только ПК игрок попадает в цель сразу же идет смены цели обратно на ближнего моба. Но как только дру начинает атаковать скилами моба, смена цели происходит и для моба, хотя по теории должна только происходить для тех, кого нету в $CFG_MOBLIST_MONSTER_KEYID
Подскажите где ошибка, уже 2 дня мучаюсь:sad:
Func KillTarget()
if $CHARSTATE = 32 Then
;_SendMessage($HANDLE, 256, KEYCODE(IniRead($SOFTWARE_CONFIG, $CFG_HEAL_ROOT_KEY, $CFG_HEAL_AUTOREST_KEY, "")))
stopMeditating()
sleep(2000)
endif
Local $active_skill = 0
Local $lastspirit = $SPIRIT
Local $ts = TimerInit()
Local $key, $timer, $w8, $loot, $loottimes, $temphomex, $temphomey, $temphomez
If $TARGET <> 0 And $TAR = $TARGET Then
AddHistory("Убить моба #" & $KILLS_COUNT + 1 & " ID:[" & $TAR & "]")
GUICtrlSetData($LABEL_GENERAL_STATUS, "Действие: Убить моба #" & $KILLS_COUNT + 1)
If IniRead($SOFTWARE_CONFIG, $CFG_PETHEAL_ROOT_KEY, $CFG_PETATTACK_CHECK_KEY, "0") = 1 Then
If $TARDIS > 17 And $TARHP = $TARMAXHP Then
$MOVEING = 1
$HIGHT = $LASTTARZ[2] / 10
SetPetAttack($TARGET)
If $TARDIS > 30 Then
;If IniRead($SOFTWARE_CONFIG, $CFG_SKILLS_ROOT_KEY, $CFG_SKILLS_FLAG_DIST, "0") = 1 Then
;-------------------------------------------------------------
Local $PosX, $PosY, $PosZ, $Dist
; $SKILLS_DIST = IniRead($SOFTWARE_CONFIG, $CFG_SKILLS_ROOT_KEY, $CFG_SKILLS_DIST, "1")
; If $SKILLS_DIST = 0 Then
; $SKILLS_DIST = 1
; EndIf
$SKILLS_DIST = 30
$Dist = $TARDIS - $SKILLS_DIST
$Otn = $Dist/$SKILLS_DIST
$PosX = ($CHARX+$Otn*$LASTTARX[2])/(1+$Otn)
$PosY = ($CHARY+$Otn*$LASTTARY[2])/(1+$Otn)
$PosZ = ($CHARZ+$Otn*$LASTTARZ[2])/(1+$Otn)
; ;-------------------------------------------------------------
DashToXYZ($PosX, $PosY, $PosZ, $HIGHT)
;Else
; DashToXYZ($LASTTARX[2], $LASTTARY[2], $LASTTARZ[2], $HIGHT)
;EndIf
EndIf

Do
SetPetAttack($TARGET)
sleep(250) ;500
SituationalAwareness()
$TIMER = TimerDiff($TS)
Until $TARHP < $TARMAXHP Or $TAR = "" or $TIMER > 10000 or $HP = 0
EndIf
EndIf
Do
sleep(250) ;500
SituationalAwareness()
If $HP > 0 then
FlyEscapeCheck()
FLYMODE()
HPMPAutoPotCheck()
GetPetState()
PetSupport()
EndIf
if $CHARSTATE = 32 Then
;_SendMessage($HANDLE, 256, KEYCODE(IniRead($SOFTWARE_CONFIG, $CFG_HEAL_ROOT_KEY, $CFG_HEAL_AUTOREST_KEY, "")))
stopMeditating()
sleep(2000) ;2000
endif
If IniRead($SOFTWARE_CONFIG, $CFG_SKILLS_ROOT_KEY, $CFG_SKILLS_FLAG_KEY, "0") = 1 Then
;Check The Last Time Used The Active Skill (Delay Configured to Each Skill)
$w8 = IniRead($SOFTWARE_CONFIG, $CFG_SKILLS_ROOT_KEY, $CFG_SKILL_DELAY_KEY & $ACTIVE_SKILL, "1")
;Check to see if Pet should Attack First
If TimerDiff($SKILL_DELAY_CHECK[$ACTIVE_SKILL]) > ($w8 * 1000) And $CASTING = 0 Then
;Set the Active Skill
$ACTIVE_SKILL = $ACTIVE_SKILL + 1
If $ACTIVE_SKILL > $SKCOUNTCFG Then
$ACTIVE_SKILL = 1
EndIf
;Update the Timer to Active Skill
$SKILL_DELAY_CHECK[$ACTIVE_SKILL] = TimerInit()
;Send the Skill Command to Game
$key = IniRead($SOFTWARE_CONFIG, $CFG_SKILLS_ROOT_KEY, $CFG_SKILL_COMBO_KEY & $ACTIVE_SKILL, "0")
;_SendMessage($HANDLE, 256, KEYCODE(IniRead($SOFTWARE_CONFIG, $CFG_SKILLS_ROOT_KEY, $CFG_SKILL_COMBO_KEY & $ACTIVE_SKILL, "{F1}")))
If $key = "RegAtt" Then
;regularAttack(0)
CheckAction()
useSkillAction($TARGET, 0)
CheckAction(500)
Else
$Pos = _ArraySearch($ListSkill, $key,0,0,0,0,0,0)
;MsgBox(0, "", $ListSkill[$Pos][0]&" - "&$ListSkill[$Pos][1]&" - "&$ListSkill[$Pos][2])
;useSkill($key, $TARGET)
CheckAction()
useSkillAction($TARGET, 3, $ListSkill[$Pos][2])
CheckAction(1000)
EndIf
EndIf
EndIf
If $TARHP = $TARMAXHP Then
$TIMER = TimerDiff($TS)
If $TIMER > 30000 Then
Sleep(10)
DeselectTarget()
EndIf
EndIf
If $TAR <> IniRead($SOFTWARE_CONFIG, $CFG_MOBLIST_ROOT_KEY, $CFG_MOBLIST_MONSTER_KEYID, "") or $TAR <> IniRead($SOFTWARE_CONFIG, $CFG_MOBLIST_ROOT_KEY, $CFG_MOBLIST_MONSTERNAME_KEY, "") Then
do
sleep(1000)
AddHistory("Переключение на моба")
DeselectTarget()
SelectTarget()
Until $TAR = IniRead($SOFTWARE_CONFIG, $CFG_MOBLIST_ROOT_KEY, $CFG_MOBLIST_MONSTER_KEYID, "") or $TAR = IniRead($SOFTWARE_CONFIG, $CFG_MOBLIST_ROOT_KEY, $CFG_MOBLIST_MONSTERNAME_KEY, "")

EndIf
$TIMER = TimerDiff($TS)
Until $TAR = 0 or $TIMER > 180000 or $HP = 0
If $HP = 0 Then
EndIf
$temphomex = $HOME_X
$temphomey = $HOME_Y
$temphomez = $HOME_Z
$HOME_X = $LASTTARX[2]
$HOME_Y = $LASTTARY[2]
$HOME_Z = $LASTTARZ[2]
$LAST_KILLEDTIME = TimerInit()
$SPIRIT = _MemoryRead($CHAR_DATA_BASE + $OFFSET_SPIRIT, $PROCESS_INFORMATION)

$KILLS_COUNT = $KILLS_COUNT + 1

If IniRead($SOFTWARE_CONFIG, $CFG_LOOT_ROOT_KEY, $CFG_LOOT_FLAG_KEY, "0") = 1 Then
;sleep(1000)
BuildItemArray()
EndIf
Local $tempitemarray, $tempitemarraysize, $counter, $tempitem, $tempitemdis
$tempitemarray = $ITEMARRAY
$tempitemarraysize = Ubound($tempitemarray)
If GUICtrlRead($LABEL_GENERAL_STATUS) <> "Действие: Искать лут" Then
GUICtrlSetData($LABEL_GENERAL_STATUS, "Действие: Искать лут")
EndIf
Global $ListLoot[$tempitemarraysize][6]
For $n = 0 To $tempitemarraysize -1
If $tempitemarray[$n][7] < 7 And $tempitemarray[$n][7] > 0 Then
$counter = $counter + 1
$ListLoot[$counter-1][0] = $tempitemarray[$n][0] ;ID
$ListLoot[$counter-1][1] = $tempitemarray[$n][1] ;WID
$ListLoot[$counter-1][3] = $tempitemarray[$n][3] ;X
$ListLoot[$counter-1][4] = $tempitemarray[$n][4] ;Y
$ListLoot[$counter-1][5] = $tempitemarray[$n][5] ;Z
$HIGHT = $tempitemarray[$n][5] / 10
;$HIGHT = 0
EndIf
Next
If $counter > "" Then
$loot = 1
;$loottimes = $counter * 8
$loottimes = $counter
EndIf
If $TARDIS > 6 And $LOOT = 1 Then
GUICtrlSetData($LABEL_GENERAL_STATUS, "Действие: Подойти к уб.мобу")
Do
sleep(500)
SituationalAwareness()
Until $ACTIONFLAG = 0 or $HP = 0
If IniRead($SOFTWARE_CONFIG, $CFG_HEAL_ROOT_KEY, $CFG_HEAL_MOVE_TO_CORPSE_KEY, "0") = 1 And IniRead($SOFTWARE_CONFIG, $CFG_LOOT_ROOT_KEY, $CFG_LOOT_FLAG_KEY, "0") = 1 Then
$MOVEING = 1
$MTLT = TimerInit()
Do
sleep(50) ;500
SituationalAwareness()
$Timer = TimerDiff($MTLT)
Until $CASTING = 0 Or $Timer > 500 or $HP = 0 ;1500
sleep(10)
MoveToXYZ($LASTTARX[2], $LASTTARY[2], $LASTTARZ[2], $HIGHT)
EndIf
$MOVEING = 0
$LASTGATHERED = 0
EndIf

If $LOOT = 1 And IniRead($SOFTWARE_CONFIG, $CFG_LOOT_ROOT_KEY, $CFG_LOOT_FLAG_KEY, "0") = 1 Then
;If $loottimes = 1 Then
; AddHistory("Поднят 1 предмет")

;Else
;AddHistory("Поднято " & $loottimes / 8 & " предмет(-а,-ов)")
;CheckAction()
PickLoot($loottimes)
AddHistory("Поднято " & $loottimes & " предмет(-а,-ов)")
;EndIf
EndIf
if $HP > 0 then
HPMPRestoreCheck()
endif
$HOME_X = $temphomex
$HOME_Y = $temphomey
$HOME_Z = $temphomez
EndIf
$ATHOME = 0
EndFunc ;==>