Bienvenue sur Tout sur les jeux massivement multijoueurs / MMORPG !
Connectés : 1260 (sites) | 2610 (forums)Tous les sites de JeuxOnLine...
 
Forums MMORPG MMOG MMO jeux vidéo PC
MMORPG jeux vidéo PC
   
   
Famille Za
Oracle
 
Avatar de Famille Za
 
Pour répondre exactement à ta demande, Shugah, il y a les raccourcis dans les options.
Option -> Raccourcis -> Nouveau (dans le script.)
La 3ème ligne (seule à modifier, théoriquement) indique le n° des comptes à connecter (à séparer par une simple virgule, sans espace), par défaut le compte actuellement sélectionné.
En appuyant sur "Valider", tu indiques l'emplacement de création (ex : le bureau) et le nom du raccourci (ex : "Compte L33t-LeIoP").

Après, un double-clic sur le raccourcis :
-> demande directement la clef du compte choisit
-> lance le Client
-> se ferme une fois la fin des comptes souhaités atteinte.
(description complète : en fait le script se lance, sélectionne le n° de compte du raccourci, effectue comme un appui sur "Lancer", demande la clef, lance le Client si ça n'a pas été annulé, attend que la souris soit passée sur "OK", répète les actions pour chaque compte dans le raccourcis jusqu'à finir la liste, puis se ferme arrivé à la fin.)

Je pense que c'est ça que tu voulais ?

Pour la clef de cryptage vierge, il suffit de valider par entrée la clef vide : c'est le seul raccourcis que je permets pour les flemmards de mon style gens qui ne souhaitent pas chiffrer leurs identifiants.
Sans développer, je ne tiens pas à augmenter le confort d'utilisation au détriment de la sécurité.

Pour ce qui est de chiffrer le log entier, ça doit être possible.
Après une demi-seconde de réflexion : il faudrait avoir une clef globale d'accès au fichier, qui brouillerait tout le contenu de celui-ci.
Une fois cette clef passée, on reprend le système habituel du script..
Donc oui, il est possible de chiffrer aussi le fichier de logs entier.

Tenez-vous vraiment à avoir ce niveau de sécurité supplémentaire ?

(Je peux l'implanter si des gens me le demandent. Mais ça nécessite de passer du temps dessus. Temps qui n'est pas employé à développer le reste/faire autre-chose IRL à côté. )
Remarque : ça me fait un challenge de plus à réaliser.. Ca pourrait être marrant !


Juste en passant, vous pouvez (et je le conseille) stocker le script et le fichier de logs dans un emplacement strictement personnel (une clef USB), ce qui vous permet d'utiliser le DofusLog même en déplacement. ^^


Le DofusLog, pour qui ?
-> Avec le chiffrement (oui, on m'a fait la remarque que c'était "chiffrement" pour les puristes, et non "cryptage". ^^), j'assure autant que possible de garantir la sécurité des informations
-> Avec la multi-connexion, mon script est résolument tourné vers les possibilités de multi
-> Avec les raccourcis, j'ai entamé une simplification du fonctionnement
-> Avec les skins, j'essaie d'améliorer le visuel
Pour tous, et par vous !
(M'enfin, pour mon propre confort en premier, évidemment ! )

Za.
Famille Za est déconnecté Vieux 16/03/2009, 18h09
Afficher le profil de Famille Za
TonyPimp
Légende
 
Avatar de TonyPimp
 
Les raccourcis ça avance?
TonyPimp est déconnecté Vieux 20/03/2009, 23h12
Afficher le profil de TonyPimp
Famille Za
Oracle
 
Avatar de Famille Za
 
Pas grand-chose à prévoir pour le moment sur les fonctionnalités pures.

Juste quelques améliorations à prévoir pour rendre l'interface notamment plus conviviale (dixit "moins moche" ), mais je travaille sur le skinnage.

J'ai vraiment avancé ! (Sisi, j'ai trouvé un moyen de rokser tout.)
Le problème que je rencontre actuellement, c'est que des "objets" (les boutons, les zones de textes, les menus..) ne se chargent pas bien, pas à leur place, pas comme il faut, ou pas du tout.

Voici pour le funne le code actuel, qui est très légèrement à revoir :
($l, c'est la ligne de SkinDB.txt qui contient la fenêtre à charger, $g c'est une variable temporaire pour éviter de perdre $l, et $Skin, c'est le chargement dans le script de SkinDB.txt.
$t est plus complexe à décrire : c'est le conteneur de l'objet créé. ~ Une sorte de "Pages jaunes" dynamique, on va dire.)
Code:
For $g = $l To 	UBound ($Skin) - 1
	$t = StringRight ($Skin[$g], StringLen ($Skin[$g]) - StringInStr ($Skin[$g], "	", 2, -1))

(..Quelques lignes après, je passe sur les détails spécifiques ^^..)

	Assign ($t, Skinappel ($Skin[$g]))
Next
En français, ça donne : partir de la ligne demandée (pour charger la fenêtre "Nouveau surnom", on ne recharge pas la fenêtre principale d'abord), puis effectuer toutes les actions nécessaires pour remplir la fenêtre, avec le contenu "intéressant".

Sauf que le contenu intéressant est difficile à dissocier du reste, et parfois y'a des objets assez particuliers qui ont des références bizarroïdes : (3 exemples)
Code:
Multico
	Type : Checkbox
	contenu1 : "Multi"
	posx : 150
	posy : $Hligne+$Ht+$Ht/2*$tFen
	largeur : -1
	hauteur : $Hligne
	Resize : 8+768
	État : $multi
ListeMulti
	Type : Checkbox
	contenu1 : $aLog[$coListe[$compteTer]*$NbLignes-1]
	posx : 255
	posy : 27+$compteTer*$Ht
	largeur : -1
Surnoms
	Type : Radio
	contenu1 : $aLog[$compteBis*$NbLignes-1]&" ."
	posx : 5
	posy : 27+($compteBis-1)*$Ht
	largeur : 135
	hauteur : $Ht-3
	style : 0x2000
	Data : $aLog[$compteBis*$NbLignes-1]
	Resize : 2+32+512
Pour le moment, les champs "État", "Data" et "Resize" ne sont pas exploités (ni exploitables), mais j'espère améliorer ma fonction Skinappel() pour qu'elle puisse s'en charger aussi.
(C'est elle qui fait le tri de ce qui est du contenu "destiné à la création pure" (les informations de placement, etc), et le contenu "informatif pour l'utilisateur" ("pox : ", ou "hauteur : ", ou les blancs de début de ligne.).)

J'attend d'avoir débuggué complètement le skinnage pour vous la mettre à disposition. Pour le début de la bêta2, il faudra se charger manuellement du repositionnement des objets. la version 1_10 (complète) ne sortira pas sans un module de création/modification de skins.

Bref, ça avance !
(Franchement, la fonction Assign(), elle rokse !)

Za.
Famille Za est déconnecté Vieux 20/03/2009, 23h50
Afficher le profil de Famille Za
Famille Za
Oracle
 
Avatar de Famille Za
 
Voilà, la Bêta2 est disponible !
Pour modifier des bouts de l'apparence, il faut éditer le fichier "SkinDB.txt" (à placer dans le répertoire du script. :s), et seules les positions sont accessibles pour l'instant.

En revanche, c'est un plaisir pour moi d'ajouter des boutons et des éléments un-peu partout : il n'y a que 5~6 lignes à rajouter, et c'est parti !

Module d'édition via le script à rédiger, maintenant.. Le gros bout arrive. Tous aux abris ! ^^

Za.
J'ai rajouté un bouton "annuler" à la création d'un nouveau raccourcis, et je prévois un bouton "Nouveau Raccourcis" directement accessible à côté de la liste des surnoms.

Régression repérée, je corrige ça dans quelques temps : le système de raccourcis ne fonctionne plus avec la 1_10bêta2... Je ne sais pas trop d'où ça peut venir, mais je me penche sur le soucis. / J'ai trouvé d'où ça venait, c'est corrigé. (Le chemin d'accès au Skin qui n'était pas complet, et donc introuvable.)
Et je viens de trouver le moyen de rajouter des modifications sur les boutons (Resize, état, contenu..) depuis le SkinDB, donc il sera possible d'ajouter un bouton désactivé de base. (Par exemple.)
'me reste à rajouter les lignes correspondant à la souris, à la couleur, à la police de caractère, etc.. Pour terminer sur le module de création/modification des skins.
Pfiou.. bientôt !
Famille Za est déconnecté Vieux 24/03/2009, 10h49
Afficher le profil de Famille Za
Mipadeon [ChaoD]
Empereur
 
Avatar de Mipadeon
 
Bonjour ZA, serai ce possible de réecrire une ligne pour qu'au lieu de lancer le client Dofus habituel, l'on puisse choisir l'exellente idée d'herazade présente sur ce topic ?

J'ai fait des essais, j'y arrive pas.
Mipadeon est déconnecté Vieux 28/03/2009, 09h02
Afficher le profil de Mipadeon
Famille Za
Oracle
 
Avatar de Famille Za
 
[Longtemps après] Désolée, réinstallation de Windows..
Passage à Vista 32 -> 64 bits, puis installation de WinLSD, puis installation de WinTux, tout-ça juste pour faire tourner ma carte wi-fi, et récupérer mon accès internet.. Je vous aime, c'est pour vous que j'ai fait tout-ça ! ^^

Oui, il est tout à fait possible de modifier une ligne de mon script pour utiliser le multiplay des EHD.

Dans la fonction Charge (), voici la ligne à modifier (environ la ligne 95 du script) :
Code:
$prgChemin = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Ankama\Dofus", "Path") & "\"
$prgNom = "Dofus.exe"
If Not FileExists ($prgChemin & $prgNom) Then [...]
C'est $prgNom = "Dofus.exe" qui est à modifier pour mettre $prgNom = "EHD_MultiPlay.html", si vous avez bien placé le EHD_Multiplay dans ce répertoire.

Sinon, vous pouvez choisir un sous-répertoire dans le dossier.
Exemple : votre EHD_Multiplay est décompressé dans C:\Program Files\Dofus\Multiplay, la ligne à changer devient
$prgNom = "Multiplay\EHD_Multiplay.html"

À noter que j'ai beau avoir changé 4 fois d'OS cette semaine, aucun ne m'a permise de jouer à Dofus avec un navigateur.


Pour repartir sur la Bêta3 du DofusLog (v1_10), j'ai ajouté de chercher le chemin "C:\Program File\Dofus" si le chemin dans le registre n'est pas trouvé (quand j'ai réinstallé mon PC, Dofus n'avait pas changé de place mais n'était plus dans mon registre. Modification mineure qui tient plus du bonus).

J'ai bientôt fini de ré-écrire toutes les fonctions du script. Dés que ce sera bon, il ne me restera pas grand-chose pour finir la 1_10 !
Allez, courage.

Za.
Famille Za est déconnecté Vieux 04/04/2009, 12h47
Afficher le profil de Famille Za
Famille Za
Oracle
 
Avatar de Famille Za
 
Bonjour bonjour, vous l'attendiez (ou pas, depuis le temps ), mais la version 1_10 se rapproche à grandes enjambées !

Je vous l'avais promise, j'ai mit du temps à la développer, mais j'ai réussit à faire ce que je souhaitais : une apparence par un fichier externe contenant toutes les informations de skin, et qui n'a aucune interaction avec le script. (Donc, on ne peut pas modifier le SkinDB.txt pour faire nawak !)

Concrètement, ça change quoi ?
-> Le script est très allégé côté programmation, car il ne contient plus que les fonctions utiles
-> Le fichier de skin est interactif, donc vous pouvez le modifier à votre guise, tout est accepté. (Vi, tout ! changer les couleurs, les polices, la taille des fenêtres, ajouter des images...)

(Foule en délire : )Mais.. Ca roxe !
Pas encore tout à fait (d'où le nom de "bêta" qui traîne), il me reste à faire une petite fonction pour que ça soit facile à prendre en main. Une apparence graphique, quand on clique sur un bouton, y'a toutes ses infos qui s'affichent, plus qu'à changer ce qu'on veut. (Et à remettre à jour en temps réel le skin, aussi. Pour le moment, il faut relancer le script pour voir les modifications à l'oeuvre.)

Hey, t'as tout changé ton code ! T'as sûrement planqué un Keylog dedans.
Non, c'est une des choses qui me tient à coeur, c'est le respect de la sécurité.
Le code en lui-même n'a fait que se simplifier.
Chaque bouton cliqué lance maintenant une fonction (vous pouvez voir la correspondance bouton -> fonction dans le fichier de skin) totalement sûre (aucun paramètre ne peut être transmit à une fonction depuis un bouton).
J'ai aussi divisé par 11 (!) la taille de la fonction principale, qui passe de 44 lignes (version 1_9b) à 4 lignes (version 1_10Bêta4b).

Pourquoi ce nom ? Et d'ailleurs, pourquoi "bêta" ?
La version est encore en bêta, car il reste quelques options à modifier. Notamment, la fermeture d'une fenêtre de type "Pop-Up" (modification d'un compte, ou nouveau raccourcis) ferme aussi la fenêtre principale.
Et je suis passée de la 1_10Bêta 2 à la bêta 4 pour vous, vu que je n'étais pas satisfaite de la 3, je l'ai refaite (donc, passée à 4). Ensuite, j'ai modifié un truc de trop, je n'arrivais plus à la faire fonctionner, donc j'ai re-fait la bêta 4 en mieux, d'où le nom de v1_10Bêta4bis.

Ce que vous attendez tous (attention, à partir de maintenant, il faut récupérer le script et le skin, sous peine de ne rien voir s'afficher),
Version du script compilée : DofusLog-v1_10Bêta4b.exe - 305.44 kB
Version du script scriptée : DofusLog-v1_10Bêta4b.au3 - 29.58 kB
Version du script source :
Code:
#include <GUIConstants.au3>	;Nécessaire surtout pour le $GUI_EVENT_CLOSE
#include <String.au3>	;Pour l'encryptage
#include <Array.au3>
AutoItSetOption ("GUIOnEventMode", 1)
Global	$fichier, $prgChemin, $prgNom, $FenBase, $Label, $CFini, $fin, $Lancer, $Lance = 0, $Multico, $multi = 0, $Modifier, $Nouveau, $Supprimer, $Ajoute, $Retire, $Haut, $Bas, $Boutons, $Options, $OLog, $LLancer, $LModifier, $LNouveau, $LSupprimer,  $Fichiers, $FNouv, $FCharge, $FQuit, $ORaccourcis, $RNouveau, $RModifier, $RCharge, $RSupprime, $OSkin, $SCharger, $SNouveau, $SModifier, $SSauvegarder, $Aide, $ATuto, $aLog, $coListe, $CcoListe, $Radio, $Skin, $suppr = -1
Global	$NbLignes = 2	;Nombre de lignes utilisées par entrée dans le fichier de Log
Global	$logChemin = @ScriptDir & "\log.txt"
Global	$compte = 1, $compteBis
Dim	$coListe[1]
If	$CmdLine[0] > 0	Then	$logChemin = $CmdLine[1]
If	$CmdLine[0] > 1	Then
	$coListe = StringSplit ($CmdLine[2], ",")
	For	$n = 0	To	UBound ($coListe) - 2
		$coListe[$n] = $coListe[$n+1]
	Next
	ReDim	$coListe[UBound ($coListe) - 1]
	$Lance = 1
	$fin = $GUI_CHECKED	;Pas obligatoire, en fait, mais préférable, finalement.
EndIf
Global	$Separ = 4	;Séparateur, hauteur en pixels entre deux lignes
Global	$Hligne = 13	;hauteur présumée par ligne (13 pixels de haut, voire 14)
Global	$Ht = $Separ + 2 * $Hligne
Global	$msg
Dim	$aLog[3]
Dim	$Ccoliste[UBound ($coListe)]
_FileReadToArray2 (@ScriptDir & "\SkinDB.txt", $Skin)	;rendre modifiable ce chemin

ChargeLog (0)
While	1
	Sleep(100)
	If	$Lance = 1	Then	Lance ()
WEnd
	;==============================Fonctions totalement créées par Za====================================
Func	ChargeLog ($nouv = 1)
	If	Not	FileExists ($logChemin)	Or	$nouv = 1	Then
		TrayTip (@ScriptName, "Veuillez sélectionner un fichier texte.", 0)
		$fichier = FileOpenDialog (@ScriptName & " - Sélectionnez ou créez un fichier contenant vos logs", $logChemin, "Text files (*.txt)|All files (*.*)", 8, "Log.txt")
		If	$fichier = ""	Then	Exit	;Ok, c'est violent, mais bon.. ^^
		TrayTip (@ScriptName, "Enregistrement de la place du Log en cours", 1, 16)
		_FileWriteToLine2 (@ScriptFullPath, 12,'Global	$logChemin = "' & $fichier & '"', 1)
		TrayTip ("", "", 0)
	Else
		$fichier = $logChemin
	EndIf
	$existe = _FileReadToArray2 ($fichier, $aLog)

	;$prgChemin et $prgNom n'ont rien à faire ici, normalement. Sauf à associer les logs avec une application.
	$prgChemin = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Ankama\Dofus", "Path") & "\"
	$prgNom = "Dofus.exe"
	If	Not	FileExists ($prgChemin & $prgNom)	Then
		If	Not	FileExists ($prgChemin & "Dofus_client.exe")	Then
			$prgChemin = "C:\Program Files\Dofus\"
			If	Not	FileExists ($prgChemin & $prgNom)	Then
				If	Not	FileExists ($prgChemin & "Dofus_client.exe")	Then
					$prgNom = FileOpenDialog (@ScriptName & " - Sélectionnez votre lanceur de jeu Dofus", $prgChemin, "(*.exe; *.html)|Tous (*.*)", 1, "Dofus")
				Else
					$prgNom = "Dofus_client.exe"
				EndIf
			EndIf
		Else
			$prgNom = "Dofus_client.exe"
		EndIf
	EndIf

	If	Not	$existe	Then
		Modifier (1, $fichier)
	EndIf

	_FileReadToArray2 ($fichier, $aLog)
	Dim	$Radio[(UBound ($aLog) + 1) / $NbLignes]
	
	Fenetre ()
EndFunc
Func	Fenetre ($GUI = "FenBase")	;String
	Global	$tFen = (UBound ($aLog) - 1) / $NbLignes
	Global	$lFen = (200 + 200 * ($multi = 1))
	If	$GUI = "FenBase"	Then	GUIDelete ($FenBase)
	
	;Appeler la fonction skin : Skinappel($string)
	For $l = 1 to UBound ($Skin) - 1
		If	$Skin[$l] = $GUI	Then	ExitLoop
	Next
	For $g = $l To 	UBound ($Skin) - 1
		If	(StringLeft ($Skin[$g], 3) = "Fen")	And	($g <> $l)	Then	ExitLoop
		If	(StringLeft ($Skin[$g], 3) = "Fen")	And	($g = $l)	Then
			$t = $Skin[$g]
		Else
			$t = StringRight ($Skin[$g], StringLen ($Skin[$g]) - StringInStr ($Skin[$g], "	", 2, -1))
		EndIf
		If	Not (StringInStr ($Skin[$g], ":"))	And	($Skin[$g] <> "")	Then
			Switch	$t
				Case "Multico"
					If	UBound ($aLog) / $NbLignes > 2	Then
						Assign ($t, Skinappel ($Skin[$g]))
					EndIf
				Case	"Ajoute", "Retire", "Haut", "Bas", "ListeMulti"
					If	$multi = 1	And	$Lance <> 1	Then
						If	$t = "ListeMulti"	Then
							If	$coListe[0] = ""	Then	$coListe[0] = $compte
							$compteBis = 0
							While	$compteBis < UBound ($coListe)
								$CcoListe[$compteBis] = Skinappel ($Skin[$g])
								$compteBis += 1
							WEnd
						Else
							Assign ($t, Skinappel ($Skin[$g]))
						EndIf
					EndIf
				Case	"Surnoms"
					$compteBis = 1
					While	$compteBis < (UBound ($aLog)) / $NbLignes
						$Radio[$compteBis] = Skinappel ($Skin[$g])	;+image
;~				 		GUICtrlSetLimit ($Radio[$compteBis], 12)	;pour limiter la largeur des caractères. (je n'ai pas trouvé comment faire.)
						$compteBis += 1
					WEnd
					GUICtrlSetState ($Radio[$compte], 1 + 256)
					GUICtrlSetPos ($Radio[$compte], 15, 30 + ($compte - 1) * $Ht)
					$compteBis = $compte
				Case	Else	;Dans tous les cas "normaux"
					Assign ($t, Skinappel ($Skin[$g]))
			EndSwitch
		EndIf
	Next
	GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
	GUISetState ()
	If	$GUI = "FenBase"	Then	DesAct ()
EndFunc
Func	Skinappel ($String)
	Local	$ligne = 1, $ligneBis
	Local	$param, $s
	Dim	$SkinBis[9]
	
	Do
		$ligne += 1
	Until	$Skin[$ligne - 1] = $String
	$marqueur = StringInStr ($Skin[$ligne], "	", 2, 1)
	$ligneBis = $ligne
	While	StringInStr ($Skin[$ligneBis], "	", 2, 1) = $marqueur
		$param = StringRight (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1)), StringLen (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1))) - StringInStr (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1)), ":") - 1)
		If	(Execute ($param) <> '')	Or	($param = '""')	Then	$param = Execute ($param)
		Switch	StringLeft (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1)), StringInStr (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1)), ":"))
			Case	"Type :"
				$SkinBis[0] = $param ;commande choisie
			Case	"contenu1 :"
				If	$param = "$aLog[$compteBis]"	Then
					$SkinBis[1] = ""
				Else
					$SkinBis[1] = $param ;valeur affectée
				EndIf
			Case	"largeur :"
				If	$SkinBis[0] = "Fenêtre"	Then
					$SkinBis[2] = $param
				Else
					$SkinBis[4] = $param
				EndIf
			Case	"hauteur :"
				If	$SkinBis[0] = "Fenêtre"	Then
					$SkinBis[3] = $param
				Else
					$SkinBis[5] = $param
				EndIf
			Case	"posx :"
				If	$SkinBis[0] = "Fenêtre"	Then
					$SkinBis[4] = $param
				Else
					$SkinBis[2] = $param
				EndIf
			Case	"posy :"
				If	$SkinBis[0] = "Fenêtre"	Then
					$SkinBis[5] = $param
				Else
					$SkinBis[3] = $param
				EndIf
			Case	"style :"
				If $SkinBis[5] = ""	Then
					If	$SkinBis[4] = ""	Then	$SkinBis[4] = -1
					$SkinBis[5] = -1
				EndIf
				$SkinBis[6] = $param
			Case	"étendu :"
				$SkinBis[7] = $param
			Case	"parenté :"
				If	$SkinBis[0] = "Groupe"	Then
					$SkinBis[1] = $param
				ElseIf	($SkinBis[0] = "Menu")	Or	($SkinBis[0] = "S-Menu")	Then
					$SkinBis[2] = $param
				Else
					$SkinBis[8] = $param
				EndIf
			Case	"Positionnement :"
				$SkinBis[3] = $param
		EndSwitch
		$ligneBis += 1
	WEnd
	$s = Skin ($SkinBis)
	Dim	$SkinTer[2]
	$ligneBis = $ligne
	While	StringInStr ($Skin[$ligneBis], "	", 2, 1) = $marqueur
		$SkinTer[1] = StringRight (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1)), StringLen (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1))) - StringInStr (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1)), ":") - 1)
		If StringInStr ($SkinTer[1], ",") > 0	Then
			$SkinTer = StringSplit ($SkinTer[1], ",")
		ElseIf	(Execute ($SkinTer[1]) <> '')	Or	($SkinTer[1] = '""')	Then
			$SkinTer[1] = Execute ($SkinTer[1])
		EndIf
		$SkinBis[0] = StringLeft (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1)), StringInStr (StringRight ($Skin[$ligneBis], StringLen($Skin[$ligneBis]) - StringInStr ($Skin[$ligneBis], "	", 2, -1)), ":") - 2)
		Switch	$SkinBis[0]
			Case	"Curfen"
				$SkinBis[1] = $SkinTer[1]
				$SkinBis[2] = 0	;ou 1 pour remplacer constamment le curseur dans la fenêtre ciblée
				$SkinBis[3] = $s
				Skin($SkinBis)
			Case	"Fond-F"
				$SkinBis[1] = $SkinTer[1]
				$SkinBis[2] = $s
				Skin ($SkinBis)
			Case	"Ic-F"
				$SkinBis[1] = $SkinTer[1]
				$SkinBis[2] = -1	;(pour l'icône par défaut du fichier ciblé...)
				$SkinBis[3] = $s
				Skin ($SkinBis)
			Case	"Police-Fen"
				$SkinBis[1] = $SkinTer[1]	;size
				$SkinBis[2] = $SkinTer[2]	;weight
				$SkinBis[3] = $SkinTer[3]	;attribute
				$SkinBis[4] = $SkinTer[4]	;fontname
				$SkinBis[5] = $s	;winhandle
				Skin ($SkinBis)
			Case	"OnEvent"	;ne fonctionne pas encore. Snaffou. :(
				$SkinBis[1] = $SkinTer[1]	;Event ciblé
				$SkinBis[2] = $SkinTer[2]	;fonction associée
				$SkinBis[3] = $s
;~ 				Skin ($SkinBis)
			Case	"State"
				$SkinBis[1] = $SkinTer[1]
				$SkinBis[2] = $s
				Skin ($SkinBis)
			Case	"Stylfaen"
				$SkinBis[1] = $SkinTer[1]
				$SkinBis[2] = $SkinTer[2]
				$SkinBis[3] = $s
				Skin ($SkinBis)
			Case	"Coul"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				Skin ($SkinBis)
			Case	"Cur"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				Skin ($SkinBis)
			Case	"D-Coul"
				$SkinBis[1] = $SkinTer[1]
				$SkinBis[2] = $s
				Skin ($SkinBis)
			Case	"D-Fond-C"
				$SkinBis[1] = $SkinTer[1]
				$SkinBis[2] = $s
				Skin ($SkinBis)
			Case	"Data"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				Skin ($SkinBis)
			Case	"Etat"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				Skin ($SkinBis)
			Case	"Event"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				Skin ($SkinBis)
			Case	"Fond-C"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				Skin ($SkinBis)
			Case	"Graphip'tit"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				For	$n = 2	To	UBound ($SlinTer) - 1
					$SkinBis[$n + 1] = $SkinTer[$n]	;par($n)
				Next
				Skin ($SkinBis)
			Case	"Im-C"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				$SkinBis[3] = $SkinTer[2]	;icône
				$SkinBis[4] = $SkinTer[3]	;type
				Skin ($SkinBis)
			Case	"Police-C"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]	;size
				$SkinBis[3] = $SkinTer[2]	;weight
				$SkinBis[4] = $SkinTer[3]	;attribute
				$SkinBis[5] = $SkinTer[4]	;fontname
				Skin ($SkinBis)
			Case	"Pos"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]	;left
				$SkinBis[3] = $SkinTer[2]	;top
				$SkinBis[4] = $SkinTer[3]	;width
				$SkinBis[5] = $SkinTer[4]	;height
				Skin ($SkinBis)
			Case	"Resize"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				Skin ($SkinBis)
			Case	"Restyle"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				$SkinBis[3] = $SkinTer[2]	;étendu
				Skin ($SkinBis)
			Case	"Titruc"
				$SkinBis[1] = $s
				$SkinBis[2] = $SkinTer[1]
				$SkinBis[3] = $SkinTer[2]	;titre
				$SkinBis[4] = $SkinTer[3]	;icône
				$SkinBis[5] = $SkinTer[4]	;options
				Skin ($SkinBis)
		EndSwitch
		$ligneBis += 1
	WEnd
	Return $s
