;;--------------------------------------------------------------------------------
; Function: _format_time()
; Description: Format time by length
;
; Note(s): faster than YoPens : 100% if < 1mn, 150% if < 1h, 30% if more
;;--------------------------------------------------------------------------------
Func _format_time($mS)
Switch $mS
Case 0 To 59999 ; less than 1 mn
Return Round(($mS / 1000), 2) & " s"
Case 60000 To 359999 ; 1 mn to 1 hour
Return Int($mS / 60000) & " mn " & Round(($mS / 1000) - Int(Int($mS / 60000) * 60)) & " s"
Case Else ; more than 1 hour
Return Int($mS / 3600000) & "h " & Int((Int($mS / 60000) - Int(Int($mS / 3600000) * 3600) / 60)) & "mn " & Round(($mS / 1000) - Int($mS / 3600000) * 3600 - Int(Int($mS / 60000) - Int(Int($mS / 3600000) * 3600) / 60) * 60) & "s"
EndSwitch
Return $mS
EndFunc ;==>_format_time
Gain : Vitesse de la routine augmentée entre 30 % et 150 % selon la durée en input Nota : A accompagner de modifications dans toolkit.au3 puisque la fonction n'est plus appelé de la même manière, on évite moultes affectations avec des = (je les publierai à mon retour de vacances)
Dans toolkit.au3, dans la fonction MoveToPos(), cette partie
Spoiler
If $Coords[0] > 790 Then
$Coords[0] = 790
ElseIf $Coords[0] < 40 Then ;car on a pas l'envie de cliquer dans les icone du chat
$Coords[0] = 40
EndIf
If $Coords[1] > 540 Then ;car on a pas l'envie de cliquer dans la bare des skills
$Coords[1] = 540
ElseIf $Coords[1] < 10 Then
$Coords[1] = 10
EndIf
peut devenir
Spoiler
Switch $Coords[0] ;car on a pas l'envie de cliquer dans les icone du chat
Case 791 To 800
$Coords[0] = 790
Case 0 To 39
$Coords[0] = 40
EndSwitch
Switch $Coords[1] ;car on a pas l'envie de cliquer dans la bare des skills
Case 541 To 600
$Coords[1] = 540
Case 0 To 9
$Coords[1] = 10
EndSwitch
Gain : Vitesse de la routine augmentée de 15%
Dans toolkit.au3, dans la fonction MoveToPos(), cette partie
Dans toolkit.au3, dans la fonction Attack(), cette partie
Spoiler
If Is_Interact($item, $IgnoreList) Then
If Is_Shrine($item) Then
handle_Shrine($item)
ElseIf Is_Mob($item) or Is_Decor_Breakable($item) Then
handle_Mob($item, $IgnoreList, $test_iterateallobjectslist)
ElseIf Is_Loot($item) Then
handle_Loot($item, $IgnoreList, $test_iterateallobjectslist)
EndIf
EndIf
peut devenir
Spoiler
Select
Case Is_Loot($item)
handle_Loot($item, $IgnoreList, $test_iterateallobjectslist)
Case Is_Mob($item)
handle_Mob($item, $IgnoreList, $test_iterateallobjectslist)
Case Is_Shrine($item)
handle_Shrine($item)
Case Is_Decor_Breakable($item)
handle_Mob($item, $IgnoreList, $test_iterateallobjectslist)
EndSelect
Gain : en cours d'estimation, quoi qu'il en soit un CC est généré dès qu'un favorable est rencontré, d'où la volonté de séparer Is_Decor_Breakable() du reste pour s'affranchire d'un Or. Is_Loot() est placé en premier pour optimiser son appel
Statistiques supplémentaires dans la fonction StatsDisplay() dans toolkit.au3
Juste après
Spoiler
$DebugMessage &= "PO obtenues : " & formatNumber(Ceiling($GOLDInthepocket)) & @CRLF
Dans la fonction StashAndRepair() du même fichier, remplacer cette partie
Spoiler
InteractByActorName($RepairVendor)
Sleep(700)
Local $vendortry = 0
While _checkVendoropen() = False
If $vendortry <= 5 Then
_log('Fail to open vendor')
$vendortry = $vendortry + 1
InteractByActorName($RepairVendor)
Else
Send("{PRINTSCREEN}")
Sleep(200)
_log('Failed to open Vendor after 5 try')
WinSetOnTop("Diablo III", "", 0)
MsgBox(0, "Impossible d'ouvrir le vendeur :", "SVP, veuillez reporter ce problème sur le forum. Erreur : v002 ")
Terminate()
ExitLoop
EndIf
WEnd
CheckWindowD3Size()
For $i = 0 To UBound($ToTrash) - 1
InventoryMove($items[$ToTrash[$i]][0], $items[$ToTrash[$i]][1])
Sleep(Random(100, 500))
$ItemToSell = $ItemToSell + 1
MouseClick('Right')
Sleep(Random(100, 200))
Next
Sleep(Random(100, 200))
Send("{SPACE}")
Sleep(Random(100, 200))
par
Spoiler
;on mesure l'or avant
Local $GoldBeforeSell = getGold()
InteractByActorName($RepairVendor)
Sleep(600)
Local $vendortry = 0
While Not _checkVendoropen()
If $vendortry < 6 Then
_log('Fail to open vendor')
$vendortry += 1
InteractByActorName($RepairVendor)
Else
Send("{PRINTSCREEN}")
Sleep(200)
_log('Failed to open Vendor after 5 try')
WinSetOnTop("Diablo III", "", 0)
MsgBox(0, "Impossible d'ouvrir le vendeur :", "SVP, veuillez reporter ce problème sur le forum. Erreur : v002 ")
Terminate()
ExitLoop
EndIf
WEnd
CheckWindowD3Size()
For $i = 0 To UBound($ToTrash) - 1
InventoryMove($items[$ToTrash[$i]][0], $items[$ToTrash[$i]][1])
Sleep(Random(100, 350))
$ItemToSell += 1
MouseClick('Right')
Sleep(Random(100, 200))
Next
Sleep(Random(100, 200))
Send("{SPACE}")
Sleep(Random(100, 200))
; on mesure l'or après
Local $GoldAfterSell = getGold()
$GoldBySale += $GoldAfterSell - $GoldBeforeSell
et enfin la fonction qui mesure l'or à ajouter en fin de fichier
Spoiler
Func getGold()
IterateLocalActor()
$foundobject = 0
For $i = 0 To UBound ( $__ACTOR ,1 )-1
If StringInStr($__ACTOR[$i][2],"GoldCoin-") Then
return IterateActorAtribs( $__ACTOR[$i][1],$Atrib_ItemStackQuantityLo)
ExitLoop
EndIf
Next
Return 0
EndFunc
Déclarer ensuite la nouvelle variable dans main.au3 à la suite des "Global" en rajoutant
Spoiler
Global $GoldBySale = 0
Gain : Fonctionnalité qui consiste à afficher l'or obtenu en vendant des items
Dans toolkit.au3, dans la fonction StashAndRepair(), remplacer
Spoiler
If $unidentified = true Then
Take_BookOfCain()
Endif
par
Spoiler
If StringStripWS(StringLower($unidentified),8) = "true" Then Take_BookOfCain()
Gain : Correction de bug (évite la double identification des items)
Héhé celle là je l'attendais ! En effet, mais on sait jamais en fait à forcer de tourner en rond dans les fonctions, je me suis fait la main sur celle-ci. Ca me familiarise encore plus avec AutoIT et me permet de mesurer le gain en supprimant des variables locales, en changeant les fonctions appelées, etc
J'ai passé une bonne heure avec ces maudites divisions sur les millisecondes, fallait bien que je la partage De cet effort, j'ai pu constater que les appels multiples des variables locales et leur affectations : c'est la plaie
Il y'en aura d'autres, dont une appelée 100x par seconde
Filter generator : Générateur de filtres avancés pour CorePlusField v7+ | %5Bbuild%5D Marburg's féticheur "high radius" | %5Bbuild%5D Marburg's sorcière "high speed"Moine %5B100%5D 196Kdps unbuff, 840Kgold/h, radius:14, Brigand 26Kdps, 8.0a | Moine %5B100%5D 120Kdps unbuff, 760Kgold/h max, Enchanteresse 15Kdps, 8.0aSorcière%5B100%5D 307Kdps unbuff, 974Kgold/h, radius:42, Enchanteresse 13Kdps, 8.1 | Féticheur%5B100%5D 275Kdps unbuff, 1025Kgold/h, radius:67, Enchanteresse 15Kdps, 8.1HCFéticheur%5B44%5D 57Kdps unbuff, 280Kgold/h, radius:45, Templier 3Kdps, 8.1Développement en cours : CoCbot, un bot pour Clash of Clan sur émulateur Android
Oui je pense pouvoir, je vais m'imprégner de la fonction et voir ça de plus prêt, je me suis attardé sur MoveToPos() et Attack() car c'est depuis là que le problème de ramassage bien connu survient
Si j'indente correctement le code (et le commente) c'est justement pour le rendre plus lisible et pour pouvoir se repérer rapidement dans les boucles En FAC (y'a 20 ans ), on m'avait appris que c'était TRES utile, j'ai appliqué (mylife)
Filter generator : Générateur de filtres avancés pour CorePlusField v7+ | %5Bbuild%5D Marburg's féticheur "high radius" | %5Bbuild%5D Marburg's sorcière "high speed"Moine %5B100%5D 196Kdps unbuff, 840Kgold/h, radius:14, Brigand 26Kdps, 8.0a | Moine %5B100%5D 120Kdps unbuff, 760Kgold/h max, Enchanteresse 15Kdps, 8.0aSorcière%5B100%5D 307Kdps unbuff, 974Kgold/h, radius:42, Enchanteresse 13Kdps, 8.1 | Féticheur%5B100%5D 275Kdps unbuff, 1025Kgold/h, radius:67, Enchanteresse 15Kdps, 8.1HCFéticheur%5B44%5D 57Kdps unbuff, 280Kgold/h, radius:45, Templier 3Kdps, 8.1Développement en cours : CoCbot, un bot pour Clash of Clan sur émulateur Android
Bravo pour tout ce que tu fait pour la communauté.
Edit une question, avec tout les modifications qu'on peut trouver ici et la dans les post, je veut dire je pourrait intégrer tout les modifications du bot dans une archive de bot vierge pour le faire partager a la communauté ?
Je veut dire par la, intégrer tout les modifications de code qu'on trouve dans le spost ici, ceux des actes et tout sa et le donner tout fait ?
Est que sa se pourrait que les statistique de temps ne marche plus avec la modification _formattime() exemple de stastitique:Durée moyenne d'un run : 8 min 51 sec Désoler de vous bombarder de question.
Et merci Marburg tu a l'aire très impliquer dans cette communauté +1
et la ligne 4023 même modification que toi. Sans ces modification sa ne marchais pas pour les stats. Merci Marburg +1 et le a = _fontion(input) j'aurrais jamais trouver, ces toi pro.
PS: je ne te corrige pas, ces juste que ce qui peut paraitre évident pour certain peu l'être moins pour d'autre.
H4WK2z, TheCat31, sabrina;) et 1 autre aiment ceci
Bonsoir à tous et à toutes. Je voudrais déjà remercier Marburg pour sa contribution au développement du programme CorePlusField Maintenant je voudrais savoir pourquoi, en modifiant mes fichiers à la lettre (sauf erreur de ma part) comme le prescrit Marburg, j’obtiens un message d'erreur. Lorsque je lance le main.au3 voici ce qu'il m'indique :
WARNING: $test_iterateallobjectslist: possibly used before declaration. handle_Loot($item, $IgnoreList, $test_iterateallobjectslist) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Users\****\Desktop\CorePlusField V8.1\CorePlusField V8.1\toolkit.au3(4088,72) : WARNING: $GoldBySale: possibly used before declaration. $DebugMessage &= " par vente : " & formatNumber(Ceiling($GoldBySale) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ C:\Users\****\Desktop\CorePlusField V8.1\CorePlusField V8.1\toolkit.au3(5308,1) : ERROR: missing Wend. EndFunc ^ C:\Users\****\Desktop\CorePlusField V8.1\CorePlusField V8.1\toolkit.au3(5261,3) : REF: missing Wend. While ^ C:\Users\****\Desktop\CorePlusField V8.1\CorePlusField V8.1\toolkit.au3(5308,1) : ERROR: missing EndIf. EndFunc ^ C:\Users\****\Desktop\CorePlusField V8.1\CorePlusField V8.1\toolkit.au3(5254,24) : REF: missing EndIf. If $ToTrash <> -1 Then ~~~~~~~~~~~~~~~~~~~~~~^ C:\Users\****\Desktop\CorePlusField V8.1\CorePlusField V8.1\main.au3 - 2 error(s), 2 warning(s)
Parce que déjà j'ai oublié la partie main.au3 où la déclaration des variables est à faire, mea culpa, je corrige le post 1
Si tu souhaites toutes les faires, modifies les fonctions les unes après les autres et teste. Je me suis basé sur la 8.1 officielle pour les modifications, mais il y'en a de nombreuses proposées, attention à ne pas les faire chavaucher
Filter generator : Générateur de filtres avancés pour CorePlusField v7+ | %5Bbuild%5D Marburg's féticheur "high radius" | %5Bbuild%5D Marburg's sorcière "high speed"Moine %5B100%5D 196Kdps unbuff, 840Kgold/h, radius:14, Brigand 26Kdps, 8.0a | Moine %5B100%5D 120Kdps unbuff, 760Kgold/h max, Enchanteresse 15Kdps, 8.0aSorcière%5B100%5D 307Kdps unbuff, 974Kgold/h, radius:42, Enchanteresse 13Kdps, 8.1 | Féticheur%5B100%5D 275Kdps unbuff, 1025Kgold/h, radius:67, Enchanteresse 15Kdps, 8.1HCFéticheur%5B44%5D 57Kdps unbuff, 280Kgold/h, radius:45, Templier 3Kdps, 8.1Développement en cours : CoCbot, un bot pour Clash of Clan sur émulateur Android