[wiki]Quelques bases utiles.

Répondre
Partager Rechercher
Ce message est en mode wiki. Tous les comptes de plus de 30 jours avec plus de 30 messages peuvent le modifier.
La mauvaise nouvelle, est que je ne connais aucun vaccin contre le syndrome "d'addonadiction", cependant, et ça, c'est la bonne nouvelle, vous n'êtes pas les seules victimes .

Il arrive souvent que pour configurer vos UI, vous soyez contraint de mettre les "mains dans le cambouis". Ce genre d'opérations peut sembler délicat, voire, décourageant. C'est pourquoi je propose ce petit guide qui vous donnera les quelques bases à savoir, en espérant qu'il sera complété par les plus connaisseurs.




Le lua et la mécanique générale.


Un conseil: Quelque soit votre intervention sur un code, ou un pseudocode, utilisez un logiciel d'édition qui vous simplifiera la lecture et par conséquent, limitera le risque de faire des erreurs. Pour ma part, je recommande Notepad++ qui est un logiciel gratuit et simple d'utilisation.



Quelques adresses utiles





Vous pouvez aussi trouver d'autres informations un peu partout sur le Web. Par exemple, dans le Site du Zero, WoWUIgallery ou de manière générale, par les liens fournis par vos addons.

Les fichiers "Interface"


C'est dans le dossier situé dans "Interface" que se trouvent les différents dossiers qui assurent le fonctionnement de vos addons. C'est ici que vous pouvez modifier des fonctionnalités, des skins, des sons, etc...

Pour des raisons de sécurité, Blizzard a tenu à séparer de ce répertoire tous les fichiers éditables par les addons (en enregistrant un profil par exemple). C'est pourquoi vous n'y trouverez pas les configurations liés à vos personnages qui sont hébergées par le WTF.

Les fichiers du "WTF"


A ne pas confondre avec le dossier Interface: Le WTF regroupes les "SavedVariables" de vos addons. En gros, ce sont les paramètres liés à vos profils.
En fonction de vos addons, les fichiers peuvent se trouver en amont de votre dossier WTF dans le fichier lié à votre compte, comme pour faire des passerelles. Sont concernés évidement les addons du type ACP dont la fonctionnalité permet de gérer globalement les addons, du type Arkinventory qui fait une passerelles entre vos différents personnages, ou encore, les addons qui agissent sur l'ensemble de vos personnages sans distinctions particulières tels que BadBoy, mais, d'une manière générale, c'est l'emplacement "normal" d'édition des addons.

En aval, Nom-du-serveur -> Personnage, se trouvent les configurations plus spécifiques. Par exemple, c'est là que sont stockés vos données temporaires tels que les enregistrement de votre kikimeter.

En gros, voici un schéma de la structure du dossier WTF:

Citation :
WTF
->config.wtf
->Account
------->[COMPTE]
------------->bindings-cache.wtf
------------->cache.md5
------------->SavedVariables.lua
------------->SavedVariables.lua.bak
------------->SavedVariables
--------------------->[Addon1.lua]
--------------------->[Addon1.lua.bak]
--------------------->[Addon2.lua]
--------------------->[Addon2.lua.bak]
------------>[ROYAUME]
--------------------->[Personnage]
---------------------------------->AddOns.txt
---------------------------------->bindings-cache.wtf
---------------------------------->camera-settings.txt
---------------------------------->chat-cache.txt
---------------------------------->layout-cache.txt
---------------------------------->SavedVariables.lua
---------------------------------->Saved Variables.lua.bak
---------------------------------->SavedVariables
------------------------------------------------->[Addon3.lua]
------------------------------------------------->[Addon3.lua.bak]
------------------------------------------------->[Addon4.lua]
------------------------------------------------->[Addon4.lua.bak]
Ah oui, j'oubliais, non, WTF ne signifie pas What the ... Flower ! Selon Wikipedia, c'est "un format de fichier utilisé pour de nombreux programmes (World Of Warcraft par exemple)." ce qui ne va pas nous avancer des masses à en comprendre sa signification, mais bon.
Autrement dit, l'utilité de ce dossier est avant tout de contenir un fichier.wtf que vous pouvez ouvrir avec votre notepad pour y voir les différentes configurations audio, video et camera (résolution, volumes sonores, porté de vision, densité des decors, etc...). Si vous souhaitez le modifier, je vous invite à aller voir les Cvar (WoWwiki) disponibles.