EndFunc
Func	Skin ($Array)
	Switch	$Array[0]
		Case	"Curfen"
			Return	GUISetCursor ($Array[1], $Array[2], $Array[3])
		Case	"Fenêtre"
			Return	GUICreate ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Fond-F"
			Return	GUISetBkColor ($Array[1], $Array[2])
		Case	"Groupe"
			Return	GUIStartGroup ($Array[1])
		Case	"Ic-F"
			Return	GUISetIcon ($Array[1], $Array[2], $Array[3])
		Case	"Police-Fen"
			Return	GUISetFont ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5])
		Case	"OnEvent"
			Return	GUISetOnEvent ($Array[1], $Array[2], $Array[3])
		Case	"State"
			Return	GUISetState ($Array[1], $Array[2])
		Case	"Stylfaen"
			Return	GUISetStyle ($Array[1], $Array[2], $Array[3])
		Case	"Avi"
			Return	GUICtrlCreateAvi ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7], $Array[8])
		Case	"Bouton"
			Return	GUICtrlCreateButton ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Calendrier"
			Return	GUICtrlCreateMonthCal ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Checkbox"
			Return	GUICtrlCreateCheckbox ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Combo"
			Return	GUICtrlCreateCombo ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Dat'action"
			Return	GUICtrlCreateDate ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Editeur"
			Return	GUICtrlCreateEdit ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Graphisme"
			Return	GUICtrlCreateGraphic ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5])
		Case	"Icône"
			Return	GUICtrlCreateIcon ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7], $Array[8])
		Case	"Image"
			Return	GUICtrlCreatePic ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Input"
			Return	GUICtrlCreateInput ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Label"
			Return	GUICtrlCreateLabel ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Liste"
			Return	GUICtrlCreateList ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"Menu"
			Return	GUICtrlCreateMenu ($Array[1], $Array[2], $Array[3])
		Case	"MiniMenu"
			Return	GUICtrlCreateContextMenu ($Array[1])
		Case	"Radio"
			Return	GUICtrlCreateRadio ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7])
		Case	"S-Menu"
			Return	GUICtrlCreateMenuItem (String ($Array[1]), $Array[2], $Array[3])	;, $Array[4])
		Case	"Coul"
			Return	GUICtrlSetColor ($Array[1], $Array[2])
		Case	"Cur"
			Return	GUICtrlSetCursor ($Array[1], $Array[2])
		Case	"D-Coul"
			Return	GUICtrlSetDefColor ($Array[1], $Array[2])
		Case	"D-Fond-C"
			Return	GUICtrlSetDefBkColor ($Array[1], $Array[2])
		Case	"Data"
			Return	GUICtrlSetData ($Array[1], $Array[2])
		Case	"Etat"
			Return	GUICtrlSetState ($Array[1], $Array[2])
		Case	"Event"
			Return	GUICtrlSetOnEvent ($Array[1], $Array[2])
		Case	"Fond-C"
			Return	GUICtrlSetBkColor ($Array[1], $Array[2])
		Case	"Graphip'tit"
			Return	GUICtrlSetGraphic ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5], $Array[6], $Array[7], $Array[8])
		Case	"Im-C"
			Return	GUICtrlSetImage ($Array[1], $Array[2], $Array[3], $Array[4])
		Case	"Police-C"
			Return	GUICtrlSetFont ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5])
		Case	"Pos"
			Return	GUICtrlSetPos ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5])
		Case	"Resize"
			Return	GUICtrlSetResizing ($Array[1], $Array[2])
		Case	"Restyle"
			Return	GUICtrlSetStyle ($Array[1], $Array[2], $Array[3])
		Case	"Titruc"
			Return	GUICtrlSetTip ($Array[1], $Array[2], $Array[3], $Array[4], $Array[5])
	EndSwitch
EndFunc
Func	DesAct ($DesActive = 0)	;Réactive les boutons par défaut
	If	$DesActive = 1	Then
		GUICtrlSetState ($Lancer, $GUI_DISABLE)
		GUICtrlSetState ($Modifier, $GUI_DISABLE)
		GUICtrlSetState ($Nouveau, $GUI_DISABLE)
		GUICtrlSetState ($Supprimer, $GUI_DISABLE)
		GUICtrlSetState ($Options, $GUI_DISABLE)
		GUICtrlSetState ($Fichiers, $GUI_DISABLE)
		GUICtrlSetState ($Aide, $GUI_DISABLE)
	Else
		GUICtrlSetState ($Lancer, $GUI_ENABLE)
		GUICtrlSetState ($Modifier, $GUI_ENABLE)
		GUICtrlSetState ($Nouveau, $GUI_ENABLE)
		GUICtrlSetState ($Supprimer, $GUI_ENABLE)
		GUICtrlSetState ($Options, $GUI_ENABLE)
		GUICtrlSetState ($Fichiers, $GUI_ENABLE)
		GUICtrlSetState ($Aide, $GUI_ENABLE)
	EndIf
EndFunc
Func	FSupprimer ()
	If	MsgBox (0x51, @ScriptName & " - Suppression", "Souhaitez-vous vraiment détruire cette entrée ?") = 2	Then	Return
	DesAct (1)
	TrayTip (@ScriptName, "Effacement en cours...", 10, 16)
	$ligne = $compte * $NbLignes + 1
	MRetire ($ligne)
	While	$ligne < UBound ($aLog)
		$aLog[$ligne - $NbLignes] = $aLog[$ligne]
		$ligne += 1
	WEnd
	ReDim	$aLog[UBound ($aLog) - $NbLignes]
	ReDim	$Radio[UBound ($Radio) - 1]
	If	$compte > (UBound ($aLog) - 1) / $NbLignes	Then	$compte -= 1
	_FileWriteFromArray2 ($fichier, $aLog, 1, UBound ($aLog) - 1)
	TrayTip ("", "", 0)

	Fenetre ()
EndFunc
Func	FModifier ()
	DesAct (1)
	Modifier ($compte, $fichier)
EndFunc
Func	FNouveau ()
	DesAct (1)
	ReDim	$aLog[UBound ($aLog) + $NbLignes]
	ReDim	$Radio[UBound ($Radio) + 1]
	Modifier ((UBound ($aLog) - 1) / $NbLignes, $fichier)
EndFunc
Func	Modifier ($compteBis, $fich)
	Global	$compteTer = $NbLignes * ($compteBis - 1) + 1
	Global	$FenMod, $LabelSurnom, $LabelClef, $LabelNDC, $LabelMDP, $InputPseudo, $InputClef, $InputNDC, $InputMDP, $BValide, $BAnnule, $Encrypt = StringSplit ($aLog[$compteTer + 1], "{TAB}")
	Fenetre ("FenMod")
EndFunc
Func	ModAnnule ()
	GUIDelete($FenMod)
	Desact ()
EndFunc
Func	ModModifier ()
	If	MsgBox (0x51, @ScriptName & " - Modifications", "Attention, vous vous apprêtez à" & @CRLF & "modifier définitivement ces données." & @CRLF & "Êtes-vous sûr ?") = 2	Then	Return
	If	GUICtrlRead ($InputPseudo) <> ""	Then
		TrayTip (@ScriptName, "Écriture en cours...", 0, 16)
		$aLog[$compteTer] = GUICtrlRead ($InputPseudo)
		_FileWriteToLine2 ($fichier, $compteTer, $aLog[$compteTer], 1)
		If	GUICtrlRead ($InputNDC) <> ""	Then
			If	GUICtrlRead ($InputClef) = "" 	Then
				$Encrypt[1] = GUICtrlRead ($InputNDC)
			Else
				$Encrypt[1] = _StringEncrypt (1, GUICtrlRead ($InputNDC), GUICtrlRead ($InputClef))
			EndIf
		EndIf
		If	GUICtrlRead ($InputMDP) <> ""	Then
			If	GUICtrlRead ($InputClef) = "" 	Then
				$Encrypt[UBound ($Encrypt) - 1] = GUICtrlRead ($InputMDP)
			Else
				$Encrypt[UBound ($Encrypt) - 1] = _StringEncrypt (1, GUICtrlRead ($InputMDP), GUICtrlRead ($InputClef))
			EndIf
		EndIf
		$Encrypt = $Encrypt[1] & "{TAB}" & $Encrypt[UBound ($Encrypt) - 1]
		If	$Encrypt <> $aLog[$compteTer + 1] Then
			$aLog[$compteTer + 1] = $Encrypt
			_FileWriteToLine2 ($fichier, $compteTer + 1, $aLog[$compteTer + 1], 1)
		EndIf
		TrayTip ("", "", 0)
	EndIf
	GUIDelete ($FenMod)
	GUIDelete ($FenBase)
	Fenetre ()
EndFunc
Func	FRadio ()
	Local	$mess = @GUI_CtrlId
	If	$mess <> $Radio[$compte]	Then
		GUICtrlSetPos ($Radio[$compte], 5, 27 + (($compte - 1) * $Ht))
		While	$mess <> $Radio[$compte]
			$compte += 1
			If	$compte > (UBound ($Radio) - 1)	Then
				$compte = 1
			EndIf
		WEnd
		GUICtrlSetPos ($Radio[$compte], 15, 30 + (($compte - 1) * $Ht))
	Else
		If	$multi = 1	Then
			MAjoute ()
		Else
			FLancer ($compte)
			If	$fin = $GUI_CHECKED	Then	Exit
		EndIf
	EndIf
EndFunc
Func	FMultico ()
	$multi = GUICtrlRead ($Multico)
	If	$coListe[0] = ""	Then	$coListe[0] = $compte
	Fenetre ()
EndFunc
Func	MAjoute ()
	Local	$n
	For	$n = 0	To	UBound ($coListe) - 1
		If	$coListe[$n] = $compte	Then	ContinueLoop	2
	Next
	ReDim	$coListe[UBound ($coListe) + 1]
	ReDim	$CcoListe[UBound ($CcoListe) + 1]
	$coListe[UBound ($coListe) - 1] = $compte
	$CcoListe[UBound ($CcoListe) - 1] = GUICtrlCreateCheckbox ($aLog[$coListe[UBound ($CcoListe) - 1]* $NbLignes - 1], 255, 27 + (UBound ($CcoListe) - 1) * $Ht)
	Fenetre ("FenBase")
EndFunc
Func	MRetire ($suppr = -1)
	Local	$n = 0, $q
	While	$n < UBound ($CcoListe)
		If	$suppr = -1	Then
			If	GUICtrlRead ($CcoListe[$n]) = $GUI_CHECKED	And	$suppr = -1	Then
				$q = $n
				While	$q < UBound ($CcoListe) - 1
					$coListe[$q] = $coListe[$q + 1]
					GUICtrlSetState ($CcoListe[$q], GUICtrlRead ($CcoListe[$q + 1]))
					GUICtrlSetData ($CcoListe[$q], GUICtrlRead ($CcoListe[$q + 1], 1))
					$q += 1
				WEnd
				GUICtrlDelete ($CcoListe[UBound ($CcoListe) - 1])
				If	UBound	($coListe) > 1	Then
					ReDim	$coListe[UBound ($coListe) - 1]
					ReDim	$CcoListe[UBound ($CcoListe) - 1]
					GUICtrlSetPos ($Retire, 275, 27 + UBound ($coListe) * $Ht)
					GUICtrlSetPos ($Haut, 205, $Ht + $Ht * (UBound ($CcoListe) - 1) / 2, 40)
					GUICtrlSetPos ($Bas, 205, ($Ht - 3) + $Ht + $Ht * (UBound ($CcoListe) - 1) / 2, 40)
					$n -= 1
				Else
					$coListe[0] = ""
					$multi = 0
					Fenetre ()
				EndIf
			EndIf
		Else
			If	GUICtrlRead ($CcoListe[$n], 1) = $aLog[$suppr - $NbLignes]	Then
				$q = $n
				While	$q < UBound ($CcoListe) - 1
					$coListe[$q] = $coListe[$q + 1]
					GUICtrlSetState ($CcoListe[$q], GUICtrlRead ($CcoListe[$q + 1]))
					GUICtrlSetData ($CcoListe[$q], GUICtrlRead ($CcoListe[$q + 1], 1))
					$q += 1
				WEnd
				GUICtrlDelete ($CcoListe[UBound ($CcoListe) - 1])
				If	UBound	($coListe) > 1	Then
					ReDim	$coListe[UBound ($coListe) - 1]
					ReDim	$CcoListe[UBound ($CcoListe) - 1]
					GUICtrlSetPos ($Retire, 275, 27 + UBound ($coListe) * $Ht)
					GUICtrlSetPos ($Haut, 205, $Ht + $Ht * (UBound ($CcoListe) - 1) / 2, 40)
					GUICtrlSetPos ($Bas, 205, ($Ht - 3) + $Ht + $Ht * (UBound ($CcoListe) - 1) / 2, 40)
					$n -= 1
				Else
					$coListe[0] = ""
					$multi = 0
					Fenetre ()
				EndIf
			EndIf
		EndIf
		$n += 1
	WEnd
EndFunc
Func	MHaut ()
	Local	$n = 1, $z, $y
	While	$n < UBound ($CcoListe)
		If	GUICtrlRead ($CcoListe[$n]) = $GUI_CHECKED	Then
			$z = GUICtrlRead ($CcoListe[$n])
			$y = GUICtrlRead ($CcoListe[$n], 1)
			GUICtrlDelete ($CcoListe[$n])
			$CcoListe[$n] = GUICtrlCreateCheckbox (GUICtrlRead ($CcoListe[$n - 1], 1), 255, 27 + $n * $Ht)
			GUICtrlSetState ($CcoListe[$n], GUICtrlRead ($CcoListe[$n - 1]))
			GUICtrlDelete ($CcoListe[$n - 1])
			$CcoListe[$n - 1] = GUICtrlCreateCheckbox ($y, 255, 27 + ($n - 1) * $Ht)
			GUICtrlSetState ($CcoListe[$n - 1], $z)
			$z = $coListe[$n]
			$coListe[$n] = $coListe[$n - 1]
			$coListe[$n - 1] = $z
		EndIf
		$n = $n + 1
	WEnd
EndFunc
Func	MBas ()
	Local	$n = UBound ($CcoListe) - 2, $z
	While	$n >= 0
		If	GUICtrlRead ($CcoListe[$n]) = $GUI_CHECKED	Then
			$z = GUICtrlRead ($CcoListe[$n])
			$y = GUICtrlRead ($CcoListe[$n], 1)
			GUICtrlDelete ($CcoListe[$n])
			$CcoListe[$n] = GUICtrlCreateCheckbox (GUICtrlRead ($CcoListe[$n + 1], 1), 255, 27 + $n * $Ht)
			GUICtrlSetState ($CcoListe[$n], GUICtrlRead ($CcoListe[$n + 1]))
			GUICtrlDelete ($CcoListe[$n + 1])
			$CcoListe[$n + 1] = GUICtrlCreateCheckbox ($y, 255, 27 + ($n + 1) * $Ht)
			GUICtrlSetState ($CcoListe[$n + 1], $z)
			$z = $coListe[$n]
			$coListe[$n] = $coListe[$n + 1]
			$coListe[$n + 1] = $z
		EndIf
		$n = $n - 1
	WEnd
EndFunc
Func	RModif ($mod = 0)
	Global	$n, $r
	Global	$fenRac, $LabelSansNom, $modRac = 0, $IScript, $BSParc, $LabelSansNom2, $ILog, $BLParc, $LComptes, $LabelSansNom3, $IComptes, $RBValide, $RBAnnule
	Fenetre ("FenRac")
EndFunc
Func	ParcoureScript ()
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez votre script :", @ScriptDir, "Scripts (*.au3	;*.exe)|Tous (*.*)", 8, @ScriptName)
	If	$n <> ""	Then	GUICtrlSetData ($IScript, $n)
EndFunc
Func	ParcoureLog ()
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez le fichier contenant vos logs :", $logChemin, "Textes (*.txt)|Tous (*.*)", 8, "Log.txt")
	If	$n <> ""	Then	GUICtrlSetData ($ILog, $n)
EndFunc
Func	RValide ()
	$n = FileOpenDialog (@ScriptName & " - Choissez le nom et répertoire du raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName & ".lnk")
	If	$n = ''	Then	Return
	If	StringInStr ($n, ".lnk") = 0	Then	$n &= ".lnk"
	FileCreateShortcut (GUICtrlRead ($IScript), $n, "", ' "' & GUICtrlRead ($ILog) & '" ' & GUICtrlRead ($IComptes))
	GUIDelete ($fenRac)
EndFunc
Func	RFinir ()
	GUIDelete ($fenRac)
EndFunc
Func	RCharge ()
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez votre raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName & ".lnk")
	If	$n = ""	Then	Return
	$r = FileGetShortcut ($n)
	$logChemin = StringMid ($r[2], 3, StringInStr ($r[2], '"', 2, 2) - 3)
	$coListe = StringSplit (StringMid ($r[2], StringInStr ($r[2], '"', 2, 2) + 2), ",")
	For	$n = 0	To	UBound ($coListe) - 2
		$coListe[$n] = $coListe[$n+1]
	Next
	ReDim	$coListe[UBound ($coListe) - 1]
	$Lance = 1
	GUIDelete ($fenBase)
	ChargeLog ()
	Return
EndFunc
Func	RSuppre ()
	$Racc = FileOpenDialog (@ScriptName & " - Sélectionnez votre raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName)
	If	$Racc <> ""	Then	FileDelete ($Racc)
EndFunc
Func	Lance ()
	If	$multi = 1	Or	$Lance = 1	Then
		For	$n = 0	To	UBound ($coListe) - 1
			If	$coListe[$n] <= ((UBound ($aLog) - 1) / $NbLignes) And	$coListe[$n] > 0	Then  FLancer ($coListe[$n])
		Next
		$Lance = 0
	Else
		FLancer ($compte)
	EndIf
	If	$fin = $GUI_CHECKED	Then	Exit
EndFunc
Func	FLancer ($compteBis = $compte)
	DesAct (1)
	$compteBis = ($compteBis - 1) * $NbLignes + 1
	If	StringInStr ($aLog[$compteBis + 1], "{TAB}") = 0	Then	Return	;vérif alakon, à faire pour la prochaine version ^^
	Local	$Clef = InputBox (@ScriptName & " - Code du compte " & $aLog[$compteBis], "Veuillez entrer la clef de " & $aLog[$compteBis]& " :", "", "°")
	If	@error = 1	Then
		DesAct ()
		Return
	EndIf
	Local	$NDCMDP = StringSplit ($aLog[$compteBis + 1], "{TAB}", 1)
	If	$Clef <> ""	Then
		$NDCMDP[1] = _StringEncrypt (0, $NDCMDP[1], $Clef)
		$NDCMDP[2] = _StringEncrypt (0, $NDCMDP[2], $Clef)
	EndIf
	If	MsgBox (0x51, @ScriptName, "Lancement de la fenêtre Dofus !" & @CRLF & "Cliquez sur Annuler pour fermer." & @CRLF & Message(), 2) <> 2	Then
		TrayTip (@Scriptname, "Lancement de la fenêtre Dofus.", 0)
		ShellExecute ($prgNom, "", $prgChemin)
		AutoItSetOption ("WinTitleMatchMode", 3)
		Do
			Sleep (200)
		Until	WinActive ("Dofus  ")	Or	WinActive ("Dofus - Opera")	Or	WinActive ("Dofus - Windows Internet Explorer")	Or	WinActive ("Dofus - Mozilla Firefox")
		AutoItSetOption ("WinTitleMatchMode", 1)
		WinSetTitle ("Dofus", "", "Dofus - " & $aLog[$compteBis])
		TrayTip ("","",0)
		Sleep (1000)
		Traytip (@ScriptName, "Veuillez placer votre curseur" & @CRLF & 'sur la zone "Compte Ankama".', 10)
		AutoItSetOption ("MouseCoordMode", 0)
		$posDof = WinGetClientSize ("Dofus - " & $aLog[$compteBis])
		Do
			$posCur = MouseGetPos ()
			Sleep(20)
		Until	(MouseGetCursor () = 5)	And	($posCur[0] < $posDof[0])	And	($posCur[1] < $posDof[1])	And	($posCur[0] > 0)	And	($posCur[1] > 0)	And	WinActive ("Dofus - " & $aLog[$compteBis])
		MouseClick ("left")
;~ Send ("^f")	;Mode "plein écran"
		Send ($NDCMDP[1], 1)
		Send ("{TAB}")
		Send ($NDCMDP[2], 1)
		AutoItSetOption ("MouseCoordMode", 1)
		TrayTip (@Scriptname, "Veuillez passer votre souris" & @CRLF & 'sur le bouton "OK".', 0)
		Do
			sleep (20)
			$cur = MouseGetPos ()
		Until	((MouseGetCursor () = 0)	And	(PixelGetColor ($cur[0], $cur[1]) = 0xFF9900))
		MouseClick ("left")
		TrayTip ("", "", 0)
	EndIf
	DesAct ()
	Return
EndFunc
Func	Message ()	;à inter-agir avec SkinDB.txt, avec la variable MessageFlood
	Switch	Random (0, 4, 1)
		Case	0
			Return	"(\__/)" & @CRLF & "( ' . ' )" & @CRLF & '(")_(")'
		Case	1
			Return	@CRLF & "Vous pouvez aussi aller jouer dehors," & @CRLF & "avec les papillons, les fleurs et les oiseaux."
		Case	2
			Return	""
		Case	3
			Return	@CRLF & "Ou patientez 2 secondes," & @CRLF & "que la fenêtre se ferme d'elle-même."
		Case	4
			Return	@CRLF & "La Vie est comme cette boîte de dialogue :" & @CRLF & "C'est quand elle se ferme qu'on arrive à l'essentiel."
	EndSwitch
EndFunc
Func	Fini ()
	$fin = GUICtrlRead ($CFini)
EndFunc
Func	Void ()
	MsgBox (80, @ScriptName, "L'objet cliqué (" & @GUI_CtrlId & ") n'a pas" & @CRLF & "d'action associée, désolée.")
EndFunc
Func	Quit ()
	GUIDelete ($fenBase)
	Exit
EndFunc
	;==========================Fonctions AutoIt 3 modifiées========================================
Func	_FileWriteToLine2 ($sFile, $iLine, $sText, $fOverWrite = 0)
	If	Not	FileExists ($sFile)	Then	FileWrite ($sFile, @CRLF)
	Local	$filtxt = FileRead ($sFile, FileGetSize ($sFile))
	$filtxt = StringSplit ($filtxt, @CRLF, 1)
	If	$filtxt[0]< $iLine	Then	ReDim	$filtxt[$iLine + 1]
	Local	$fil = FileOpen ($sFile, 2), $i
	For	$i = 1	To	UBound ($filtxt) - 1
		If	$i = $iLine	Then
			If	$fOverWrite = 1	Then
				If	$sText <> @CRLF	Then
					If	$i < UBound ($filtxt, 1) - 1	Then
						FileWrite ($fil, $sText & @CRLF)
					ElseIf	$i = UBound ($filtxt, 1) - 1	Then
						FileWrite ($fil, $sText) 
					EndIf
				Else
					If	$i < UBound ($filtxt, 1) - 1	Then
						FileWrite ($fil, $sText)
					EndIf
				EndIf
			EndIf
			If	$fOverWrite = 0	Then
				If	$i < UBound ($filtxt, 1) - 1	Then
					FileWrite ($fil, $sText & @CRLF)
					FileWrite ($fil, $filtxt[$i]& @CRLF)
				ElseIf	$i = UBound ($filtxt, 1) - 1	Then
					FileWrite ($fil, $sText & @CRLF)
					FileWrite ($fil, $filtxt[$i])
				EndIf
			EndIf
		ElseIf	$i < UBound ($filtxt, 1) - 1	Then
			FileWrite ($fil, $filtxt[$i]& @CRLF)
		ElseIf	$i = UBound ($filtxt, 1) - 1	Then
			FileWrite ($fil, $filtxt[$i])
		EndIf
	Next
	FileClose ($fil)
	Return	1
EndFunc	;==>_FileWriteToLine2
Func _FileWriteFromArray2 ($File, $a_Array, $i_Base = 0, $i_UBound = -1)
	Local	$hFile, $x
	If	IsString ($File)	Then
		$hFile = FileOpen ($File, 2)
	Else
		$hFile = $File
	EndIf
	If	$hFile = -1	Then	Return	SetError (1, 0, 0)
	If	$i_UBound < 1	Then	$i_UBound = UBound ($a_Array)
	$x = $i_Base
	Do
		FileWrite ($hFile, $a_Array[$x]& @CRLF)
		$x += 1
	Until	$x = $i_UBound
	FileWrite ($hFile, $a_Array[$i_UBound])
	If	IsString ($File)	Then	FileClose ($hFile)
EndFunc 	;==>_FileWriteFromArray2
Func	_FileReadToArray2 ($sFilePath, ByRef	$aArray)
	Local	$hFile
	$hFile = FileOpen ($sFilePath, 0)
	If	$hFile = -1	Then
		SetError (1)
		Return	0
	EndIf
	$aArray = StringSplit (StringStripCR (FileRead ($hFile, FileGetSize ($sFilePath))), @CRLF)
	FileClose ($hFile)
	Return	1
EndFunc	;==>_FileReadToArray2
Version fichier du skin : SkinDB.txt - 10.83 kB
Version texte du skin :
Code:
fenBase
	Type : Fenêtre
	contenu1 : @ScriptName
	largeur : $lFen
	hauteur : 19+50+$tFen*$Ht+30
	posx : -1
	-Police-Fen : ,,,Fixedsys
	posy : -1
	style : 0x70000
	-OnEvent : $GUI_EVENT_CLOSE,Quit

	Fichiers
		Type : Menu
		contenu1 : "Fichier"
		parenté : -1
		Positionnement : 0

		FNouv
			Type : S-Menu
			contenu1 : "Nouveau"
			parenté : $Fichiers
			Positionnement : 0
			Event : "ChargeLog"

		FCharge
			Type : S-Menu
			contenu1 : "Charger"
			parenté : $Fichiers
			Positionnement : 1
			Event : "ChargeLog"

		FLigneVide
			Type : S-Menu
			contenu1 : ""
			parenté : $Fichiers
			Positionnement : 2
			Event : "Void"

		FQuit
			Type : S-Menu
			contenu1 : "Quitter"
			parenté : $Fichiers
			Positionnement : 3
			Event : "Quit"

	Options
		Type : Menu
		contenu1 : "Options"
		parenté : -1
		Positionnement : 1

		OLog
			Type : Menu
			contenu1 : "Compte"
			parenté : $Options
			Positionnement : 0

			LLancer
				Type : S-Menu
				contenu1 : "Lancer !"
				parenté : $OLog
				Positionnement : 0
				Event : "Lance"

			LNouveau
				Type : S-Menu
				contenu1 : "Nouveau"
				parenté : $OLog
				Positionnement : 1
				Event : "FNouveau"

			LModifier
				Type : S-Menu
				contenu1 : "Modifier"
				parenté : $OLog
				Positionnement : 2
				Event : "FModifier"

			LSupprimer
				Type : S-Menu
				contenu1 : "Supprimer"
				parenté : $OLog
				Positionnement : 3
				Event : "FSupprimer"

		ORaccourcis
			Type : Menu
			contenu1 : "Raccourcis"
			parenté : $Options
			Positionnement : 1

			RNouveau
				Type : S-Menu
				contenu1 : "Nouveau"
				parenté : $ORaccourcis
				Positionnement : 0
				Event : "RModif"

			RCharge
				Type : S-Menu
				contenu1 : "Charger"
				parenté : $ORaccourcis
				Positionnement : 1
				Event : "RCharge"

			RModifier
				Type : S-Menu
				contenu1 : "Modifier"
				parenté : $ORaccourcis
				Positionnement : 2
				Event : "Void"

			RSupprime
				Type : S-Menu
				contenu1 : "Supprimer"
				parenté : $ORaccourcis
				Positionnement : 3
				Event : "RSuppre"

		:OSkin
			Type : Menu
			contenu1 : "Skins"
			parenté : $Options
			Positionnement : 2
			Event : "Void"

			SNouveau
				Type : S-Menu
				contenu1 : "Nouveau"
				parenté : $OSkin
				Positionnement : 0
				Event : "Void"

			SSauvegarder
				Type : S-Menu
				contenu1 : "Sauver"
				parenté : $OSkin
				Positionnement : 1
				Event : "Void"

			SModifier
				Type : S-Menu
				contenu1 : "Modifier"
				parenté : $OSkin
				Positionnement : 2
				Event : "Void"

			SCharger
				Type : S-Menu
				contenu1 : "Charger"
				parenté : $OSkin
				Positionnement : 3
				Event : "Void"

	:Aide
		Type : Menu
		contenu1 : "Aide"
		parenté : -1
		Positionnement : 3

		ATuto
			Type : S-Menu
			contenu1 : "Tutoriel"
			parenté : $Aide
			Positionnement : 0
			Event : "Void"

	Label
		Type : Label
		contenu1 : "Choisissez un compte à Logger :"
		posx : 1
		posy : -2
		largeur : -1
		hauteur : -1
		style : -1
		étendu : 0
		Event : "Void"

	Boutons
		Type : Groupe
		parenté : $fenBase

		Lancer
			Type : Bouton
			contenu1 : "Lancer !"
			posx : 150
			posy : $Ht/2+$Ht/2*$tFen
			largeur : 47
			hauteur : 25
			Event : "Lance"

		Multico
			Type : Checkbox
			contenu1 : "Multi"
			posx : 150
			posy : $Hligne+$Ht+$Ht/2*$tFen
			largeur : -1
			hauteur : $Hligne
			Resize : 8+768
			Etat : $multi
			Event : "FMultico"

		Modifier
			Type : Bouton
			contenu1 : "Modifier"
			posx : 150
			posy : 33+$tFen*$Ht
			largeur : 47
			hauteur : 25
			style : 0x8000
			Resize : 8+64+768
			Event : "FModifier"

		Nouveau
			Type : Bouton
			contenu1 : "Nouveau"
			posx : 1
			posy : 33+$tFen*$Ht
			largeur : -1
			hauteur : 25
			style : 0x8000
			Resize : 8+64+768
			Event : "FNouveau"

		Supprimer
			Type : Bouton
			contenu1 : "Supprimer"
			posx : 75
			posy : 33+$tFen*$Ht
			largeur : -1
			hauteur : 25
			style : 0x8000
			Resize : 8+64+768
			Event : "FSupprimer"

		CFini
			Type : Checkbox
			contenu1 : "Fermer le script après ce compte"
			posx : 15
			posy : $Hligne
			largeur : -1
			hauteur : 13
			Resize : 2+32+768
			Etat : $fin
			Event : "Fini"

		Ajoute
			Type : Bouton
			contenu1 : "Ajouter ->"
			posx : 275
			posy : 0
			largeur : -1
			hauteur : -1
			Event : "MAjoute"

		Retire
			Type : Bouton
			contenu1 : "<- Retirer"
			posx : 275
			posy : 27+Ubound($coListe)*$Ht
			largeur : -1
			hauteur : -1
			Event : "MRetire"

		Haut
			Type : Bouton
			contenu1 : "Monte"
			posx : 205
			posy : $Ht+$Ht*(UBound($CcoListe)-1)/2
			largeur : 40
			hauteur : -1
			Event : "MHaut"

		Bas
			Type : Bouton
			contenu1 : "Baisse"
			posx : 205
			posy : ($Ht-3)+$Ht+$Ht*(UBound($CcoListe)-1)/2
			largeur : 40
			hauteur : -1
			Event : "MBas"

		Surnoms
			Type : Radio
			contenu1 : $aLog[$compteBis*$NbLignes-1]&" ."
			posx : 5
			posy : 27+($compteBis-1)*$Ht
			largeur : 135
			hauteur : $Ht-3
			style : 0x2000
			Data : $aLog[$compteBis*$NbLignes-1]
			Resize : 2+32+512
			Event : "FRadio"

		ListeMulti
			Type : Checkbox
			contenu1 : $aLog[$coListe[$compteBis] * $NbLignes - 1]
			posx : 255
			posy : 27+$compteBis * $Ht

FenMod
	Type : Fenêtre
	contenu1 : @ScriptName & " - ajouter/modifier"
	largeur : 200
	hauteur : $HLigne*12
	posx : -1
	posy : -1
	style : -1
	étendu : -1
	-Parenté : $fenBase
	-Police-Fen : ,,,Fixedsys

	LabelSurnom
		Type : Label
		contenu1 : "Veuillez entrer un" & @CRLF & " pseudonyme :"
		posx : 1
		posy : 2
		largeur : 100
		hauteur : -1
		style : -1
		étendu : -1
		Event : "Void"

	LabelClef
		Type : Label
		contenu1 : @CRLF&"Clef de cryptage :"
		posx : 120
		posy : 0
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "Void"

	LabelNDC
		Type : Label
		contenu1 : "Veuillez entrer le nom de compte Dofus :"
		posx : 0
		posy : $HLigne*4
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "Void"

	LabelMDP
		Type : Label
		contenu1 : "Veuillez entrer le mot de pass associé :"
		posx : 0
		posy : $HLigne*7
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "Void"

	InputPseudo
		Type : Input
		contenu1 : $aLog[$compteTer]
		posx : 2
		posy : $Hligne*2
		largeur : 125
		hauteur : -1
		style : -1
		étendu : -1

	InputClef
		Type : Input
		contenu1 : ""
		posx : 149
		posy : $Hligne*2
		largeur : 50
		hauteur : -1
		style : -1
		étendu : -1

	InputNDC
		Type : Input
		contenu1 : ""
		posx : 2
		posy : $Hligne*5
		largeur : 196
		hauteur : -1
		style : -1
		étendu : -1

	InputMDP
		Type : Input
		contenu1 : ""
		posx : 2
		posy : $Hligne*8
		largeur : 196
		hauteur : -1
		style : -1
		étendu : -1

	BValide
		Type : Bouton
		contenu1 : "Valider"
		posx : 2
		posy : $Hligne*10
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "ModModifier"

	BAnnule
		Type : Bouton
		contenu1 : "Annuler"
		posx : 100
		posy : $Hligne*10
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "ModAnnule"

FenRac
	Type : Fenêtre
	contenu1 : @ScriptName
	largeur : 170
	hauteur : 5*$Ht+$Hligne
	style : -1
	étendu : -1
	-parenté : $fenBase
	-Police-Fen : ,,,Fixedsys

	LabelSansNom
		Type : Label
		contenu1 : "Sélectionnez le script :"
		posx : 0
		posy : 0
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "Void"

	IScript
		Type : Input
		contenu1 : @ScriptFullPath
		-contenu2 : $r[0]
		posx : 5
		posy : $Hligne
		largeur : 100
		hauteur : -1
		style : -1
		étendu : -1

	BSParc
		Type : Bouton
		contenu1 : "Parcourir"
		posx : 110
		posy : $Hligne
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "ParcoureScript"

	LabelSansNom2
		Type : Label
		contenu1 : "Sélectionnez le log :"
		posx : 0
		posy : $Ht+$Hligne
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "Void"

	ILog
		Type : Input
		contenu1 : $logChemin
		contenu2 : StringMid($r[2],3,StringInStr($r[2],'"',2,2)-3)
		posx : 5
		posy : $Ht+2*$Hligne
		largeur : 100
		hauteur : -1
		style : -1
		étendu : -1

	BLParc
		Type : Bouton
		contenu1 : "Parcourir"
		posx : 110
		posy : $Ht+2*$Hligne
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "ParcoureLog"

	LabelSansNom3
		Type : Label
		contenu1 : "Entrez les n° des comptes :"
		posx : 0
		posy : 2*$Ht+2*$Hligne
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "Void"

	IComptes
		Type : Input
		contenu1 : $compte
		contenu2 : StringMid($r[2],StringInStr($r[2],'"',2,2)+2)
		posx : 5
		posy : 2*$Ht+3*$Hligne
		largeur : 100
		hauteur : -1
		style : -1
		étendu : -1

	RBValide
		Type : Bouton
		contenu1 : "Valider"
		posx : 0
		posy : 3*$Ht+3*$Hligne
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "RValide"

	RBAnnule
		Type : Bouton
		contenu1 : "Annuler"
		posx : 110
		posy : 3*$Ht+3*$Hligne
		largeur : -1
		hauteur : -1
		style : -1
		étendu : -1
		Event : "RFinir"

MessageFlood
	Type : 5
	contenu1 : "(\__/)" & @CRLF & "( ' . ' )" & @CRLF & '(")_(")'
	contenu2 : @CRLF & "Vous pouvez aussi aller jouer dehors," & @CRLF & "avec les papillons, les fleurs et les oiseaux."
	contenu3 : ""
	contenu4 : @CRLF & "Ou patientez 2 secondes," & @CRLF & "que la fenêtre se ferme d'elle-même."
	contenu5 : @CRLF & "La Vie est comme cette boîte de dialogue :" & @CRLF & "C'est quand elle se ferme qu'on arrive à l'essentiel."

Fenêtre :
	Type : Fenêtre
	contenu1 : 
	contenux :
	largeur : 
	hauteur : 
	posx : 
	posy : 
	style : 
	étendu : 
	parenté : 
Contrôle :
	Type : 
	contenu1 : 
	contenux : 
	posx : -1
	posy : -1
	largeur : -1
	hauteur : -1
	style : -1
	étendu : -1
	Data : 
	Resize : 
	Etat : 
Menu :
	Type : 
	contenu1 : 
	contenux :
	parenté : 
	Positionnement : 
	Etat : 
Flood :
	Type : Nombre de messages
	contenu1 : 
	contenux : 
Global :
	Type : $SkinBase[0]
		Curfen, Fenêtre, Fond-F, Ic-F, Police-Fen, OnEvent, State, Stylfaen
		Avi, Bouton, Calendrier, Checkbox, Combo, Dat'action, Editeur, Graphisme, Groupe, Icône, Image, Input, Label, Liste, Menu, MiniMenu, Radio, S-Menu
		Coul, D-Coul, D-Fond-C, Data, Etat, Event, Fond-C, Graphip'tit, Im-C, Police-C, Pos, Resize, Restyle, Titruc
		Nombre déterminant de messages floodesques (cas unique) -> Rand (0 à Nombre-1, 1)
		[Modificateur de GUI] : Paramètre 1,paramètre 2,..
	contenu1 : Lié à conditions $SkinBase[1]
	contenu2 : Lié à conditions.. etc $SkinBase[1] (aussi)
	posx, posy, largeur, hauteur : Chiffres $SkinBase[2 à 5]
	style, étendu : 0xChiffre $SkinBase[6 et 7]
	parenté : Chiffre/Nom de variable $SkinBase[8] ou $SkinBase[3] pour un élément de menu
	Positionnement : Chiffre $SkinBase[4] spécifique aux menus
À noter que le fichier de skin ne peut s'appeler que "skinDB.txt", et doit être présent dans le même répertoire que le script. (Oui, ça sera bientôt modifié. ^^)

Améliorations depuis la 1_9b :
-> Résolution du bug de suppression d'une entrée dans la liste de Multi
-> Il est maintenant possible de changer de manière indépendante le nom de compte et le mot de pass du compte associé à un surnom. Ca écrase simplement les anciennes informations, et il est conseillé d'utiliser la même Clef pour le Ndc et le Mdp. /!\ Seule la personne qui a entré les infos à l'origine peut savoir si c'est le cas.
-> Les informations de skin sont récupérées depuis un fichier externe (SkinDB.txt), ce qui allège le script et la programmation de celui-ci.

Prévisions météorologiques d'améliorations :
-> Finalisation de la v1_10 en fournissant un module de skinnage à l'utilisateur
-> Meilleure prise en charge de la fermeture des fenêtres du script
-> Mise en relation des phrases de flood (dans la fenêtre "Lancement de la fenêtre Dofus" + message-flood) avec le fichier de skin (pour les changer facilement)
Elles sont déjà présentes dans le-dit fichier, mais ne sont pas utiles pour l'instant.
-> Permettre un chemin (et un nom) variable pour le fichier de skin

En ce qui concerne la suite (vi, je vois loin..), ça vous intéresserait d'avoir ça :
-> Permettre de changer une Clef de cryptage des informations Ndc et Mdp (il serait indispensable de connaître la clef de base pour la changer) ?
-> Un script compilé "clef en main", qui contiendrait directement le fichier de skin basique (pour n'avoir qu'un unique fichier à télécharger) ?
-> Des fonctions aléatoires débiles (type qui réagit à la date : le premier avril, ouvre une pop-up "Poisson d'avril !§§") dans le fichier de skin ? (sans atteinte possible à la sécurité, encore une fois.)

Et tout le reste, auquel vous penserez, et que vous pourriez souhaiter ! (Demandez-moi l'impossible, je pourrai le réaliser. Vive l'informatique ! )

Za.

P.S : Après écriture de mon pavé, je vois que j'ai oublié de donner le mode d'emploi du fichier de Skin.
Donc, ça fonctionne ainsi :
[Nom de variable] c'est la variable qui permet d'interagir avec le contenu. Pas facile à expliquer, mais c'est "l'adresse" de la boîte visée.
(tabulation)[message] : [valeur] la tabulation permet au script de se retrouver dans les opérations, le message sera type de modification à y porter, et la valeur sera la valeur appliquée à la modification.
En fin de fichier, toutes les valeurs utilisables sont renseignées.
En attendant la fonction qui vous permettra de faire ça facilement, je vous renvoie à la doc de Auto-It partie "GuiCtrlCreate[Objet]", pour plus de détails.
Exemple :
Code:
fenBase
	Type : Fenêtre
	posx : 12
Fera apparaître la fenêtre de base du script au pixel n° 12 (depuis le bord gauche de l'écran, la "position en abscisse").
Les valeurs de "-1" sont un moyen de dire "garder la valeur par défaut".

Dernière modification par Famille Za ; 25/01/2010 à 14h24. Motif: Edition des liens.
Famille Za est déconnecté Vieux 16/05/2009, 12h16
Afficher le profil de Famille Za
MagicZDS
Damoiseau / Damoiselle
 
Hello Dyno / Za !

J'ai testé ton truc, il fonctionne plutôt bien, mais comme l'a fait remarqué Shuggah c'est quand même une belle usine à gaz pour pas grand chose :s Le fait d'obliger a rentrer la clef, à viser soit même la fenêtre, le design un peu chargé (la fenêtre fait tout de suite 4km de long pour une dizaine de comptes), je suis revenu à mon lanceur perso assez rapidement :s

En fait pour le principe de fonctionnement il est parfait tel que tu l'as conçu pour toi, mais tes besoins sont pas trop ceux pour la plupart des joueurs (90% préféreraient avoir un système crypté mais sans avoir à taper un pass à chaque log), et question ergonomie / design, je le trouve un peu trop simpliste, même si derrière tu as un système de skin, ça restera un groupe de radiobox qui prendra une trop grande place si tu as un trop grand nombre de comptes (qui est justement la raison d'être de ton prog, faciliter le multicompte).

Ce message n'est pas un "c'est trop nul trop pourri", juste un ressenti de ma part. Je voulais aussi savoir si tu avais avancé la release 1.10 depuis (dernier message mi-mai).

Tchô !!!

ZDS
MagicZDS est déconnecté Vieux 23/07/2009, 11h31
Afficher le profil de MagicZDS
JOL drallieivEHD
Immortel
 
Avatar de drallieivEHD
 
En passant je vous l'annomce ici au cas ou vous n'ayez pas lu mon compte rendu de la table ronde 2.0 de la convention :

Il ne sera pas possible de faire ce genre d'outils en tant que module du client 2.0.
Mais toujours possible via du scripting externe comme c'est le cas actuellement
drallieivEHD est déconnecté Vieux 23/07/2009, 11h54
Afficher le profil de drallieivEHD
Famille Za
Oracle
 
Avatar de Famille Za
 
Edit @drallieivEHD : Oké, donc je garde mon DofusLog en travaux.

----
Oui, j'ai avancé la prog, mais pour le moment, je l'ai pas mit à disposition.
Ca ressemble à ça, maintenant (chez moi) :

(Y'a des images maintenant, mais ce n'est pas encore bien terminé pour leur affichage.)

J'avoue, je travaille d'abord pour moi, et mes besoins sont très particuliers.
J'aimerais bien dans un futur plus ou moins proche avoir fini mon interface utilisateurs (je m'entraîne sur le "Assistez-Toi !" pour ça, huhu ^^), et permettre une personnalisation totale des commandes.

Pour la suite, j'ai prévu aussi (et ça se rapproche, quand j'ai le temps d'y toucher ^^) de faire la connexion en parallèle des comptes avec la liste multico.

Je vais voir à proposer un système de "clef auto" : rentrer la clef une seule fois, qui sera utilisée pour tous les comptes ensuite... Bref, au lancement du premier compte : "Veuillez entrer la clef .." (etc), et si l'option "clef auto" est enclenchée, les autres comptes seront testés par défaut avec cette clef.
Je ne sais pas si c'est trop embrouillé à expliquer, mais en gros, ça ne change pas le niveau de sécurité, tout en soulageant l'utilisateur.
Bref, je note à ajouter. ^^

Juste pour avoir un aperçu de la version 1_10bêta4d :
Script : DofusLog-v1_10Bêta4d.au3 - 30.92 kB
Skin : SkinDB.txt - 11.15 kB
Et le petit coeur (très important !) : Coeur2.bmp - 303.8 kB
Les 3 fichiers devront être placés de préférence dans le même répertoire (je n'ai pas encore géré le changement de dossier, désolée.. ), et le fonctionnement du script reste inchangé.

Juste pour faire plaisir à ZDS, j'ai ajouté :
Plutôt que de passer la souris sur le bouton orange "OK", le script fait directement un "tab"+"entrée", donc voilà, c'est "mieux".
(Mais j'aime moins. Et vous, vous pensez quoi de cette amélioration ?)

Za.

Dernière modification par Famille Za ; 25/01/2010 à 14h24. Motif: Edition des liens.
Famille Za est déconnecté Vieux 23/07/2009, 13h41
Afficher le profil de Famille Za
Famille Za
Oracle
 
Avatar de Famille Za
 
DofusLog 1_10 est arrivé ! Heureusement que j'avais prévu de finir fin février 2009..

Coucou !

Citation:
Envoyé par Royaume (Raval) Voir le message
Tu as une date à nous sortir, ou on attend comme pour la 2.0 ?
2 décembre pour la sortie des Skins sur le DofusLog, ça vous tente ?

En attendant, j'ai revu mon code pour la version 1_10 !
(Liens de téléchargement plus bas, pour les impatients. n_n)

Le DofusLog, c'est quoi ?
Toujours la même chose, un script pour me simplifier la vie, que je vous propose car peut-être que ça peut vous être utile aussi.
Il permet la connexion d'un ou plusieurs comptes au jeu Dofus de manière respectueuse avec le serveur, et simplifiée avec l'utilisateur.

Nan, ma question c'était que ton truc, il est pas légal ?
J'apporte un soin particulier à assurer la sécurité du script, et je vérifie régulièrement les CGU de Dofus. Par ailleurs, je fournis le code source comme seule version officielle, la version scriptée étant une copie parfaite de celui-ci (hébergée chez MegaUploads), alors que la version compilée n'est fournie qu'à titre indicatif (hébergée aussi chez MégaUploads) pour une utilisation autonome sans l'environnement AutoIt3 (disponible ).
J'ajoute une parenthèse pour dire que tout manquement à la sécurité de mon script doit être signalé, pour que je le corrige au plus vite.

Et Linux/MAC, alors ?
Pas de progression de ce côté, je ne peux que vous conseiller un émulateur Windows pour faire tourner le script.
À noter que je me suis penchée rapidement sur la programmation sous environnement (graphique) Ubuntu 8.04c, mais l'API est tellement mal documenté que j'ai laissé tomber. (Avis aux amateurs, si vous avez de la documentation dessus, je suis preneuse. )

Bon, t'as fini de causer ?
Version compilée : DofusLog-v1_10.exe - 297.79 kB
Version scripte : DofusLog-v1_10.au3 - 24.03 kB
Version source :
Code:
#include <GUIConstants.au3>	;Nécessaire surtout pour le $GUI_EVENT_CLOSE
#include <String.au3>	;Pour l'encryptage
AutoItSetOption ("GUIOnEventMode", 1)
Global	$Version = "1_10"
Global	$fichier, $prgChemin, $prgNom, $FenBase, $Label, $CFini, $fin, $Lancer, $Lance = 0, $Multico, $multi = 0, $Modifier, $Nouveau, $Supprimer, $Ajoute, $Retire, $Haut, $Bas, $Boutons, $Options, $OLog, $LLancer, $LModifier, $LNouveau, $LSupprimer,  $Fichiers, $FNouv, $FCharge, $FQuit, $ORaccourcis, $RNouveau, $RModifier, $RCharge, $RSupprime, $OSkin, $SCharger, $SNouveau, $SModifier, $SSauvegarder, $Aide, $ATuto, $aLog, $coListe, $Avatar, $Radio, $Skin, $suppr = -1
Global	$NbLignes = 2	;Nombre de lignes utilisées par entrée dans le fichier de Log
Global	$logChemin = @ScriptDir & "\Log.txt"
Global	$compte = 1, $compteBis
Dim	$coListe[1]
If	$CmdLine[0] > 0	Then	$logChemin = $CmdLine[1]
If	$CmdLine[0] > 1	Then
	$coListe = StringSplit ($CmdLine[2], ",")
	For	$n = 0	To	UBound ($coListe) - 2
		$coListe[$n] = $coListe[$n+1]
	Next
	ReDim	$coListe[UBound ($coListe) - 1]
	$Lance = 1
	$fin = $GUI_CHECKED	;Pas obligatoire, en fait, mais préférable, finalement.
EndIf
Global	$Hligne = 16	;hauteur présumée par ligne (13 pixels de haut, voire 14)
Global	$Separ = $Hligne / 2 - 10	;Séparateur, hauteur en pixels entre deux lignes
Global	$Ht = $Separ + 2 * $Hligne
Global	$msg
Dim	$aLog[3]
_FileReadToArray2 (@ScriptDir & "\SkinDB.txt", $Skin)	;rendre modifiable ce chemin

ChargeLog (0)
While	1
	Sleep(100)
	If	$Lance = 1	Then	Lance ()
WEnd
;==============================Fonctions totalement créées par Za====================================
Func	Recharge ()
	ChargeLog (1)
EndFunc
Func	ChargeLog ($nouv = 1)
	If	Not	FileExists ($logChemin)	Or	$nouv = 1	Then
		TrayTip (@ScriptName, "Veuillez sélectionner un fichier texte.", 0)
		$fichier = FileOpenDialog (@ScriptName & " - Sélectionnez ou créez un fichier contenant vos logs", $logChemin, "Text files (*.txt)|All files (*.*)", 8, "Log.txt")
		If	$fichier = ""	Then	Return
		TrayTip (@ScriptName, "Enregistrement de la place du Log en cours", 1, 16)
		_FileWriteToLine2 (@ScriptFullPath, 7,'Global	$logChemin = "' & $fichier & '"', 1)
		TrayTip ("", "", 0)
	Else
		$fichier = $logChemin
	EndIf
	$existe = _FileReadToArray2 ($fichier, $aLog)

	;$prgChemin et $prgNom n'ont rien à faire ici, normalement. Sauf pour utiliser le DofusLog comme gestionnaire de MDP cross-applications.)
	$prgChemin = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Ankama\Dofus", "Path") & "\"
	$prgNom = "Dofus.exe"
	If	Not	FileExists ($prgChemin & $prgNom)	Then
		If	Not	FileExists ($prgChemin & "Dofus_client.exe")	Then
			$prgChemin = "C:\Program Files\Dofus"
			If	Not	FileExists ($prgChemin & $prgNom)	Then
				If	Not	FileExists ($prgChemin & "Dofus_client.exe")	Then
					$prgNom = FileOpenDialog (@ScriptName & " - Sélectionnez votre lanceur de jeu Dofus", $prgChemin, "(*.exe; *.html)|Tous (*.*)", 1, "Dofus")
					$prgChemin = ""
				Else
					$prgNom = "Dofus_client.exe"
				EndIf
			EndIf
		Else
			$prgNom = "Dofus_client.exe"
		EndIf
	EndIf

	If	Not	$existe	Then
		Modifier (1, $fichier)
	EndIf

	_FileReadToArray2 ($fichier, $aLog)
	Dim	$Radio[(UBound ($aLog) + 1) / $NbLignes]
	Dim $Avatar[(UBound ($aLog) + 1) / $NbLignes]
	
	Fenetre ()
EndFunc
Func	Fenetre ($GUI = "FenBase")
	Global	$tFen = (UBound ($aLog) - 1) / $NbLignes
	If	$tFen < 2	Then	$tFen = 2
	Global	$lFen = 200
	If	$GUI = "FenBase"	Then
		;sauvegarde de la position entre deux redim' à faire
		GUIDelete ($FenBase)

		$FenBase = GUICreate (@ScriptName, $lFen, 19 + 50 + $tFen * $Ht + 30, -1, -1, 0x70000,0,0)
		GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")

		$Fichiers = GUICtrlCreateMenu ("Fichier", -1, 0)
		$FNouv = GUICtrlCreateMenuItem ("Nouveau", $Fichiers, 0)
		GUICtrlSetOnEvent ($FNouv, "Recharge")
		$FCharge = GUICtrlCreateMenuItem ("Charger", $Fichiers, 1)
		GUICtrlSetOnEvent ($FCharge, "Recharge")
		$FLigneVide = GUICtrlCreateMenuItem ("", $Fichiers, 2)
		$FQuit = GUICtrlCreateMenuItem ("Quitter", $Fichiers, 3)
		GUICtrlSetOnEvent ($FQuit, "Quit")

		$Options = GUICtrlCreateMenu ("Options", -1, 1)
		$OLog = GUICtrlCreateMenu ("Compte", $Options, 0)
		$LLancer = GUICtrlCreateMenuItem ("Lancer !", $OLog, 0)
		GUICtrlSetOnEvent ($LLancer, "Lance")
		$LNouveau = GUICtrlCreateMenuItem ("Nouveau", $OLog, 1)
		GUICtrlSetOnEvent ($LNouveau, "FNouveau")
		$LModifier = GUICtrlCreateMenuItem ("Modifier", $OLog, 2)
		GUICtrlSetOnEvent ($LModifier, "FModifier")
		$LSupprimer = GUICtrlCreateMenuItem ("Supprimer", $OLog, 3)
		GUICtrlSetOnEvent ($LSupprimer, "FSupprimer")
		$ORaccourcis = GUICtrlCreateMenu ("Raccourcis", $Options, 1)
		$RNouveau = GUICtrlCreateMenuItem ("Nouveau", $ORaccourcis, 0)
		GUICtrlSetOnEvent ($RNouveau, "RModif")
		$RCharge = GUICtrlCreateMenuItem ("Charger", $ORaccourcis, 1)
		GUICtrlSetOnEvent ($RCharge, "RCharge")
		$RModifier = GUICtrlCreateMenuItem ("Modifier", $ORaccourcis, 2)
		$RSupprime = GUICtrlCreateMenuItem ("Supprimer", $ORaccourcis, 3)
		GUICtrlSetOnEvent ($RSupprime, "RSuppre")
		;Les skins ne sont pas encore implémantés.
		$OSkin = GUICtrlCreateMenu ("Skins", $Options, 2)
		GUICtrlSetState ($OSkin, $GUI_DISABLE)
		$SNouveau = GUICtrlCreateMenuItem ("Nouveau", $OSkin, 0)
		GUICtrlSetState ($SNouveau, $GUI_DISABLE)
		$SSauvegarder = GUICtrlCreateMenuItem ("Sauver", $OSkin, 1)
		GUICtrlSetState ($SSauvegarder, $GUI_DISABLE)
		$SModifier = GUICtrlCreateMenuItem ("Modifier", $OSkin, 2)
		GUICtrlSetState ($Smodifier, $GUI_DISABLE)
		$SCharger = GUICtrlCreateMenuItem ("Charger", $OSkin, 3)
		GUICtrlSetState ($SCharger, $GUI_DISABLE)
		;Idem pour le Tutoriel.
		$Aide = GUICtrlCreateMenu ("Aide", -1, 3)
		$ATuto = GUICtrlCreateMenuItem ("Tutoriel", $Aide, 0)
		GUICtrlSetState ($ATuto, $GUI_DISABLE)
		GUICtrlCreateMenuItem("Version : " & $Version, GUICtrlCreateMenu("DofusLog By Za", $Aide, 1)) ;Petit Copyright. Huhu ^^

		$Label = GUICtrlCreateLabel ("Choisissez un compte à Logger :", 1, -2, -1, -1)
		GUICtrlSetResizing ($Label, 2 + 32 + 768)

		$Boutons = GUIStartGroup ($FenBase)	;Séparation des boutons. -utile pour la boucle de focus
		$Lancer = GUICtrlCreateButton ("Lancer !", $lFen - 50, $Ht / 2 + $Ht / 2 * $tFen, 47, 25)
		GUICtrlSetResizing ($Lancer, 8 + 768)
		GUICtrlSetOnEvent ($Lancer, "Lance")
		If	(UBound ($aLog)) / $NbLignes > 2	Then
			$Multico = GUICtrlCreateCheckbox ("Multi", $lFen - 50, 11 + $Ht + $Ht / 2 * $tFen, -1, $Hligne)
			GUICtrlSetResizing ($Multico, 8 + 768)
			GUICtrlSetState ($Multico, $multi)
			GUICtrlSetOnEvent ($Multico, "FMultico")
		EndIf
		$Modifier = GUICtrlCreateButton ("Modifier", $lFen - 50, 27 + $tFen * $Ht, 47, 25, 0x8000)
		GUICtrlSetResizing ($Modifier, 8 + 64 + 768)
		GUICtrlSetOnEvent ($Modifier, "FModifier")
		$Nouveau = GUICtrlCreateButton ("Nouveau", 1, 27 + $tFen * $Ht, -1, 25, 0x8000)
		GUICtrlSetResizing ($Nouveau, 8 + 64 + 768)
		GUICtrlSetOnEvent ($Nouveau, "FNouveau")
		$Supprimer = GUICTRLCreateButton ("Supprimer", 75, 27 + $tFen * $Ht, -1, 25, 0x8000)
		GUICtrlSetResizing ($Supprimer,	8 + 64 + 768)
		GUICtrlSetOnEvent ($Supprimer, "FSupprimer")
		$CFini = GUICtrlCreateCheckbox ("Fermer le script après ce compte", 15, $Hligne, -1, 13)
		GUICtrlSetResizing ($CFini, 2 + 32 + 768)
		GUICtrlSetState ($CFini, $fin)
		GUICtrlSetOnEvent ($CFini, "Fini")
		GUISetState ()

		Local $compteBis = 1, $compteTer
		While	$compteBis < (UBound ($aLog)) / $NbLignes
			If GUICtrlRead ($Multico) = $GUI_CHECKED Then
				$Radio[$compteBis] = GUICtrlCreateCheckbox ($aLog[$compteBis * $NbLignes - 1]& " .", 5, $Ht + ($compteBis - 1) * $Ht, 135, $Ht - 3, 0x2000)
				GUICtrlSetOnEvent($Radio[$compteBis], "FCheckBox")
				$compteTer = 0
				While $compteTer < UBound ($coListe)
					If $coListe[$compteTer] = $compteBis Then
						GUICtrlSetState($Radio[$compteBis], $GUI_CHECKED)
						GUICtrlSetFont($Radio[$compteBis], -1, 800)
					EndIf
					$compteTer += 1
				WEnd
			Else
				$Radio[$compteBis] = GUICtrlCreateRadio ($aLog[$compteBis * $NbLignes - 1]& " .", 5, $Ht + ($compteBis - 1) * $Ht, 135, $Ht - 3, 0x2000)
				GUICtrlSetOnEvent ($Radio[$compteBis], "FRadio")
			EndIf
			GUICtrlSetData ($Radio[$compteBis], $aLog[$compteBis * $NbLignes - 1])
			GUICtrlSetResizing ($Radio[$compteBis], 2 + 32 + 512)
			$compteBis += 1
		WEnd
		If GUICtrlRead ($Multico) = $GUI_UNCHECKED Then
			GUICtrlSetState ($Radio[$compte], $GUI_CHECKED + $GUI_FOCUS)
			GUICtrlSetFont($Radio[$compte], -1, 800)
		EndIf
	ElseIf	$GUI = "FenMod"	Then
		$FenMod = GUICreate("ajouter/modifier un compte", 200, $HLigne * 12)
		GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
		
		$LabelSurnom = GUICtrlCreateLabel("Veuillez entrer un" & @CRLF & " pseudonyme :", 1, 2, 100)
		$LabelClef = GUICtrlCreateLabel(@CRLF&"Clef de cryptage :", 120, 0)
		$LabelNDC = GUICtrlCreateLabel("Veuillez entrer le nom de compte Dofus :", 0, $HLigne * 4)
		$LabelMDP = GUICtrlCreateLabel("Veuillez entrer le mot de pass associé :", 0, $HLigne * 7)
		$InputPseudo = GUICtrlCreateInput($aLog[$compteTer], 2, $HLigne * 2, 125)
		$InputClef = GUICtrlCreateInput("", 149, $HLigne * 2, 50)
		$InputNDC = GUICtrlCreateInput("", 2, $Hligne * 5, 196)
		$InputMDP = GUICtrlCreateInput("", 2, $Hligne * 8, 196)
		$BValide = GUICtrlCreateButton("Valider", 2, $HLigne * 10)
		GUICtrlSetOnEvent ($BValide, "ModModifier")
		$BAnnule = GUICtrlCreateButton("Annuler", 100, $HLigne * 10)
		GUICtrlSetOnEvent ($BAnnule, "ModAnnule")
		
	ElseIf	$GUI = "FenRac"	Then
		$FenRac = GUICreate ("créer/modifier un raccourcis", 170, 5 * $Ht + $Hligne)
		GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
		
		GUICtrlCreateLabel("Sélectionnez le script :", 0, 0)
		$IScript = GUICtrlCreateInput(@ScriptFullPath, 5, $HLigne, 100)
		$BSParc = GUICtrlCreateButton("Parcourir", 110, $HLigne)
		GUICtrlSetOnEvent($BSParc, "ParcoureScript")
		GUICtrlCreateLabel("Sélectionnez le log :", 0, $Ht + $HLigne)
		$ILog = GUICtrlCreateInput($logChemin, 5, $Ht + 2 * $Hligne, 100)
		$BLParc = GUICtrlCreateButton("Parcourir", 110, $Ht + 2 * $Hligne)
		GUICtrlSetOnEvent($BLParc, "ParcoureLog")
		GUICtrlCreateLabel("Entrez les n° des comptes :", 0, 2 * $Ht + 2 * $Hligne)
		$Icomptes = GUICtrlCreateInput($compte, 5, 2 * $Ht + 3 * $Hligne, 100)
		$RBValide = GUICtrlCreateButton("Valider", 0, 3 * $Ht + 3 * $Hligne)
		GUICtrlSetOnEvent($RBValide, "RValide")
		$RBAnnule = GUICtrlCreateButton("Annuler", 110, 3 * $Ht + 3 * $Hligne)
		GUICtrlSetOnEvent($RBAnnule, "RFinir")
	EndIf
	GUISetState ()
	If	$GUI = "FenBase"	Then	DesAct ()
EndFunc
Func	DesAct ($DesActive = 0)	;Réactive les boutons par défaut
	If	$DesActive = 1	Then
		GUICtrlSetState ($Lancer, $GUI_DISABLE)
		GUICtrlSetState ($Modifier, $GUI_DISABLE)
		GUICtrlSetState ($Nouveau, $GUI_DISABLE)
		GUICtrlSetState ($Supprimer, $GUI_DISABLE)
		GUICtrlSetState ($Options, $GUI_DISABLE)
		GUICtrlSetState ($Fichiers, $GUI_DISABLE)
	Else
		GUICtrlSetState ($Lancer, $GUI_ENABLE)
		GUICtrlSetState ($Modifier, $GUI_ENABLE)
		GUICtrlSetState ($Nouveau, $GUI_ENABLE)
		GUICtrlSetState ($Supprimer, $GUI_ENABLE)
		GUICtrlSetState ($Options, $GUI_ENABLE)
		GUICtrlSetState ($Fichiers, $GUI_ENABLE)
	EndIf
EndFunc
Func	FSupprimer () ;Supprimer un surnom
	If	MsgBox (0x51, @ScriptName & " - Suppression", "Souhaitez-vous vraiment détruire cette entrée ?") = 2	Then	Return
	DesAct (1)
	TrayTip (@ScriptName, "Effacement en cours...", 10, 16)
	$ligne = $compte * $NbLignes + 1
	MRetire ($ligne)
	While	$ligne < UBound ($aLog)
		$aLog[$ligne - $NbLignes] = $aLog[$ligne]
		$ligne += 1
	WEnd
	ReDim	$aLog[UBound ($aLog) - $NbLignes]
	ReDim	$Radio[UBound ($Radio) - 1]
	If	$compte > (UBound ($aLog) - 1) / $NbLignes	Then	$compte -= 1
	_FileWriteFromArray2 ($fichier, $aLog, 1, UBound ($aLog) - 1)
	TrayTip ("", "", 0)

	Fenetre ()
EndFunc
Func	FModifier () ;Modifier un surnom
	DesAct (1)
	Modifier ($compte, $fichier)
EndFunc
Func	FNouveau () ;Ajouter un surnom
	DesAct (1)
	ReDim	$aLog[UBound ($aLog) + $NbLignes]
	ReDim	$Radio[UBound ($Radio) + 1]
	Modifier ((UBound ($aLog) - 1) / $NbLignes, $fichier)
EndFunc
Func	Modifier ($compteBis, $fich) ;fonction générique pour ajout/modif de surnom
	Global	$compteTer = $NbLignes * ($compteBis - 1) + 1
	Global	$FenMod, $LabelSurnom, $LabelClef, $LabelNDC, $LabelMDP, $InputPseudo, $InputClef, $InputNDC, $InputMDP, $BValide, $BAnnule, $Encrypt = StringSplit ($aLog[$compteTer + 1], "{TAB}")
	Fenetre ("FenMod")
EndFunc
Func	ModAnnule () ;Annuler la modification d'un surnom (devrait plutôt être fait par un $GUI_EVENT_CLOSE sur le bouton...)
	GUIDelete($FenMod)
	DesAct ()
EndFunc
Func	ModModifier () ;Modification effective du surnom
	If	MsgBox (0x51, @ScriptName & " - Modifications", "Attention, vous vous apprêtez à" & @CRLF & "modifier définitivement ces données." & @CRLF & "Êtes-vous sûr ?") = 2	Then	Return
	If	GUICtrlRead ($InputPseudo) <> ""	Then
		TrayTip (@ScriptName, "Écriture en cours...", 0, 16)
		$aLog[$compteTer] = GUICtrlRead ($InputPseudo)
		_FileWriteToLine2 ($fichier, $compteTer, $aLog[$compteTer], 1)
		If	GUICtrlRead ($InputNDC) <> ""	Then
			If	GUICtrlRead ($InputClef) = "" 	Then
				$Encrypt[1] = GUICtrlRead ($InputNDC)
			Else
				$Encrypt[1] = _StringEncrypt (1, GUICtrlRead ($InputNDC), GUICtrlRead ($InputClef))
			EndIf
		EndIf
		If	GUICtrlRead ($InputMDP) <> ""	Then
			If	GUICtrlRead ($InputClef) = "" 	Then
				$Encrypt[UBound ($Encrypt) - 1] = GUICtrlRead ($InputMDP)
			Else
				$Encrypt[UBound ($Encrypt) - 1] = _StringEncrypt (1, GUICtrlRead ($InputMDP), GUICtrlRead ($InputClef))
			EndIf
		EndIf
		$Encrypt = $Encrypt[1] & "{TAB}" & $Encrypt[UBound ($Encrypt) - 1]
		If	$Encrypt <> $aLog[$compteTer + 1] Then
			$aLog[$compteTer + 1] = $Encrypt
			_FileWriteToLine2 ($fichier, $compteTer + 1, $aLog[$compteTer + 1], 1)
		EndIf
		TrayTip ("", "", 0)
	EndIf
	GUIDelete ($FenMod)
	GUIDelete ($FenBase)
	Fenetre ()
EndFunc
Func	FRadio ($r = 0) ;Fonction de sélection du surnom dans la liste (sans Multico)
	Local	$mess, $r
	If $r = 0	Then
		$mess = @GUI_CtrlId
	Else
		$mess = $r
	EndIf
	If	$mess <> $Radio[$compte]	Then
		If GUICtrlRead ($Multico) = $GUI_UNCHECKED	or	GUICtrlRead($Radio[$compte]) = $GUI_UNCHECKED Then
			GUICtrlSetFont($Radio[$compte], -1, 400)
			GUICtrlSetState ($Radio[$compte], $GUI_NOFOCUS)
		EndIf
		While	$mess <> $Radio[$compte]
			$compte += 1
			If	$compte > (UBound ($Radio) - 1)	Then
				$compte = 1
			EndIf
		WEnd
		GUICtrlSetState ($Radio[$compte], $GUI_CHECKED + $GUI_FOCUS)
		GUICtrlSetFont($Radio[$compte], -1, 800)
	Else
		FLancer ($compte)
		If	$fin = $GUI_CHECKED	Then	Exit
	EndIf
EndFunc
Func	FCheckBox ($r = 0) ;Fonction de sélection de(s) surnom(s) (avec Multico)
	Local	$mess, $r
	If $r = 0	Then
		$mess = @GUI_CtrlId
	Else
		$mess = $r
	EndIf

	$r = 0
	While $mess <> $Radio[$r]
		$r += 1
	WEnd

	If	GUICtrlRead($mess) = $GUI_UNCHECKED	Then
		GUICtrlSetFont($mess, -1, 400)
		MRetire ($r)
	Else
		GUICtrlSetFont($mess, -1, 800)
		ReDim	$coListe[UBound ($coListe) + 1]
		$coListe[UBound ($coListe) - 1] = $r
	EndIf
EndFunc
Func	FMultico () ;Gestion de l'état du bouton Multico
	$multi = GUICtrlRead ($Multico)
	If	$coListe[0] = ""	Then	$coListe[0] = $compte
	Fenetre ()
EndFunc
Func	MRetire ($suppr = -1) ;Dé-sélection d'un surnom pré-sélectionné (sous Multico)
	Local	$n = 0, $q, $z
	If	$suppr = -1	Then
		MsgBox(0,"Erreur","Cette fonction MRetire ne doit pas être appellée directement.")
		Return
	EndIf
	$n = 0
	While $coListe[$n] <> $suppr
		$n += 1
	WEnd
	While $n < UBound ($coListe) - 1
		$coListe[$n] = $coListe[$n + 1]
		$n += 1
	WEnd
	If	UBound	($coListe) > 1	Then
		ReDim	$coListe[UBound ($coListe) - 1]
	Else
		$coListe[0] = ""
	EndIf
EndFunc
Func	RModif ($mod = 0) ;Fonction générique pour l'ajout/modification de raccourcis
	Global	$n, $r
	Global	$fenRac, $LabelSansNom, $modRac = 0, $IScript, $BSParc, $LabelSansNom2, $ILog, $BLParc, $LComptes, $LabelSansNom3, $IComptes, $RBValide, $RBAnnule
	Fenetre ("FenRac")
EndFunc
Func	ParcoureScript () ;Parcourir les dossiers par l'utilisateur pour désigner le script
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez votre script :", @ScriptDir, "Scripts (*.au3	;*.exe)|Tous (*.*)", 8, @ScriptName)
	If	$n <> ""	Then	GUICtrlSetData ($IScript, $n)
EndFunc
Func	ParcoureLog () ;Parcourir les dossiers par l'utilisateur pour désigner le log
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez le fichier contenant vos logs :", $logChemin, "Textes (*.txt)|Tous (*.*)", 8, "Log.txt")
	If	$n <> ""	Then	GUICtrlSetData ($ILog, $n)
EndFunc
Func	RValide () ;Créer/Modifier le raccourcis
	$n = FileOpenDialog (@ScriptName & " - Choissez le nom et répertoire du raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName & ".lnk")
	If	$n = ''	Then	Return
	If	StringInStr ($n, ".lnk") = 0	Then	$n &= ".lnk"
	FileCreateShortcut (GUICtrlRead ($IScript), $n, "", ' "' & GUICtrlRead ($ILog) & '" ' & GUICtrlRead ($IComptes))
	GUIDelete ($fenRac)
EndFunc
Func	RFinir () ;Annuler le raccourcis, idem que ModAnnule()
	GUIDelete ($fenRac)
EndFunc
Func	RCharge () ;Charger une liste de comptes pré-enregistrés en raccourcis
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez votre raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName & ".lnk")
	If	$n = ""	Then	Return
	$r = FileGetShortcut ($n)
	$logChemin = StringMid ($r[2], 3, StringInStr ($r[2], '"', 2, 2) - 3)
	$coListe = StringSplit (StringMid ($r[2], StringInStr ($r[2], '"', 2, 2) + 2), ",")
	For	$n = 0	To	UBound ($coListe) - 2
		$coListe[$n] = $coListe[$n+1]
	Next
	ReDim	$coListe[UBound ($coListe) - 1]
	$Lance = 1
	GUIDelete ($fenBase)
	ChargeLog ()
	Return
EndFunc
Func	RSuppre () ;Supprimer le raccourcis sélectionné
	$Racc = FileOpenDialog (@ScriptName & " - Sélectionnez votre raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName)
	If	$Racc <> ""	Then	FileDelete ($Racc)
EndFunc
Func	Lance () ;Démarrer la connexion d'un surnom/d'une liste de surnoms
	Local	$err = 0
	If	GUICtrlRead($Multico) = $GUI_CHECKED	Or	$Lance = 1	Then
		For	$n = 0	To	UBound ($coListe) - 1
			If	$coListe[$n] <= ((UBound ($aLog) - 1) / $NbLignes) And	$coListe[$n] > 0	Then  $err = FLancer ($coListe[$n])
		Next
		$Lance = 0
	Else
		$err = FLancer ($compte)
	EndIf
	If	$fin = $GUI_CHECKED And $err = 0	Then	Exit
EndFunc
Func	FLancer ($compteBis = $compte) ;Lancement du jeu + traitement des identifiants pour la connexion au jeu
	DesAct (1)
	$compteBis = ($compteBis - 1) * $NbLignes + 1
	If	StringInStr ($aLog[$compteBis + 1], "{TAB}") = 0	Then
		MsgBox(80,"","Compte invalide, désolée.." &@CRLF&@CRLF& "Veuillez le modifier pour le mettre aux normes."&@crlf&"Erreur : pas de séparateur {TAB} entre compte et pass.")
		DesAct ()
		Return -1
	EndIf
	Local	$Clef = InputBox (@ScriptName & " - Code du compte " & $aLog[$compteBis], "Veuillez entrer la clef de " & $aLog[$compteBis]& " :", "", "°")
	If	@error = 1	Then
		DesAct ()
		Return -2
	EndIf
	Local	$NDCMDP = StringSplit ($aLog[$compteBis + 1], "{TAB}", 1)
	If	$Clef <> ""	Then
		$NDCMDP[1] = _StringEncrypt (0, $NDCMDP[1], $Clef)
		$NDCMDP[2] = _StringEncrypt (0, $NDCMDP[2], $Clef)
	EndIf
	If	MsgBox (0x51, @ScriptName, "Lancement de la fenêtre Dofus !" & @CRLF & "Cliquez sur Annuler pour fermer." & @CRLF & Message(), 2) <> 2	Then
		TrayTip (@Scriptname, "Lancement de la fenêtre Dofus.", 0)
		Run ($prgChemin & $prgNom, $prgChemin)
		AutoItSetOption ("WinTitleMatchMode", 3)
		Do
			Sleep (200)
		Until	WinActive ("Dofus  ")	Or	WinActive ("Dofus - Opera")	Or	WinActive ("Dofus - Windows Internet Explorer")	Or	WinActive ("Dofus - Mozilla Firefox")
		AutoItSetOption ("WinTitleMatchMode", 1)
		WinSetTitle ("Dofus", "", "Dofus - " & $aLog[$compteBis])
		TrayTip ("","",0)
		Sleep (1000)
		Traytip (@ScriptName, "Veuillez placer votre curseur" & @CRLF & 'sur la zone "Compte Ankama".', 10)
		AutoItSetOption ("MouseCoordMode", 0)
		$posDof = WinGetClientSize ("Dofus - " & $aLog[$compteBis])
		Do
			WinWaitActive ("Dofus - " & $aLog[$compteBis])
			$posCur = MouseGetPos ()
			Sleep(20)
		Until	(MouseGetCursor () = 5)	And	($posCur[0] < $posDof[0])	And	($posCur[1] < $posDof[1])	And	($posCur[0] > 0)	And	($posCur[1] > 0)
		MouseClick ("left")
		Send ($NDCMDP[1], 1)
		Send ("{TAB}")
		Send ($NDCMDP[2], 1)
		AutoItSetOption ("MouseCoordMode", 1)
		TrayTip (@Scriptname, "Veuillez passer votre souris" & @CRLF & 'sur le bouton "OK".', 0)
		Do
			WinWaitActive ("Dofus - " & $aLog[$compteBis])
			sleep (20)
			$cur = MouseGetPos ()
		Until	((MouseGetCursor () = 0)	And	(PixelGetColor ($cur[0], $cur[1]) = 0xFF9900))
		MouseClick ("left")
		TrayTip ("", "", 0)
	Else
		DesAct ()
		Return -3
	EndIf
	DesAct ()
	Return
EndFunc
Func	Message ()	;Le message débile qui ne sert à rien.
	Switch	Random (0, 4, 1)
		Case	0
			Return	"(\__/)" & @CRLF & "( ' . ' )" & @CRLF & '(")_(")'
		Case	1
			Return	@CRLF & "Vous pouvez aussi aller jouer dehors," & @CRLF & "avec les papillons, les fleurs et les oiseaux."
		Case	2
			Return	""
		Case	3
			Return	@CRLF & "Ou patientez 2 secondes," & @CRLF & "que la fenêtre se ferme d'elle-même."
		Case	4
			Return	@CRLF & "La Vie est comme cette boîte de dialogue :" & @CRLF & "C'est quand elle se ferme qu'on arrive à l'essentiel."
	EndSwitch
EndFunc
Func	Fini () ;Fermeture du script en fin de connexion
	$fin = GUICtrlRead ($CFini)
EndFunc
Func	Void () ;Fonction vide, utile pour tester si un bouton "répond" ou pas lors des tests de débug. ^^'
	MsgBox (80, @ScriptName, "L'objet cliqué (" & @GUI_CtrlId & ") n'a pas" & @CRLF & "d'action associée, désolée." & @CRLF & "contenu = " & GUIctrlread (@GUI_CtrlId))
EndFunc
Func	Quit () ;Fermeture de la fenêtre appelante, ou du script entier si il ne reste que la fenêtre de base. :)
	GUIDelete (@GUI_WinHandle)
	If	@GUI_WinHandle = $FenBase	Then	Exit
	DesAct ()
EndFunc
	;==========================Fonctions AutoIt 3 modifiées========================================
Func	_FileWriteToLine2 ($sFile, $iLine, $sText, $fOverWrite = 0) ;Ecrire une ligne particulière dans un fichier texte
	If	Not	FileExists ($sFile)	Then	FileWrite ($sFile, "")
	Local	$filtxt = FileRead ($sFile, FileGetSize ($sFile))
	$filtxt = StringSplit ($filtxt, @CRLF, 1)
	If	UBound ($filtxt) - 1 < $iLine	Then	ReDim	$filtxt[$iLine + 1]
	Local	$fil = FileOpen ($sFile, 2), $i, $limit = UBound ($filtxt) - 1, $file2write = ""
	For	$i = 1	To	$limit
		If	$i = $iLine	Then
			If	$fOverWrite = 1	Then
				If	$sText <> ""	Then
					If	$i < $limit	And	$sText <> @CRLF	Then
						$file2write &= $sText & @CRLF
					ElseIf	$i = $limit	Or	$sText = @CRLF	Then
						$file2write &= $sText
					EndIf
				Else
					If	$i < $limit	Then
						$file2write &= $sText
					EndIf
				EndIf
			EndIf
			If	$fOverWrite = 0	Then
				If	$i < $limit	Then
					If	$sText = @CRLF	Then
						$file2write &= @CRLF & $filtxt[$i] & @CRLF
					Else
						$file2write &= $sText & @CRLF & $filtxt[$i] & @CRLF
					EndIf
				ElseIf	$i = $limit	Then
					If	$sText = @CRLF	Then
						$file2write &= @CRLF & $filtxt[$i]
					Else
						$file2write &= $sText & @CRLF & $filtxt[$i]
					EndIf
				EndIf
			EndIf
		ElseIf	$i < $limit	Then
			$file2write &= $filtxt[$i] & @CRLF
		ElseIf	$i = $limit	Then
			$file2write &= $filtxt[$i]
		EndIf
	Next
	FileWrite ($fil, $file2write)
	FileClose ($fil)
	Return	1
EndFunc	;==>_FileWriteToLine2
Func _FileWriteFromArray2 ($File, $a_Array, $i_Base = 0, $i_UBound = -1) ;Transformer un Array (Liste) en fichier texte
	Local	$hFile, $x, $file2write = ""
	If	IsString ($File)	Then
		$hFile = FileOpen ($File, 2)
	Else
		$hFile = $File
	EndIf
	If	$hFile = -1	Then	Return	SetError (1, 0, 0)
	If	$i_UBound < 1	Then	$i_UBound = UBound ($a_Array)
	$x = $i_Base
	Do
		$file2write &= $a_Array[$x] & @CRLF
		$x += 1
	Until	$x = $i_UBound
	FileWrite ($hFile, $file2write & $a_Array[$i_UBound])
	If	IsString ($File)	Then	FileClose ($hFile)
EndFunc  	;==>_FileWriteFromArray2
Func	_FileReadToArray2 ($sFilePath, ByRef	$aArray) ;Transformer un fichier texte en Array (Liste)
	Local	$hFile
	$hFile = FileOpen ($sFilePath, 0)
	If	$hFile = -1	Then
		SetError (1)
		Return	0
	EndIf
	$aArray = StringSplit (StringStripCR (FileRead ($hFile, FileGetSize ($sFilePath))), @CRLF)
	FileClose ($hFile)
	Return	1
EndFunc	;==>_FileReadToArray2
24604 caractères, en 592 lignes.

Changement depuis la 1_9b : Beaucoup.
Majeur :
-> Meilleure prise en charge de la fonction Multico, en un seul affichage
-> Meilleur affichage, la fenêtre apparaît sans les surnoms d'abord, qui arrivent juste après. (Changement visible en cas de lag lourd.)
-> Disparition des boutons (devenus superflus) "Ajouter ->" et "<- Retirer"
-> Amélioration de l'appel des fonctions par un "OnEvent", plutôt que l'ancien "Getmsg()". (La bonne fonction est appelée directement au clic sur un objet donné, contrairement à "Bouton appuyé, recherche de la fonction qui lui correspond", ce qui diminue aussi la charge processeur.)
-> Refonte des fonctions AutoIt modifiées (en fin de code source), qui sont maintenant plus efficaces, mieux gérées et plus légères
-> Amélioration des conditions pour l'envoi des identifiants dans la fenêtre Dofus (sécurité augmentée)
Mineur :
-> Changement de l'apparence sur quelques points, ça devrait être plus joli.

Changement par rapport aux versions 1_10BêtaX précédentes :
-> Le module de skins n'est pas prêt, mais ce sera la réelle modification à venir sur le DofusLog (maintenant que le code est correct)
-> Lire les améliorations ci-dessus, cette version a été particulièrement travaillée pour ne plus contenir de bugs. N'hésitez pas à signaler tout comportement ou fonctionnalité qui ne vous paraît pas intuitive.

Et pour le futur :
-> Skinz à veniir, je prépare une (VRAIE) version bêta qui sera fonctionnelle, basée sur cette version 1_10. (Pas comme ces ersatz de 1_10BêtaX, qui étaient plus ou moins plantées. u_u)
-> Mémorisation d'une fenêtre lors de son rafraîchissement. (Oui, c'est désagréable de voir la fenêtre principale retourner au centre de l'écran au moindre clic sur Multico, je sais. :b)
-> Choix d'une clef unique à entrer dans un coin de fenêtre principale, pour connecter une série de comptes sans se faire agresser par des demandes de clefs en boucle.
-> Remettre les boutons "Haut" et "Bas", pour changer l'ordre de la liste des surnoms
-> Et intégration de ce qui vous plairait, n'hésitez surtout pas à demander la lune ! (Elle vous serait fournie comme image de fond du script pour les skins. o//)

Voilà, à bientôt pour de nouvelles aventures chocolatées..!

Za.
Oui, je sais que ça fait longtemps que mon script est en travaux. Merci de votre patience. ^^'

Dernière modification par Famille Za ; 25/01/2010 à 14h24. Motif: Edition des liens.
Famille Za est déconnecté Vieux 12/10/2009, 18h04
Afficher le profil de Famille Za
RoyaumeRav
Héros
 
Avatar de RoyaumeRav
 
Je préfère cette version niveau pratique pour se connecter en multi
Sinon, rien d'anormal.
RoyaumeRav est déconnecté Vieux 12/10/2009, 19h05
Afficher le profil de RoyaumeRav
Famille Za
Oracle
 
Avatar de Famille Za
 
Et comme je viens d'obtenir ma clef pour la bêta de Dofus 2.0, voici un p'tit cadeau :

DofusLogv-1_10-DémoDofus2.0, la version compatible avec la démo de Dofus 2.0 !

Ca fonctionne comment ?
Pareil que le DofusLog normal, sauf l'intégration de "Dofus 2.0", à la place de "Dofus".

Version compilée : nan, y'a pas. (mais vous pouvez toujours en compiler une pour vous à partir de l'une des deux versions ci-dessous. n_n)
Version scripte : DofusLog-v1_10-DémoDofus2.0.au3 - 24.14 kB
Version source :
Code:
#include <GUIConstants.au3>	;Nécessaire surtout pour le $GUI_EVENT_CLOSE
#include <String.au3>	;Pour l'encryptage
AutoItSetOption ("GUIOnEventMode", 1)
Global	$Version = "1_10"
Global	$fichier, $prgChemin, $prgNom, $FenBase, $Label, $CFini, $fin, $Lancer, $Lance = 0, $Multico, $multi = 0, $Modifier, $Nouveau, $Supprimer, $Ajoute, $Retire, $Haut, $Bas, $Boutons, $Options, $OLog, $LLancer, $LModifier, $LNouveau, $LSupprimer,  $Fichiers, $FNouv, $FCharge, $FQuit, $ORaccourcis, $RNouveau, $RModifier, $RCharge, $RSupprime, $OSkin, $SCharger, $SNouveau, $SModifier, $SSauvegarder, $Aide, $ATuto, $aLog, $coListe, $Avatar, $Radio, $Skin, $suppr = -1
Global	$NbLignes = 2	;Nombre de lignes utilisées par entrée dans le fichier de Log
Global	$logChemin = @ScriptDir & "\Log.txt"
Global	$compte = 1, $compteBis
Dim	$coListe[1]
If	$CmdLine[0] > 0	Then	$logChemin = $CmdLine[1]
If	$CmdLine[0] > 1	Then
	$coListe = StringSplit ($CmdLine[2], ",")
	For	$n = 0	To	UBound ($coListe) - 2
		$coListe[$n] = $coListe[$n+1]
	Next
	ReDim	$coListe[UBound ($coListe) - 1]
	$Lance = 1
	$fin = $GUI_CHECKED	;Pas obligatoire, en fait, mais préférable, finalement.
EndIf
Global	$Hligne = 16	;hauteur présumée par ligne (13 pixels de haut, voire 14)
Global	$Separ = $Hligne / 2 - 10	;Séparateur, hauteur en pixels entre deux lignes
Global	$Ht = $Separ + 2 * $Hligne
Global	$msg
Dim	$aLog[3]
_FileReadToArray2 (@ScriptDir & "\SkinDB.txt", $Skin)	;rendre modifiable ce chemin

ChargeLog (0)
While	1
	Sleep(100)
	If	$Lance = 1	Then	Lance ()
WEnd
;==============================Fonctions totalement créées par Za====================================
Func	Recharge ()
	ChargeLog (1)
EndFunc
Func	ChargeLog ($nouv = 1)
	If	Not	FileExists ($logChemin)	Or	$nouv = 1	Then
		TrayTip (@ScriptName, "Veuillez sélectionner un fichier texte.", 0)
		$fichier = FileOpenDialog (@ScriptName & " - Sélectionnez ou créez un fichier contenant vos logs", $logChemin, "Text files (*.txt)|All files (*.*)", 8, "Log.txt")
		If	$fichier = ""	Then	Return
		TrayTip (@ScriptName, "Enregistrement de la place du Log en cours", 1, 16)
		_FileWriteToLine2 (@ScriptFullPath, 7,'Global	$logChemin = "' & $fichier & '"', 1)
		TrayTip ("", "", 0)
	Else
		$fichier = $logChemin
	EndIf
	$existe = _FileReadToArray2 ($fichier, $aLog)

	;$prgChemin et $prgNom n'ont rien à faire ici, normalement. Sauf pour utiliser le DofusLog comme gestionnaire de MDP cross-applications.)
;~ 	$prgChemin = RegRead ("HKEY_LOCAL_MACHINE\SOFTWARE\Ankama/\Dofus", "Path") & "\"
	$prgNom = "Dofus.exe"
;~ 	If	Not	FileExists ($prgChemin & $prgNom)	Then
;~ 		If	Not	FileExists ($prgChemin & "Dofus_client.exe")	Then
			$prgChemin = "C:\Program Files\Dofus 2 Online\app\"
			If	Not	FileExists ($prgChemin & $prgNom)	Then
;~ 				If	Not	FileExists ($prgChemin & "Dofus_client.exe")	Then
					$prgNom = FileOpenDialog (@ScriptName & " - Sélectionnez votre lanceur de jeu Dofus 2.0", $prgChemin, "(*.exe; *.html)|Tous (*.*)", 1, "Dofus")
					$prgChemin = ""
;~ 				Else
;~ 					$prgNom = "Dofus_client.exe"
;~ 				EndIf
			EndIf
;~ 		Else
;~ 			$prgNom = "Dofus_client.exe"
;~ 		EndIf
;~ 	EndIf

	If	Not	$existe	Then
		Modifier (1, $fichier)
	EndIf

	_FileReadToArray2 ($fichier, $aLog)
	Dim	$Radio[(UBound ($aLog) + 1) / $NbLignes]
	Dim $Avatar[(UBound ($aLog) + 1) / $NbLignes]
	
	Fenetre ()
EndFunc
Func	Fenetre ($GUI = "FenBase")
	Global	$tFen = (UBound ($aLog) - 1) / $NbLignes
	If	$tFen < 2	Then	$tFen = 2
	Global	$lFen = 200
	If	$GUI = "FenBase"	Then
		;sauvegarde de la position entre deux redim' à faire
		GUIDelete ($FenBase)

		$FenBase = GUICreate (@ScriptName, $lFen, 19 + 50 + $tFen * $Ht + 30, -1, -1, 0x70000,0,0)
		GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")

		$Fichiers = GUICtrlCreateMenu ("Fichier", -1, 0)
		$FNouv = GUICtrlCreateMenuItem ("Nouveau", $Fichiers, 0)
		GUICtrlSetOnEvent ($FNouv, "Recharge")
		$FCharge = GUICtrlCreateMenuItem ("Charger", $Fichiers, 1)
		GUICtrlSetOnEvent ($FCharge, "Recharge")
		$FLigneVide = GUICtrlCreateMenuItem ("", $Fichiers, 2)
		$FQuit = GUICtrlCreateMenuItem ("Quitter", $Fichiers, 3)
		GUICtrlSetOnEvent ($FQuit, "Quit")

		$Options = GUICtrlCreateMenu ("Options", -1, 1)
		$OLog = GUICtrlCreateMenu ("Compte", $Options, 0)
		$LLancer = GUICtrlCreateMenuItem ("Lancer !", $OLog, 0)
		GUICtrlSetOnEvent ($LLancer, "Lance")
		$LNouveau = GUICtrlCreateMenuItem ("Nouveau", $OLog, 1)
		GUICtrlSetOnEvent ($LNouveau, "FNouveau")
		$LModifier = GUICtrlCreateMenuItem ("Modifier", $OLog, 2)
		GUICtrlSetOnEvent ($LModifier, "FModifier")
		$LSupprimer = GUICtrlCreateMenuItem ("Supprimer", $OLog, 3)
		GUICtrlSetOnEvent ($LSupprimer, "FSupprimer")
		$ORaccourcis = GUICtrlCreateMenu ("Raccourcis", $Options, 1)
		$RNouveau = GUICtrlCreateMenuItem ("Nouveau", $ORaccourcis, 0)
		GUICtrlSetOnEvent ($RNouveau, "RModif")
		$RCharge = GUICtrlCreateMenuItem ("Charger", $ORaccourcis, 1)
		GUICtrlSetOnEvent ($RCharge, "RCharge")
		$RModifier = GUICtrlCreateMenuItem ("Modifier", $ORaccourcis, 2)
		$RSupprime = GUICtrlCreateMenuItem ("Supprimer", $ORaccourcis, 3)
		GUICtrlSetOnEvent ($RSupprime, "RSuppre")
		;Les skins ne sont pas encore implémantés.
		$OSkin = GUICtrlCreateMenu ("Skins", $Options, 2)
		GUICtrlSetState ($OSkin, $GUI_DISABLE)
		$SNouveau = GUICtrlCreateMenuItem ("Nouveau", $OSkin, 0)
		GUICtrlSetState ($SNouveau, $GUI_DISABLE)
		$SSauvegarder = GUICtrlCreateMenuItem ("Sauver", $OSkin, 1)
		GUICtrlSetState ($SSauvegarder, $GUI_DISABLE)
		$SModifier = GUICtrlCreateMenuItem ("Modifier", $OSkin, 2)
		GUICtrlSetState ($Smodifier, $GUI_DISABLE)
		$SCharger = GUICtrlCreateMenuItem ("Charger", $OSkin, 3)
		GUICtrlSetState ($SCharger, $GUI_DISABLE)
		;Idem pour le Tutoriel.
		$Aide = GUICtrlCreateMenu ("Aide", -1, 3)
		$ATuto = GUICtrlCreateMenuItem ("Tutoriel", $Aide, 0)
		GUICtrlSetState ($ATuto, $GUI_DISABLE)
		GUICtrlCreateMenuItem("Version : " & $Version, GUICtrlCreateMenu("DofusLog By Za", $Aide, 1)) ;Petit Copyright. Huhu ^^

		$Label = GUICtrlCreateLabel ("Choisissez un compte à Logger :", 1, -2, -1, -1)
		GUICtrlSetResizing ($Label, 2 + 32 + 768)

		$Boutons = GUIStartGroup ($FenBase)	;Séparation des boutons. -utile pour la boucle de focus
		$Lancer = GUICtrlCreateButton ("Lancer !", $lFen - 50, $Ht / 2 + $Ht / 2 * $tFen, 47, 25)
		GUICtrlSetResizing ($Lancer, 8 + 768)
		GUICtrlSetOnEvent ($Lancer, "Lance")
		If	(UBound ($aLog)) / $NbLignes > 2	Then
			$Multico = GUICtrlCreateCheckbox ("Multi", $lFen - 50, 11 + $Ht + $Ht / 2 * $tFen, -1, $Hligne)
			GUICtrlSetResizing ($Multico, 8 + 768)
			GUICtrlSetState ($Multico, $multi)
			GUICtrlSetOnEvent ($Multico, "FMultico")
		EndIf
		$Modifier = GUICtrlCreateButton ("Modifier", $lFen - 50, 27 + $tFen * $Ht, 47, 25, 0x8000)
		GUICtrlSetResizing ($Modifier, 8 + 64 + 768)
		GUICtrlSetOnEvent ($Modifier, "FModifier")
		$Nouveau = GUICtrlCreateButton ("Nouveau", 1, 27 + $tFen * $Ht, -1, 25, 0x8000)
		GUICtrlSetResizing ($Nouveau, 8 + 64 + 768)
		GUICtrlSetOnEvent ($Nouveau, "FNouveau")
		$Supprimer = GUICTRLCreateButton ("Supprimer", 75, 27 + $tFen * $Ht, -1, 25, 0x8000)
		GUICtrlSetResizing ($Supprimer,	8 + 64 + 768)
		GUICtrlSetOnEvent ($Supprimer, "FSupprimer")
		$CFini = GUICtrlCreateCheckbox ("Fermer le script après ce compte", 15, $Hligne, -1, 13)
		GUICtrlSetResizing ($CFini, 2 + 32 + 768)
		GUICtrlSetState ($CFini, $fin)
		GUICtrlSetOnEvent ($CFini, "Fini")
		GUISetState ()

		Local $compteBis = 1, $compteTer
		While	$compteBis < (UBound ($aLog)) / $NbLignes
			If GUICtrlRead ($Multico) = $GUI_CHECKED Then
				$Radio[$compteBis] = GUICtrlCreateCheckbox ($aLog[$compteBis * $NbLignes - 1]& " .", 5, $Ht + ($compteBis - 1) * $Ht, 135, $Ht - 3, 0x2000)
				GUICtrlSetOnEvent($Radio[$compteBis], "FCheckBox")
				$compteTer = 0
				While $compteTer < UBound ($coListe)
					If $coListe[$compteTer] = $compteBis Then
						GUICtrlSetState($Radio[$compteBis], $GUI_CHECKED)
						GUICtrlSetFont($Radio[$compteBis], -1, 800)
					EndIf
					$compteTer += 1
				WEnd
			Else
				$Radio[$compteBis] = GUICtrlCreateRadio ($aLog[$compteBis * $NbLignes - 1]& " .", 5, $Ht + ($compteBis - 1) * $Ht, 135, $Ht - 3, 0x2000)
				GUICtrlSetOnEvent ($Radio[$compteBis], "FRadio")
			EndIf
			GUICtrlSetData ($Radio[$compteBis], $aLog[$compteBis * $NbLignes - 1])
			GUICtrlSetResizing ($Radio[$compteBis], 2 + 32 + 512)
			$compteBis += 1
		WEnd
		If GUICtrlRead ($Multico) = $GUI_UNCHECKED Then
			GUICtrlSetState ($Radio[$compte], $GUI_CHECKED + $GUI_FOCUS)
			GUICtrlSetFont($Radio[$compte], -1, 800)
		EndIf
	ElseIf	$GUI = "FenMod"	Then
		$FenMod = GUICreate("ajouter/modifier un compte", 200, $HLigne * 12)
		GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
		
		$LabelSurnom = GUICtrlCreateLabel("Veuillez entrer un" & @CRLF & " pseudonyme :", 1, 2, 100)
		$LabelClef = GUICtrlCreateLabel(@CRLF&"Clef de cryptage :", 120, 0)
		$LabelNDC = GUICtrlCreateLabel("Veuillez entrer le nom de compte Dofus :", 0, $HLigne * 4)
		$LabelMDP = GUICtrlCreateLabel("Veuillez entrer le mot de pass associé :", 0, $HLigne * 7)
		$InputPseudo = GUICtrlCreateInput($aLog[$compteTer], 2, $HLigne * 2, 125)
		$InputClef = GUICtrlCreateInput("", 149, $HLigne * 2, 50)
		$InputNDC = GUICtrlCreateInput("", 2, $Hligne * 5, 196)
		$InputMDP = GUICtrlCreateInput("", 2, $Hligne * 8, 196)
		$BValide = GUICtrlCreateButton("Valider", 2, $HLigne * 10)
		GUICtrlSetOnEvent ($BValide, "ModModifier")
		$BAnnule = GUICtrlCreateButton("Annuler", 100, $HLigne * 10)
		GUICtrlSetOnEvent ($BAnnule, "ModAnnule")
		
	ElseIf	$GUI = "FenRac"	Then
		$FenRac = GUICreate ("créer/modifier un raccourcis", 170, 5 * $Ht + $Hligne)
		GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
		
		GUICtrlCreateLabel("Sélectionnez le script :", 0, 0)
		$IScript = GUICtrlCreateInput(@ScriptFullPath, 5, $HLigne, 100)
		$BSParc = GUICtrlCreateButton("Parcourir", 110, $HLigne)
		GUICtrlSetOnEvent($BSParc, "ParcoureScript")
		GUICtrlCreateLabel("Sélectionnez le log :", 0, $Ht + $HLigne)
		$ILog = GUICtrlCreateInput($logChemin, 5, $Ht + 2 * $Hligne, 100)
		$BLParc = GUICtrlCreateButton("Parcourir", 110, $Ht + 2 * $Hligne)
		GUICtrlSetOnEvent($BLParc, "ParcoureLog")
		GUICtrlCreateLabel("Entrez les n° des comptes :", 0, 2 * $Ht + 2 * $Hligne)
		$Icomptes = GUICtrlCreateInput($compte, 5, 2 * $Ht + 3 * $Hligne, 100)
		$RBValide = GUICtrlCreateButton("Valider", 0, 3 * $Ht + 3 * $Hligne)
		GUICtrlSetOnEvent($RBValide, "RValide")
		$RBAnnule = GUICtrlCreateButton("Annuler", 110, 3 * $Ht + 3 * $Hligne)
		GUICtrlSetOnEvent($RBAnnule, "RFinir")
	EndIf
	GUISetState ()
	If	$GUI = "FenBase"	Then	DesAct ()
EndFunc
Func	DesAct ($DesActive = 0)	;Réactive les boutons par défaut
	If	$DesActive = 1	Then
		GUICtrlSetState ($Lancer, $GUI_DISABLE)
		GUICtrlSetState ($Modifier, $GUI_DISABLE)
		GUICtrlSetState ($Nouveau, $GUI_DISABLE)
		GUICtrlSetState ($Supprimer, $GUI_DISABLE)
		GUICtrlSetState ($Options, $GUI_DISABLE)
		GUICtrlSetState ($Fichiers, $GUI_DISABLE)
	Else
		GUICtrlSetState ($Lancer, $GUI_ENABLE)
		GUICtrlSetState ($Modifier, $GUI_ENABLE)
		GUICtrlSetState ($Nouveau, $GUI_ENABLE)
		GUICtrlSetState ($Supprimer, $GUI_ENABLE)
		GUICtrlSetState ($Options, $GUI_ENABLE)
		GUICtrlSetState ($Fichiers, $GUI_ENABLE)
	EndIf
EndFunc
Func	FSupprimer () ;Supprimer un surnom
	If	MsgBox (0x51, @ScriptName & " - Suppression", "Souhaitez-vous vraiment détruire cette entrée ?") = 2	Then	Return
	DesAct (1)
	TrayTip (@ScriptName, "Effacement en cours...", 10, 16)
	$ligne = $compte * $NbLignes + 1
	MRetire ($ligne)
	While	$ligne < UBound ($aLog)
		$aLog[$ligne - $NbLignes] = $aLog[$ligne]
		$ligne += 1
	WEnd
	ReDim	$aLog[UBound ($aLog) - $NbLignes]
	ReDim	$Radio[UBound ($Radio) - 1]
	If	$compte > (UBound ($aLog) - 1) / $NbLignes	Then	$compte -= 1
	_FileWriteFromArray2 ($fichier, $aLog, 1, UBound ($aLog) - 1)
	TrayTip ("", "", 0)

	Fenetre ()
EndFunc
Func	FModifier () ;Modifier un surnom
	DesAct (1)
	Modifier ($compte, $fichier)
EndFunc
Func	FNouveau () ;Ajouter un surnom
	DesAct (1)
	ReDim	$aLog[UBound ($aLog) + $NbLignes]
	ReDim	$Radio[UBound ($Radio) + 1]
	Modifier ((UBound ($aLog) - 1) / $NbLignes, $fichier)
EndFunc
Func	Modifier ($compteBis, $fich) ;fonction générique pour ajout/modif de surnom
	Global	$compteTer = $NbLignes * ($compteBis - 1) + 1
	Global	$FenMod, $LabelSurnom, $LabelClef, $LabelNDC, $LabelMDP, $InputPseudo, $InputClef, $InputNDC, $InputMDP, $BValide, $BAnnule, $Encrypt = StringSplit ($aLog[$compteTer + 1], "{TAB}")
	Fenetre ("FenMod")
EndFunc
Func	ModAnnule () ;Annuler la modification d'un surnom (devrait plutôt être fait par un $GUI_EVENT_CLOSE sur le bouton...)
	GUIDelete($FenMod)
	DesAct ()
EndFunc
Func	ModModifier () ;Modification effective du surnom
	If	MsgBox (0x51, @ScriptName & " - Modifications", "Attention, vous vous apprêtez à" & @CRLF & "modifier définitivement ces données." & @CRLF & "Êtes-vous sûr ?") = 2	Then	Return
	If	GUICtrlRead ($InputPseudo) <> ""	Then
		TrayTip (@ScriptName, "Écriture en cours...", 0, 16)
		$aLog[$compteTer] = GUICtrlRead ($InputPseudo)
		_FileWriteToLine2 ($fichier, $compteTer, $aLog[$compteTer], 1)
		If	GUICtrlRead ($InputNDC) <> ""	Then
			If	GUICtrlRead ($InputClef) = "" 	Then
				$Encrypt[1] = GUICtrlRead ($InputNDC)
			Else
				$Encrypt[1] = _StringEncrypt (1, GUICtrlRead ($InputNDC), GUICtrlRead ($InputClef))
			EndIf
		EndIf
		If	GUICtrlRead ($InputMDP) <> ""	Then
			If	GUICtrlRead ($InputClef) = "" 	Then
				$Encrypt[UBound ($Encrypt) - 1] = GUICtrlRead ($InputMDP)
			Else
				$Encrypt[UBound ($Encrypt) - 1] = _StringEncrypt (1, GUICtrlRead ($InputMDP), GUICtrlRead ($InputClef))
			EndIf
		EndIf
		$Encrypt = $Encrypt[1] & "{TAB}" & $Encrypt[UBound ($Encrypt) - 1]
		If	$Encrypt <> $aLog[$compteTer + 1] Then
			$aLog[$compteTer + 1] = $Encrypt
			_FileWriteToLine2 ($fichier, $compteTer + 1, $aLog[$compteTer + 1], 1)
		EndIf
		TrayTip ("", "", 0)
	EndIf
	GUIDelete ($FenMod)
	GUIDelete ($FenBase)
	Fenetre ()
EndFunc
Func	FRadio ($r = 0) ;Fonction de sélection du surnom dans la liste (sans Multico)
	Local	$mess, $r
	If $r = 0	Then
		$mess = @GUI_CtrlId
	Else
		$mess = $r
	EndIf
	If	$mess <> $Radio[$compte]	Then
		If GUICtrlRead ($Multico) = $GUI_UNCHECKED	or	GUICtrlRead($Radio[$compte]) = $GUI_UNCHECKED Then
			GUICtrlSetFont($Radio[$compte], -1, 400)
			GUICtrlSetState ($Radio[$compte], $GUI_NOFOCUS)
		EndIf
		While	$mess <> $Radio[$compte]
			$compte += 1
			If	$compte > (UBound ($Radio) - 1)	Then
				$compte = 1
			EndIf
		WEnd
		GUICtrlSetState ($Radio[$compte], $GUI_CHECKED + $GUI_FOCUS)
		GUICtrlSetFont($Radio[$compte], -1, 800)
	Else
		FLancer ($compte)
		If	$fin = $GUI_CHECKED	Then	Exit
	EndIf
EndFunc
Func	FCheckBox ($r = 0) ;Fonction de sélection de(s) surnom(s) (avec Multico)
	Local	$mess, $r
	If $r = 0	Then
		$mess = @GUI_CtrlId
	Else
		$mess = $r
	EndIf

	$r = 0
	While $mess <> $Radio[$r]
		$r += 1
	WEnd

	If	GUICtrlRead($mess) = $GUI_UNCHECKED	Then
		GUICtrlSetFont($mess, -1, 400)
		MRetire ($r)
	Else
		GUICtrlSetFont($mess, -1, 800)
		ReDim	$coListe[UBound ($coListe) + 1]
		$coListe[UBound ($coListe) - 1] = $r
	EndIf
EndFunc
Func	FMultico () ;Gestion de l'état du bouton Multico
	$multi = GUICtrlRead ($Multico)
	If	$coListe[0] = ""	Then	$coListe[0] = $compte
	Fenetre ()
EndFunc
Func	MRetire ($suppr = -1) ;Dé-sélection d'un surnom pré-sélectionné (sous Multico)
	Local	$n = 0, $q, $z
	If	$suppr = -1	Then
		MsgBox(0,"Erreur","Cette fonction MRetire ne doit pas être appellée directement.")
		Return
	EndIf
	$n = 0
	While $coListe[$n] <> $suppr
		$n += 1
	WEnd
	While $n < UBound ($coListe) - 1
		$coListe[$n] = $coListe[$n + 1]
		$n += 1
	WEnd
	If	UBound	($coListe) > 1	Then
		ReDim	$coListe[UBound ($coListe) - 1]
	Else
		$coListe[0] = ""
	EndIf
EndFunc
Func	RModif ($mod = 0) ;Fonction générique pour l'ajout/modification de raccourcis
	Global	$n, $r
	Global	$fenRac, $LabelSansNom, $modRac = 0, $IScript, $BSParc, $LabelSansNom2, $ILog, $BLParc, $LComptes, $LabelSansNom3, $IComptes, $RBValide, $RBAnnule
	Fenetre ("FenRac")
EndFunc
Func	ParcoureScript () ;Parcourir les dossiers par l'utilisateur pour désigner le script
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez votre script :", @ScriptDir, "Scripts (*.au3	;*.exe)|Tous (*.*)", 8, @ScriptName)
	If	$n <> ""	Then	GUICtrlSetData ($IScript, $n)
EndFunc
Func	ParcoureLog () ;Parcourir les dossiers par l'utilisateur pour désigner le log
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez le fichier contenant vos logs :", $logChemin, "Textes (*.txt)|Tous (*.*)", 8, "Log.txt")
	If	$n <> ""	Then	GUICtrlSetData ($ILog, $n)
EndFunc
Func	RValide () ;Créer/Modifier le raccourcis
	$n = FileOpenDialog (@ScriptName & " - Choissez le nom et répertoire du raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName & ".lnk")
	If	$n = ''	Then	Return
	If	StringInStr ($n, ".lnk") = 0	Then	$n &= ".lnk"
	FileCreateShortcut (GUICtrlRead ($IScript), $n, "", ' "' & GUICtrlRead ($ILog) & '" ' & GUICtrlRead ($IComptes))
	GUIDelete ($fenRac)
EndFunc
Func	RFinir () ;Annuler le raccourcis, idem que ModAnnule()
	GUIDelete ($fenRac)
EndFunc
Func	RCharge () ;Charger une liste de comptes pré-enregistrés en raccourcis
	$n = FileOpenDialog (@ScriptName & " - Sélectionnez votre raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName & ".lnk")
	If	$n = ""	Then	Return
	$r = FileGetShortcut ($n)
	$logChemin = StringMid ($r[2], 3, StringInStr ($r[2], '"', 2, 2) - 3)
	$coListe = StringSplit (StringMid ($r[2], StringInStr ($r[2], '"', 2, 2) + 2), ",")
	For	$n = 0	To	UBound ($coListe) - 2
		$coListe[$n] = $coListe[$n+1]
	Next
	ReDim	$coListe[UBound ($coListe) - 1]
	$Lance = 1
	GUIDelete ($fenBase)
	ChargeLog ()
	Return
EndFunc
Func	RSuppre () ;Supprimer le raccourcis sélectionné
	$Racc = FileOpenDialog (@ScriptName & " - Sélectionnez votre raccourcis :", @ScriptDir, "Raccourcis (*.lnk)", 8, @ScriptName)
	If	$Racc <> ""	Then	FileDelete ($Racc)
EndFunc
Func	Lance () ;Démarrer la connexion d'un surnom/d'une liste de surnoms
	Local	$err = 0
	If	GUICtrlRead($Multico) = $GUI_CHECKED	Or	$Lance = 1	Then
		For	$n = 0	To	UBound ($coListe) - 1
			If	$coListe[$n] <= ((UBound ($aLog) - 1) / $NbLignes) And	$coListe[$n] > 0	Then  $err = FLancer ($coListe[$n])
		Next
		$Lance = 0
	Else
		$err = FLancer ($compte)
	EndIf
	If	$fin = $GUI_CHECKED And $err = 0	Then	Exit
EndFunc
Func	FLancer ($compteBis = $compte) ;Lancement du jeu + traitement des identifiants pour la connexion au jeu
	DesAct (1)
	$compteBis = ($compteBis - 1) * $NbLignes + 1
	If	StringInStr ($aLog[$compteBis + 1], "{TAB}") = 0	Then
		MsgBox(80,"","Compte invalide, désolée.." &@CRLF&@CRLF& "Veuillez le modifier pour le mettre aux normes."&@crlf&"Erreur : pas de séparateur {TAB} entre compte et pass.")
		DesAct ()
		Return -1
	EndIf
	Local	$Clef = InputBox (@ScriptName & " - Code du compte " & $aLog[$compteBis], "Veuillez entrer la clef de " & $aLog[$compteBis]& " :", "", "°")
	If	@error = 1	Then
		DesAct ()
		Return -2
	EndIf
	Local	$NDCMDP = StringSplit ($aLog[$compteBis + 1], "{TAB}", 1)
	If	$Clef <> ""	Then
		$NDCMDP[1] = _StringEncrypt (0, $NDCMDP[1], $Clef)
		$NDCMDP[2] = _StringEncrypt (0, $NDCMDP[2], $Clef)
	EndIf
	If	MsgBox (0x51, @ScriptName, "Lancement de la fenêtre Dofus !" & @CRLF & "Cliquez sur Annuler pour fermer." & @CRLF & Message(), 2) <> 2	Then
		TrayTip (@Scriptname, "Lancement de la fenêtre Dofus.", 0)
		Run ($prgChemin & $prgNom, $prgChemin)
		AutoItSetOption ("WinTitleMatchMode", 3)
		Do
			Sleep (200)
		Until	WinActive ("Dofus 2.0");	Or	WinActive ("Dofus - Opera")	Or	WinActive ("Dofus - Windows Internet Explorer")	Or	WinActive ("Dofus - Mozilla Firefox")
		AutoItSetOption ("WinTitleMatchMode", 1)
		WinSetTitle ("Dofus", "", "Dofus 2.0 - " & $aLog[$compteBis])
		TrayTip ("","",0)
		Sleep (1000)
		Traytip (@ScriptName, "Veuillez placer votre curseur" & @CRLF & 'sur la zone "Compte Ankama".', 10)
		AutoItSetOption ("MouseCoordMode", 0)
		$posDof = WinGetClientSize ("Dofus 2.0 - " & $aLog[$compteBis])
		Do
			WinWaitActive ("Dofus 2.0 - " & $aLog[$compteBis])
			$posCur = MouseGetPos ()
			Sleep(20)
		Until	(MouseGetCursor () = 5)	And	($posCur[0] < $posDof[0])	And	($posCur[1] < $posDof[1])	And	($posCur[0] > 0)	And	($posCur[1] > 0)
		MouseClick ("left")
		Send ($NDCMDP[1], 1)
		Send ("{TAB}")
		Send ($NDCMDP[2], 1)
		Send ("{TAB}{ENTER}")
;~ 		AutoItSetOption ("MouseCoordMode", 1)
;~ 		TrayTip (@Scriptname, "Veuillez passer votre souris" & @CRLF & 'sur le bouton "OK".', 0)
;~ 		Do
;~ 			WinWaitActive ("Dofus 2.0 - " & $aLog[$compteBis])
;~ 			sleep (20)
;~ 			$cur = MouseGetPos ()
;~ 		Until	((MouseGetCursor () = 0)	And	(PixelGetColor ($cur[0], $cur[1]) = 0xFF9900))
;~ 		MouseClick ("left")
		TrayTip ("", "", 0)
	Else
		DesAct ()
		Return -3
	EndIf
	DesAct ()
	Return
EndFunc
Func	Message ()	;Le message débile qui ne sert à rien.
	Switch	Random (0, 4, 1)
		Case	0
			Return	"(\__/)" & @CRLF & "( ' . ' )" & @CRLF & '(")_(")'
		Case	1
			Return	@CRLF & "Vous pouvez aussi aller jouer dehors," & @CRLF & "avec les papillons, les fleurs et les oiseaux."
		Case	2
			Return	""
		Case	3
			Return	@CRLF & "Ou patientez 2 secondes," & @CRLF & "que la fenêtre se ferme d'elle-même."
		Case	4
			Return	@CRLF & "La Vie est comme cette boîte de dialogue :" & @CRLF & "C'est quand elle se ferme qu'on arrive à l'essentiel."
	EndSwitch
EndFunc
Func	Fini () ;Fermeture du script en fin de connexion
	$fin = GUICtrlRead ($CFini)
EndFunc
Func	Void () ;Fonction vide, utile pour tester si un bouton "répond" ou pas lors des tests de débug. ^^'
	MsgBox (80, @ScriptName, "L'objet cliqué (" & @GUI_CtrlId & ") n'a pas" & @CRLF & "d'action associée, désolée." & @CRLF & "contenu = " & GUIctrlread (@GUI_CtrlId))
EndFunc
Func	Quit () ;Fermeture de la fenêtre appelante, ou du script entier si il ne reste que la fenêtre de base. :)
	GUIDelete (@GUI_WinHandle)
	If	@GUI_WinHandle = $FenBase	Then	Exit
	DesAct ()
EndFunc
	;==========================Fonctions AutoIt 3 modifiées========================================
Func	_FileWriteToLine2 ($sFile, $iLine, $sText, $fOverWrite = 0) ;Ecrire une ligne particulière dans un fichier texte
	If	Not	FileExists ($sFile)	Then	FileWrite ($sFile, "")
	Local	$filtxt = FileRead ($sFile, FileGetSize ($sFile))
	$filtxt = StringSplit ($filtxt, @CRLF, 1)
	If	UBound ($filtxt) - 1 < $iLine	Then	ReDim	$filtxt[$iLine + 1]
	Local	$fil = FileOpen ($sFile, 2), $i, $limit = UBound ($filtxt) - 1, $file2write = ""
	For	$i = 1	To	$limit
		If	$i = $iLine	Then
			If	$fOverWrite = 1	Then
				If	$sText <> ""	Then
					If	$i < $limit	And	$sText <> @CRLF	Then
						$file2write &= $sText & @CRLF
					ElseIf	$i = $limit	Or	$sText = @CRLF	Then
						$file2write &= $sText
					EndIf
				Else
					If	$i < $limit	Then
						$file2write &= $sText
					EndIf
				EndIf
			EndIf
			If	$fOverWrite = 0	Then
				If	$i < $limit	Then
					If	$sText = @CRLF	Then
						$file2write &= @CRLF & $filtxt[$i] & @CRLF
					Else
						$file2write &= $sText & @CRLF & $filtxt[$i] & @CRLF
					EndIf
				ElseIf	$i = $limit	Then
					If	$sText = @CRLF	Then
						$file2write &= @CRLF & $filtxt[$i]
					Else
						$file2write &= $sText & @CRLF & $filtxt[$i]
					EndIf
				EndIf
			EndIf
		ElseIf	$i < $limit	Then
			$file2write &= $filtxt[$i] & @CRLF
		ElseIf	$i = $limit	Then
			$file2write &= $filtxt[$i]
		EndIf
	Next
	FileWrite ($fil, $file2write)
	FileClose ($fil)
	Return	1
EndFunc	;==>_FileWriteToLine2
Func _FileWriteFromArray2 ($File, $a_Array, $i_Base = 0, $i_UBound = -1) ;Transformer un Array (Liste) en fichier texte
	Local	$hFile, $x, $file2write = ""
	If	IsString ($File)	Then
		$hFile = FileOpen ($File, 2)
	Else
		$hFile = $File
	EndIf
	If	$hFile = -1	Then	Return	SetError (1, 0, 0)
	If	$i_UBound < 1	Then	$i_UBound = UBound ($a_Array)
	$x = $i_Base
	Do
		$file2write &= $a_Array[$x] & @CRLF
		$x += 1
	Until	$x = $i_UBound
	FileWrite ($hFile, $file2write & $a_Array[$i_UBound])
	If	IsString ($File)	Then	FileClose ($hFile)
EndFunc  	;==>_FileWriteFromArray2
Func	_FileReadToArray2 ($sFilePath, ByRef	$aArray) ;Transformer un fichier texte en Array (Liste)
	Local	$hFile
	$hFile = FileOpen ($sFilePath, 0)
	If	$hFile = -1	Then
		SetError (1)
		Return	0
	EndIf
	$aArray = StringSplit (StringStripCR (FileRead ($hFile, FileGetSize ($sFilePath))), @CRLF)
	FileClose ($hFile)
	Return	1
EndFunc	;==>_FileReadToArray2
La très légère différence de taille avec la version "normale" du DofusLog 1_10, c'est à cause de la mise en commentaire d'une partie du source, qui ne pouvait pas être re-appliqué. (Notamment, le chemin d'installation depuis le registre Widows pour chercher "Dofus.exe", pour ne citer que lui.)

Et donc, votre DofusLog habituel est compatible avec vos comptes habituels, toutes les fonctionnalités sont de retour pour votre plus grand plaisir !
(Le script utilise le chemin d'installation par défaut $prgChemin = "C:\Program Files\Dofus 2 Online\app\", ou à entrer soi-même si non-trouvé pour lancer Dofus 2.0. //Si rien n'est demandé, c'est que le script a trouvé Dofus 2.0 à cet endroit. :])

Enjoy !

Za.

Dernière modification par Famille Za ; 25/01/2010 à 14h23. Motif: Edition des liens.
Famille Za est déconnecté Vieux 12/10/2009, 21h49
Afficher le profil de Famille Za
Famille Za
Oracle
 
Avatar de Famille Za
 
Et voilà la 2_0 pour moi aussi, youhou, presque du AG !

Et voilà, le DofusLog 2_0 est arrivé !

Comment le récupérer ?
Argh, le code source est passé trop long (j'en parle plus bas, il fait 47242 caractères !), le forum n'accepte plus de l'afficher dans son entier dans un post forum.. et ça se comprend !
Version Compilée :DofusLog-v2_0.exe - 291.35 kB
Version Scripte : DofusLog-v2_0.au3 - 46.1 kB
Version Source : Désolée, pas cette fois sur JoL, rendez-vous sur Pastebin -> http://pastebin.com/f51b4900a
47242 caractères pour 1097 lignes, vivement la prochaine !
J'ai changé d'hébergeur pour mes fichiers, il s'agit maintenant de Steekr (contre MegaUploads, avant), c'est mieux ?

Ce qui change depuis la version 1_10 ?
- Sécurité améliorée
Pour que le script accepte de lâcher les identifiants, il faut que la fenêtre active porte le bon titre ("Dofus - [Surnom]"), que la souris soit sur une zone de texte (le "Compte Ankama") dans la fenêtre, et que ça reste sans bouger pendant ~1 seconde. (La faille était de faire un alt-tab entre la "bonne" fenêtre Dofus et une autre fenêtre pour voir les identifiants. C'est corrigé.)
- Création (semi-automatique) d'un fichier "DofusLog.ini" contenant
-> Auteur ("Za"), Version ("2_0") par défaut
-> le chemin d'accès au fichier de Log (fixé à "Non Communiqué" par défaut, pour garder un anonymat complet sur vos fichiers)
-> le chemin d'accès au lanceur de Dofus (vide par défaut, pratique pour sauvegarder la place de l'exécutable Dofus à lancer)
-> le dernier fichier de skins utilisé (idem, par défaut vide)
-> l'option de sauvegarde de position de fenêtre principale (par défaut vide, voir dans les menus pour changer)
-> l'option de connexion en plein écran (attention, compatible Dofus 1.0 uniquement ! ~Ca m'apprendra à mettre 6 mois pour développer une interface de skins, tiens... ^^')
-> la dernière position connue de la fenêtre (colonne+ligne, par défaut à "-1")
- Système de clef Unique mis en place (permet de sélectionner une clef à utiliser "par défaut" pour les surnoms, elle est garantie sécurisée)
- Ajout de plein de "TrayTips" pour rendre le script plus convivial (Notament quand vous chargez le script, le mieux est d'avoir une machine un-peu lente pour tous les lire !)
- Gros ménage dans l'ordre des informations demandées à l'utilisateur : Maintenant le Log, puis l'exécutable Dofus. (Si vous ne voyez pas de différence avec 'avant', c'est bien.)
- La gestion des listes de connexions via les raccourcis a été super-simplifiée : c'est un menu à 2 entrées : créer/charger. Créer un raccourcis fait un nouveau fichier avec la liste de connexion active (c'est plus simple), et charger permet la connexion d'une team depuis le script déjà ouvert
- Gestion de si la fenêtre "Dofus - [Surnom]" existe déjà : le script demande à la réutiliser
- Nettoyage du code, toutes les variables Globales sont déclarées en début de script, et toutes les Locales en début de fonction.
- Nouvelles phrases aléatoires : y'en a plein en plus, dont certaines varient en fonction de l'heure, de la date... À chaque instant, le script a le choix entre 10 phrases différentes.
- Les Skins sont implémentés ! Stockés sous la forme d'un fichier ".ini" (Skin.ini, par exemple), ils sont échangeables, compatibles et roxatifs ! Pour le moment, la personnalisation se fait juste sur la fenêtre principale. J'étendrai bientôt à toutes les fenêtres du script.
- Le Script ne se "bloque" plus : il peut être fermé à tout instant avec alt-q ou la croix rouge en haut à droite. Si il ne se ferme pas directement, c'est qu'une question est posée à l'utilisateur (Il suffit alors de répondre nimporte-quoi pour fermer le script de manière brutale).
- Les informations super sensibles (la Clef du surnom et le mot de passe Dofus) sont "cachés" : les caractères sont remplacés par des "*" à l'affichage dans la fenêtre de Nouveau/Modification de compte. C'était le seul instant où mon script mettait en danger les informations utilisateur, c'est maintenant réparé.
(Je rappelle que seul le surnom du compte est une information visible par la modification d'un compte, et que les autres informations ne peuvent être que remplacées volontairement par l'utilisateur.)
- La création/chargement d'un fichier de Log depuis le menu "Fichier" fonctionne maintenant correctement.
- Le code source a dépassé les 1000 lignes (1097, précisément), à partir de cette limite les programmes se tapent à peu-près un bug de plus toutes les 10 lignes. Argh, j'ai besoin de vous pour les traquer ! Attrappez-les tous ! Pokémon !!

Donc, en parlant des bugs :
-> mettre un "&" devant une lettre dans un surnom permet un raccourcis rapide sur la lettre suivante.
Exemple : &Zamiza mettra un raccourcis pour le surnom "Zamiza" en appuyant sur la touche "z" dans le script.
Là où y'a un bug (car ça, c'est pas un bug, c'est une avancée utile !), c'est que la fenêtre dofus se retrouve avec un nom tout laid de type "Dofus - &Zamiza".
Je vais voir à virer dans ce cas le "&".
-> parfois (rarement), le script est trop méchant, et ne veut pas écrire les identifiants quand la souris est au bon endroit. Je suis au courant : c'est juste une preuve que la sécurité du script est trop efficace. Je n'ai pas encore de solution valable à vous proposer, sinon de quitter le script et de le relancer en utilisant la fenêtre déjà existante, ça devrait être bon.

Ce qui ne change pas depuis la version 1_10 ?
Le fonctionnement du script. Il se base toujours sur un fichier texte sélectionné par l'utilisateur, crypté, et gère la connexion d'un/plusieurs comptes au jeu Dofus de manière respectueuse.

Ce qui va changer pour la prochaine version ?
- Encore une refonte du code en vue, mais cette fois, je vais essayer de repasser en-dessous des 800 lignes ! è_é" (tout en gardant bien-sûr toutes les fonctionnalités actives.)
- Déplacement de quelques objets dans les fenêtres, vous pourrez le voir à travers le module de Skin (en utilisant les hauteurs de ligne et la séparation entre elles), c'est "pas top" pour l'instant. Ca sera "top" la prochaine fois !
- Ajout de vos idées ! Allez, à vos claviers, dites moi ce qui vous ferait le plus plaisir pour améliorer mon script ! Le "petit détail qui fâche", ou la grosse amélioration à quoi vous pensez, je me ferai une joie de l'ajouter !

Pour finir ce long post, je vous offre 2 images du DofusLog, avec un skin différent :


N'hésitez pas à parcourir le menu d'Options pour découvrir toutes les nouveautés !
Allez, Joyeux Noël, Bonne Année, Bonne Santé toussa, je soigne mon angine et je reviendrai encore plus en forme pour 2010 !

À bientôt,

Za.

P.S : Grand malheur prévu pour 2010, le premier Janvier sera un Vendredi 13 ! Fear.

Dernière modification par Famille Za ; 25/01/2010 à 14h23. Motif: Edition des liens.
Famille Za est déconnecté Vieux 02/12/2009, 21h21
Afficher le profil de Famille Za
Miss-prespic [Jiva] [-lm-]
Grande duchesse
 
Avatar de Miss-prespic [Jiva]
 
Enorme ça , moi qui me demander ce qu'aller devenir mon vieux DofusLog !

Merci Za' !
Miss-prespic [Jiva] est déconnecté Vieux 02/12/2009, 21h29
Afficher le profil de Miss-prespic [Jiva]
Réponse
Forums jeux vidéo MMORPG   Les forums JeuxOnLine > Dofus > Dofus - Le Village des Tofus Perdus >

[Wiki] DofusLog, script pour le login/pass [Windows only]

   

Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 

Outils de la discussion


Thème visuel : Fuseau horaire GMT +2. Il est actuellement 20h54.