On sait tous cette fonction a des grosse lacune. J'en avais mare de voir mon perso mourir comme un con lors du TP (comme beaucoup d’ailleurs ) , car il avais beaucoup de bug dans cette fonction.
-quand il rentrait dans la boucle pour calculer le temps du tp, on devenait vulnérable au attaque et au affix (lave,spore ... ect) -si par malheur le bot ratais la barre de tp, on rentrait dans la boucle "on a peut être réussi a tp..." et la c'étais la mort assuré. -vouloir a tous pris tp au lieu de nettoyer la zone.
Je sais que rabbit2000 en avait commencer une nouvelle,mais j'aimais mieux corriger la fonction originel,car il y a beaucoup paramètre qui rente en ligne de compte, Asmo room, Too Much TP try ... ect chose qui avait pas dans celle de rabbit2000.
Amélioration apporté -pendant qu'on vérifie la duré de la barre de tp,si il y a un mob on cesse de tp et on attaque. -si le bot manque la barre de tp,on se déplace pour recommencer,pour ne pas tomber dans la boucle "on a peut être réussi a tp..." -si pendant qu'on tp ils y a des spore,lave ... ect, on prend une potion pour résister.
Indice d'amélioration, j'aurais aimer qu'il gère les affix dans cette fonction, mais je n'ai pas eu le temps de voir comment la fonction fonctionne et il y a très peut de commentaire dans le bot.
Modification a faire 8.2e
Dans Toolkit.au3 chercher la Func _TownPortalnew($mode=0) et remplacer la part celle-ci:
Spoiler
Func _TownPortalnew($mode=0)
Local $compt = 0
While Not _intown() And _ingame() And Not _playerdead() ; "playerdead" quand on meurt, je les vue souvent vouloir tp
Local $try = 0
Local $TPtimer = 0
Local $compt_while = 0
Local $Attacktimer = 0
$compt += 1
_Log("Tour de boucle IsInTown Mode : " & $mode & " -- tentative de TP " & $compt)
If $mode <> 0 And $compt > $mode Then
_Log("Too Much TP try !!!")
ExitLoop
EndIf
_Log("enclenche attack")
$grabskip = 1
Attack()
$grabskip = 0
Sleep(100)
If _playerdead() = False Then
_Log("on enclenche le TP")
Sleep(250)
Send("t")
Sleep(250)
If Detect_UI_error(2) AND NOT _intown() Then
_Log('Detection Asmo room')
Return False
EndIf
$Current_area = GetLevelAreaId()
If Detect_UI_error(0) = False And $GameFailed = 0 Then
_Log("enclenchement fastCheckui de la barre de loading")
While fastcheckuiitemvisible("Root.NormalLayer.game_dialog_backgroundScreen.loopinganimmeter", 1, 1068)
If $compt_while = 0 Then
_Log("enclenchement du timer")
$TPtimer = TimerInit()
EndIf
$compt_while += 1
checkforpotion()
$Attacktimer = TimerInit()
Attack()
Sleep(100)
TimerDiff($Attacktimer)
If _playerdead() = True Or $GameFailed = 1 Then
ExitLoop
EndIf
WEnd
Else ; si INVENTORY FULL ou GameFailed
_Log("enclenchement fastCheckui de la barre de loading, INVENTORY FULL Or GAMEFAILED")
While fastcheckuiitemvisible("Root.NormalLayer.game_dialog_backgroundScreen.loopinganimmeter", 1, 1068)
If $compt_while = 0 Then
_Log("enclenchement du timer")
$TPtimer = Timerinit()
EndIF
$compt_while += 1
$Attacktimer = TimerInit()
Sleep(100)
TimerDiff($Attacktimer)
WEnd
EndIf
If $compt_while = 0 Then ; si pas de détection de la barre de TP
$CurrentLoc = getcurrentpos()
MoveToPos($CurrentLoc[0] + 5, $CurrentLoc[1] + 5, $CurrentLoc[2], 0, 6)
_Log("On se déplace, pas de détection de la barre de TP")
Else
_Log("compare time to tp -> " & (TimerDiff($TPtimer) - TimerDiff($Attacktimer)) & "> 3700 ") ; valeur test de 3600 a 4000
EndIf
If (TimerDiff($TPtimer) - TimerDiff($Attacktimer)) > 3700 And $compt_while > 0 Then
While Not _intown() And $try < 6
_Log("on a peut etre reussi a tp, on reste inerte pendant 6sec voir si on arrive en ville, tentative -> " & $try)
$try += 1
Sleep(1000)
WEnd
EndIf
Sleep(500)
If $Current_area <> GetLevelAreaId() Then
_Log("Changement d'arreat, on quite la boucle")
ExitLoop
EndIf
Else
_Log("Vous etes morts lors d'une tentative de teleporte !!!")
Return False
EndIf
Sleep(100)
;;;$PortBack = True
WEnd
Local $hTimer = TimerInit()
While Not offsetlist() And TimerDiff($hTimer) < 30000 ; 30secondes
Sleep(40)
WEnd
If TimerDiff($hTimer) >= 30000 Then
_Log('Fail to use offselList - TownPortalnew')
Return False
EndIf
_Log("On a renvoyer true, quite bien la fonction")
$PortBack = True
Return True
EndFunc ;==>_TownPortalnew
Correction double TP, si inventaire plein.
Modification a faire 8.2e Dans main.au3
Global $Tp_Repair_And_Back = 0 ; correction double tp inventaire plein
Dans toolkit.au3, Func Grabit($name, $offset) cette parti-ci.
Spoiler
If Detect_UI_error(0) Then
Unbuff()
TpRepairAndBack()
Buffinit()
EndIf
Remplacer par
Spoiler
If Detect_UI_error(0) And $Tp_Repair_And_Back = 0 Then ; $Tp_Repair_And_Back = 0,car on ne veut pas y rentrer plus d'une fois "correction double tp inventaire plein"
$Tp_Repair_And_Back = 1
Unbuff()
TpRepairAndBack()
Buffinit()
$Tp_Repair_And_Back = 0
EndIf
Maintenant cher moi sur mes 2 comptes sur 30 TP,donc 60 avec les 2 comptes,il a toujours nettoyer la zone avant de tp complet,c'est pour les affix,spore,lave..ect je manque de test,mais je les vue prendre la potion pendant qu'il fessait le TP.(une petite sécurité de plus)
Jeter un œil dessus si vous tester et faite moi un retour si possible.
J'ai modif le bot pour tester, je ferai un retour plus tard.
Sinon pour les affixes, si j'ai bien compris le code tu utilises une potion si on se trouve dans l'un d'entre-eux ? Pourquoi ne pas faire tout simplement appel à la fonction qui checke les affixes afin de s'éloigner après avoir nettoyé la zone et avant de TP ?
Super je l'attendais Merci beaucoup ( j'avais déjà commencé à la modif' de mon coté pour qu'il s'éloigne des affixes seulement )
Adjudant, lorsqu'on s'éloigne des affixes j'ai pu constater une perte de temps inutile car il cherche un endroit pour tp qui est comme par hasard dans l'affixe... Donc il est un peu paumé xD Après c'est peu être moi qui est mal géré la chose
Un jour, un homme a dit : Rien ne se perd, Rien ne se casse, Tout se transforme.
Ok. Sinon je pense avoir identifié un petit problème.
Aux cimetières des oubliés, il arrive qu'un squelette invocateur n'arrête pas d'invoquer des larbins près de nous, du coup le bot s'attarde et perd du temps (dans une proportion plus ou moins importante selon les cas). Une solution consisterait à ignorer les squelettes invoqués mais à mes yeux ce n'est pas l'idéal.
@Adjudant le bot n'est pas sensé tp a cette endroit?si tu utilise la combinaison val + champs tu n'auras pas se problème et tu auras un petit gain de temps.
NOTE:Pour faire la combinaisons a TheCat31 ICI il faut enlever TakeWP=2,0,0,0 dans les act1-champs_ et _townportal() dans les act1-Val_.(Merci TheCat31 pour ton astuce )
et pour la BanList=Skeleton_A pas obligatoire,moi je les mit car mon baba bloquais tout temps a cette endroit a cause des squelettes.
@tout monde qui joue HC Je conseil cette modification pour plus de sécurité,si c'est pas déjà fait.Vaut mieux prévenir que de guérir.
Je me suis trouvé un bug ,comme j'utilise la revamp j'avais oublier que cette version utilisait la version a rabbit2000 pour inventaire plein (ça ma sorti de la tête) donc du coup, mais test pour inventaire plein étais faussé.
Donc j'ai corrigé le premier post,en gros le bug,quand inventaire plein il cliquait s'en arrêt sur l'objet.Bon j'ai corrigé si inventaire plein on TP,mais on attaque pas pendant la barre de TP,mais ça marche quand même bien, car on ne rentre plus dans la boucle « on attend si on arrive en ville », pour les autres cas ça change pas, c'est comme j’avais dit au début.
Note Par contre j'ai trouver un autre bug, mais celui-là il est présent aussi dans le bot originel,je sais pas si ça vous dit quelque chose double TP si inventaire plein il TP va en ville, fait ses truque,prend le portail ramasse l'objet et re TP en ville, refait ses truque,prend le portail et continue son run.Je ne sais pas s'il y a une solution présente sur le site, sinon je vais regarder ce weekend d'où ça peut provenir.
Et sans les fautes. je vais demander à Mme qu'elle t'installe un correcteur. (private joke)
J'ai déjà eu ton bug du double tp, mais là ça fait longtemps que je ne surveille plus mes Bot, en fait j'ai réduit la valeur du repairafterxxgames ce qui me permet de vider presque toujours avant que l'inventaire ne soit plein.