Comment fonctionne un Addon


Un addon n'est pas un exécutable ! L'exécution de ses fonctionnalités est gérée par WoW.


Il y a trois types "de bases" de fichiers qu'on retrouve dans les addons: les .toc, .xml et .lua. On peut aussi y trouver d'autres documents tels que des images, du son etc...


  • Le .toc est la table des matières (Table Of Contents) que WoW va utiliser pour identifier l'addon avec entre autre, le nom, l'auteur et la version de l'addon.
  • Le .xml permet de décrire l'apparence de l'UI. On peut par exemple y trouver mentionnées des composantes utilisées par l'addon.
    Dans certains cas le contenu amène directement à des fichiers .lua (localisations), dans d'autres, vous y trouverez la configuration de votre addon, de même que vous pouvez y trouver des images en .blp qu'on peut convertir avec des programmes spécifiques.
  • Le .lua est le fichier que vous serez peut-être amené à modifier. C'est un langage de programmation- de script- qui va principalement servir à définir les fonctionnalités de votre addon.
    A noter que vous avez souvent plusieurs fichiers .lua pour chacun des addons. Afin de déterminer le fichier que vous voulez éditer, il vous suffit souvent de le déterminer grâce au fichier .xml.


Apporter quelques retouches dans un Addon


Faire un Addon.

Faire un addon digne de ce nom, est quelque chose qui n'est pas à la porté de tous. Il est recommandé d'avoir des notions en programmation, et ce n'est pas dans ce wiki que ces notions pourront être explorées.
Cependant, en soi, le principe est assez simple pour faire une petite démonstration d'un "mini-addon" afin d'illustrer notre mécanique.

Il existe un logiciel qui permet d'encadrer cette expérience: AddonStuduo. Pratique pour ne pas se mélanger trop les pinceaux puisque son atout est d'encadrer notre travail, mais qui comporte quelques défauts. Si certains critiquent son manque d'optimisation, le plus pénible pour nous est surtout la désactivation du mode "Visual Designer" ( source ).

[si quelqu'un veut faire une petite démonstration]




Les librairies


Modifications des images


Afin qu'une image soit exportable dans le jeu, il faut qu'elle soit formaté en targa (.tga) et qu'elle respecte certaines règles qui sont énoncées dans les parties suivantes.

Les logiciels conseillés sont Photoshop (payant), ou Gimp (gratuit) pour convertir vos images en .tga (avec gestion couche alpha!). Si vous avez du mal, comme moi même, à utiliser un de ces logiciels, n'hésitez pas à travailler sur le logiciel de votre choix avant de les éditer par 'toshop ou Gimp.
Personnellement, j'utilise la version gratuite de PhotoFiltre pour cette étape préliminaire.
(Vous trouverez une démonstration à la fin de cette partie.)

Une texture


Pour qu'elles soient exportables, vos textures doivent répondre à une suite logique multiple par deux: 2, 4, 8, 16, 32, 64, 128, 256 et 512 pixels (largeur et hauteur).

Attention:
ça peut prêter à confusion; Il ne faut pas confondre, 40 x 80 ça ne passera pas!
-: "Gniiié?"
Chaque nombre de cette liste est une puissance de 2 à partir de 2, on parle de suite logique par multiple de 2, et non simplement des multiples de 2 . Ouais.. bon, la suite s'il vous plaît!


Dans le cas où vous chercheriez à utiliser une image .blp, wowprogramming vous propose un convertisseur en ligne BLP2PNG.


Une bordure


La taille d'une bordure doit être de 128 x 16 pixels, et ressembler à un cadre divisé en 4 partie.
En fait, cette image est composée de 8 carrés de 16x16:


  • coté gauche.
  • coté droit.
  • haut.
  • bas.
  • angle supérieur gauche.
  • angle supérieur droit.
  • angle inférieur gauche.
  • angle inférieur droit.


http://pmsc.free.fr/I01/10817131446.gif


Faire et importer une image: Exemple.



mon projet pour cet exemple va ressembler à ça:

1081742337.jpg

Oui, oui, vous avez vu juste, c'est un HUD .

Pour commencer, on ouvre notre projet au bon format. Ici notre image fait 128x256 et on se fait plaisir en restant vigilant à ne pas laisser des pixels sales.
Teinter de façon uniforme la zone que vous voulez cacher sous la transparence. Contrairement à ce qu'on peut penser, il n'est pas forcément heureux de la teinter dans une espèce de bleu clair qui risque surtout de mettre en valeur des défauts dans votre découpage.
La teinte idéale est une teinte qui va rester assez homogène avec la partie visible, ou la partie qui sera recouverte.
Une fois satisfait, il va falloir maintenant passer à la conversion:



  • Sélectionner la zone destinée à devenir transparente.
    Gardez "shift" pressé pour faire une sélection multiple. Vous pouvez déterminer la tolérance de votre "baguette magique" (=>"Outil de sélection contiguë") qui vous sert à sélectionner votre zone en déplaçant le curseur sur la barre de "seuil" plus bas dans la "Boîte à Outil".

    1081744003.png

    Puis, ouvrez un "Nouveau calque" comme dans l'image ci-dessus.

  • Copier depuis le visible votre calque (Zone de travail de droite, nommée "Calques")
    Puis allez dans "édition" afin d'effacer la sélection.
    Votre surface n'a pas disparue? Pas de panique, c'est normal car vous venez d'effacer la région concernée sur votre calque nommé "Visible". Cliquer sur l' "arrière plan" dans la sélection des calques et "supprimez (ce) calque":
    Magique, vous avez terminé !

  • Enregistrez votre image en .tga dans votre dossier cible et surtout, n'oubliez pas de décocher la "compression RLE".

    1081744846.png

    A noter qu'il faut que votre fichier soit enregistré en 32 bit.



Pour importer votre image, il ne reste plus qu'à savoir à quoi vous voulez l'associer. Dans le cas d'un Addon ArtWork (KgPanels) vous l'intégrerez en jeu. Dans la zone de saisie, il vous faudra entrer le chemin de l'image (la racine commence par "Interface\")avec le nom de l'image (il n'est pas nécessaire de préciser le format .tga).
Pour une intégration au sein d'un autre addon, vous pouvez modifier dans les fichiers de l'addon le nom de l'image ce que je déconseille, ou, remplacer l'image d'origine par la nouvelle. N'oubliez pas de sauvegarder l'ancienne ainsi que la nouvelle dans un dossier hors de WoW en sauvegarde.

Dans mon cas, je suis en train de "re-skiner" un HUD, ce qui implique que je vais réemployer mon image pour remplacer toutes celles de mon addon (barres mana/vie/cast etc...).
Il faut bien étudier la composition des différentes images qui entrent en jeu, et en comprendre leurs fonctions avant de se lancer. C'est pourquoi j'ai pris soin de travailler chacune de mes images à partir de la première afin que se passe correctement la gestion des barres de vie de mon personnage, de mon familier et de ma cible, ainsi que les barres d'énergie, et les skins élite/rare. Pour finaliser, il suffit juste de réajuster les différents textes et icônes aux nouvelles images.

N'oubliez pas de toujours sauvegarder chacune de vos étapes, aussi bien pour récupérer facilement les éléments initiaux que pour éviter de mauvaises surprises lors des prochaines MàJ.


Importer des sons


[à compléter]

Les fichiers audio sont au format .wav. Un format MP3 semble aussi importable si on se réfère à la notice de MSBT.

Modifier l'interface de base SANS addons.


Il est possible, du mois pour la beta, de modifier l'apparence de l'interface de base sans utiliser aucun addon. Pour ce faire on utilise des macros.

Pour enlever les dragons aux extrémités des barres d'actions :

Code:
/run MainMenuBarLeftEndCap:Hide()
/run MainMenuBarRightEndCap:Hide()
Fonctionne sur le live

Vendre les objets gris dans son inventaire.

Code:
/run local l; for b=0,4 do for s=0,GetContainerNumSlots(b) do l = GetContainerItemLink(b, s) if l and select(3, GetItemInfo(l)) == 0 then ChatFrame1:AddMessage("Auto-selling " .. l);ShowMerchantSellCursor(1)UseContainerItem(b, s) end end end
Ajouter les coordonnées à sa minimap.

Il y a 2 étapes.
Code:
/run local f=MinimapZoneText;if not TTF then TTF=CreateFrame("Frame")end;TTF:SetScript("OnUpdate",function(s) local x,y=GetPlayerMapPosition("player")f:SetFormattedText("%s... (%2.1f,%2.1f)", GetMinimapZoneText():sub(1,9), x*100,y*100) end);
/run MinimapZoneText:SetFontObject(GameTooltipTextSmall)
Montrer l'arbre de talent (quant on est en dessous du level 10)

Code:
/run LoadAddOn("Blizzard_TalentUI") PlayerTalentFrame:Show()
Déplacer son UF et celle de sa cible.

Code:
/run ComboFrame:SetParent("TargetFrame") PlayerFrame:SetScale(1.5) PlayerFrame:ClearAllPoints() PlayerFrame:SetPoint("TOPLEFT",270,-400) TargetFrame:SetScale(1.5) TargetFrame:ClearAllPoints() TargetFrame:SetPoint("LEFT","PlayerFrame","RIGHT")
Fonctionne sur le live

Cette macro place les UF vers le centre de l'écran.
Note : il est possible de modifier l'échelle. Pour ce faire changer le chiffre entre parenthèses après SetScale. De même qu'il est possible de placer les UF à un autre endroit. Pour se faire changer les valeurs 270 (X) et -400 (Y)

Ajouter les coordonnées du curseur de votre souris sur la worldmap.

Il y a 3 étapes.
Code:
/run local w=WorldMapPositioningGuide;if not CMO then CMO = w:CreateFontString("OVERLAY", nil, "GameFontHighlightSmall"); CMO:SetPoint("BOTTOM", f, "BOTTOM", 0, 11); CMO:SetText("Cursor: "); CMU = CreateFrame("Frame") end 
/run function GetCursorCoords() local f,x,y,l,t,w,h,s=WorldMapDetailFrame;x,y=GetCursorPosition();l,t=f:GetLeft(),f:GetTop();w,h=f:GetWidth(),f:GetHeight();s=f:GetEffectiveScale();x=(x/s-l)/w;y= (t-y/s)/h; return x,y end
/run CMU:SetScript("OnUpdate", function (self, elapsed) local x,y = GetCursorCoords(); CMO:SetFormattedText("Cursor: %2.2f, %2.2f", x*100, y*100) end)
Les macros "à plusieurs étapes" sont à lancer dans l'ordre. Cela est du à la limitation en taille des macro.

Et en cadeau bonus, une macro "tout-en-un" pour les montures.

Citation :
#showtooltip
/run VehicleExit()
/use [flyable,nomounted] Votre monture volante; [nomounted,noswimming]Votre monture terrestre
/cast [swimming] votre monture aquatique
/dismount
Fonctionne sur la beta

Source.

Précision, les macros modifiant l'UI de base sont intentionnellement bloquée pour la beta.

Mind you, this was an oversight on our part. We plan to disable the ability to replicate addon functionality through macros in the next beta build so we can ensure all feedback is strictly about the default interface.


Zarhym


Source

Faire des petits scripts qui permettent de faire une interface intéractive avec des boutons.


Cette section fonctionne sur le Live; et n'est absolument pas testée sur la béta.

Voici comment faire des petits boutons qui permettent de gérer l'affichage de vos "frames". Avec ça vous pourrez, par exemple, basculer entre une fenêtre de chat et un addon dans une de vos fenêtres. Il suffit d'utiliser les fonctions de base suivantes de l'API WoW :
- GetAlpha() ou IsVisible() permet de vérifier si une fenêtre est affichée
- SetAlpha() ou Hide() et Show() permet d'afficher/cacher une fenêtre
- SetFrameLevel()

Ces petites fonction permettent donc de gérer une de vos frame, mais pour ça il faut d'abord savoir accéder à la dite frame, il suffit donc de connaitre son nom. C'est plus dur qu'il n'y parrait mais la macro suivante :
/print GetMouseFocus():GetName()
Edit (26/05/23) : Il semble que la macro ne fonctionne plus. A la place, utilisez plutot celle-ci :
/run print( GetMouseFocus():GetName() )



permet d'afficher dans votre chat le nom de la frame que vous survolez. Bindez cette macro sur un raccourci, utilisez la en survolant la fenêtre que vous voulez pouvoir gérer, et le nom apparait!

Une fois le nom connu, il suffit d'utiliser les fonctions citées pour gérer la fenêtre, la syntaxe est la suivante :
Code:
Exemple:Hide();
Pour cacher la fenêtre exemple.

Maintenant si vous voulez créer un bouton qui masque/montre une fenêtre, il suffit de :
- créer un "bouton" sous forme d'une frame KgPanels comme expliqué plus haut
- trouver le nom des frames voulue associée
- renseigner le script qui doit être utilisé quand on clique cette frame, dans : VotreFrame/Script/OnClick sur les options de KgPanels avec le code adéquat

Voici un exemple de code qui va afficher/masquer une barre de Bartender4. Les programmateurs un tant soit peu habitués comprendront vite la syntaxe du langage, les autres peuvent se contenter de faire des copier/coller et de remplacer le nom des frame!
BT4Bar3 est donc le nom de la frame.

Version 1:
Code:
if pressed then
   if BT4Bar3:IsVisible() then
      BT4Bar3:Hide()
   else
      BT4Bar3:Show()
   end
elseif released then end
Version 2:
Code:
if pressed then
   if (BT4Bar3:GetAlpha()==1) then
      BT4Bar3:SetAlpha(0)
   else
      BT4Bar3:SetAlpha(1)
   end
elseif released then end
(les plus futés auront déjà remarqué que le if est dispensable dans cet exemple (indice: 1-0=1, 1-1=0 !), mais il peut être indispensable si on veut faire un truc plus évolué, donc je le laisse!)

La version 1 et la version 2 ont plus ou moins le même comportement. Je pense que la version 1 est préférable mais fais bug certaines fenêtres, par exemple si vous déconnectez avec une fenêtre de chat cachée, les options de cettes fenêtres seront écrasées. Si vous le faites avec une fenêtre de chat visible mais transparente (donc visuellement invisible), ça bug pas.

Un dernier détail dans cette section : quand on joue avec ça, deux soucis arrivent assez vite :
- des fenêtres se chevauchent et c'est pas la bonne qui est devant. Réglez ce problème en donnant une priorité élevée à la bonne fenêtre :
Code:
Myframe:SetFrameLevel(20);
- les fenêtres sont toutes ouvertes au démarrage. Pourrégler ça, écrivez un script qui cache les fenêtres voulues (en utilisant les fonctions citées plu haut. Ajoutez le au script précédent et vous obtiendrez un script d'initialistation qui peut avoir la tronche suivante :

Code:
Myframe:SetFrameLevel(20); MyFrame2:Hide(); MyFrame3:SetAlpha(0)
Enfin, pour que le script se lance au démarrage, j'utilise une méthode crade, si quelqu'un sait faire mieux, qu'il se dénonce! Remplissez donc le champ MyFrame/Script/OnLoad() avec le script d'initialisation.

Voilou, tout est dit!

Merci à Z0D qui m'a donné le script de base ces p'tits boutons et à Elen' qui m'a trouvé comment lancer les script à la connexion!
Dernières modifications :
(Voir) 26/5/2023 23:18:05 : CosmicDebris (Actualisation de la macro : GetName())
(Voir) (Comparer)24/8/2010 00:36:17 : ElTigroo (Ajout d'une section)
(Voir) (Comparer)23/8/2010 19:21:03 : Anguille (Précision sur les macros.)
Excellente suggestion, je vais rajouter cette partie ce week end

Merci !

[edit: Euh non, j'étais un peu optimiste, je n'aurai pas le temps ce week end. si quelqu'un veut s'en charger, sinon, je vois ce que je peux faire quand je vais avoir le temps]
Non pas essayé sur le live mais comme j'ai tout pompé sur un topic relatif à la beta cela devrait fonctionner normalement.

Par contre à ma prochaine connexion sur le serveur beta, je les testerai toutes et rajouterai la mention adéquate pour chaque macro.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés