diff --git a/Bindings.xml b/Bindings.xml new file mode 100644 index 0000000..12c6f4b --- /dev/null +++ b/Bindings.xml @@ -0,0 +1,29 @@ + + + Necrosis_UseItem("Soulstone"); + + + Necrosis_UseItem("Healthstone"); + + + Necrosis_UseItem("Spellstone", "Binding"); + + + Necrosis_UseItem("Firestone"); + + + Necrosis_UseItem("Mount"); + + + Necrosis_BuffCast(43); + + + Necrosis_BuffCast(9); + + + Necrosis_Toggle("LeftButton"); + + + Necrosis_CurseMenu("MiddleButton"); + + diff --git a/Changelog-de.txt b/Changelog-de.txt new file mode 100644 index 0000000..7022468 --- /dev/null +++ b/Changelog-de.txt @@ -0,0 +1,125 @@ +NECROSIS LdC +-------------------------------- + +Idee : Infernal (http://www.revolvus.com/games/interface/necrosis/) + +- Erste Übersetzung (in Französisch, was vom Original-Addon noch + nicht unterstützt war) und Verbesserungen : Tilienna Thorondor + +- Necrosis LdC Verfechter : Lomig & Nyx von Kael'Thas + +- Skins und Französische Stimmen : Eliah von Ner'zhul + +- Deutsche Version von Arne Meier (bis Version 1.3), + ab Version 1.3.1 von Hexenmeisterin Halisstra auf Lothar + +- Besonderen Dank an Sadyre- Kontakt : lomig@larmes-cenarius.net - nyx@larmes-cenarius.net + + +-------------------------------Changelog : ------------------------------- + +1.5.2a [Liadora]: Still haven't learn german... sorry for the english written changelog. + TOC updated to match 1.12 + Epic Steed bug corrected for the FR client. + Necrosis will now be working in duel since your adversary is no longer considered an ally. + + Middle-clicking the curse menu now try to recast the curse the same way it was clicked, + meaning that if you right-clicked Curse of Agony to amplify it, the recast will try to + amplify it also. + + Keybind for Banish, Life Tap and recasting curse (like above) added. + + + +1.5.2 Sorry, i don't speak a word of german, thus it will be an english version + TOC updated to match 1.11 + Demonic Sacrifice added. + Keybind for shadow-ward now available. + DE Localisation of Curse of Shadow corrected. + + Brand new Curse Menu! Curse Buttons behaviour is: + - Amplify-able curses may be cast amplified with a right click. + - If the target is friendly, an assist is done before casting. + - Without target, the curse buttons don't respond. + - Middle click cast the curse and make your pet attack if you have one. + + Soulshard sorting is now not activated by default, since some people got issues when + switching from different version. + + Sounds should be working fine since 1.11.1, since it was a bug coming from Blizzard. + +1.5.1 Korrigiert: Weiße Textur bei Teufelsbeherrschung + Fluch der Erschöpfung wurde hinzugefügt + Fluch verstärken wurde hinzugefügt + + Teufel-Seelensplitter werden nicht mehr als Seelensplitter angesehen + Graphische Timer werden nun mit der UI skaliert, wie es von Anfang an beabsichtigt war + + Interne Änderungen im Format der Datenbank + Neues Format der speech.lua + - Beschwörung: Jeder Satz darf nun auf mehreren Chat Zeilen erscheinen + - "Verbesserte Chance" : Es wird nicht mehr denselben Spruch zweimal hintereinander geben + - Neue Platzhalter hinzugefügt. + Innerhalb der Sprüche gelten nun folgende Abkürzungen: + Der Name des Warlocks wird durch ersetzt, + der Name des Pets durch und das Ziel eines Spruches durch + + Aderlass wurde hinzugefügt. Da es einer der meist genutzten Sprüche ist, muss man einfach die Necrosis + Spähre linksklicken um diesen zu aktivieren. + + Schattenschutz wurde hinzugefügt + + Die Option, Sprüche für Dämonen ein- / auszuschalten wurde korrigiert + Der Knopf für den Spruch verbannen wurde ans Ende der Zeile gesetzt, un er kann nun von 100% bis 200% skaliert werden + + Die normalen Ränge von "Unsichtbarkeit entdecken" und "Seelenstein erstellen" sind jetzt korrigiert ! + + +1.5 Timer wurden überarbeitet um weniger Lag zu erzeugen + Es wurden im Datenbankformat einige interne Veränderungen vorgenommen + Die englische und deutsche Lokalisierungen wurden verbessert + Das Aktivieren der Beschwörungssprüche wird den Character einen Text sagen lassen, + wenn man einen Dämon beschwört + WICHTIG: Aufgrund der Rückmeldungen die WOW gibt kann es dauern, bis Necrosis + den Namen des beschworenen Dämons bekommt. Dies kann bis zu + 10 Beschwörungen oder mehr dauern. + Der Befehl "/necro sm" wurde hinzugefügt: Aktiviert bzw deaktiviert kurze Nachrichten für + Seelensteine und beim Beschwören von anderen Spielern anstelle der Zufallstexte + Klickt man mit der rechten Maustaste um einen Dämon zu beschwören wird + Teufelsbeherrschung ausgeführt + Klickt man mit der mittleres Taste auf den Spruchmenü Button oder auf den + Dämonenmenü Button, wird der letzte gesprochene Spruch oder beschwörte Dämon + gesprochen bzw beschworen + Der Befehl "/necro cast coa" wurde hinzugefügt um den Fluch der Pein in + einem Macro mit einem Timer zu sprechen + Es wurde eine Script Funktion hinzugefügt, die das Erstellen von eigenen Timern + ermöglicht: + /script NecrosisTimer("Name des Timers", Dauer): + Der Timer wird mit dem derzeitigen Ziel verbunden + Ist kein Ziel ausgewählt, wird es ein genereller Timer + Ist man nich im Kampfmodus, kann der Name der Kreatur, die man mit dem Timer + verbindet, in der Timerliste verbleiben und nicht verschwinden. + Allerdings sollte er beim nächsten Kampf dann verschwinden. + Groß- / Kleinschreibung ist bei dem Befehl wichtig, Dauer wird in Sekunden + angegeben + +1.4.2 Ein Fehler bei den Timern wurde korrigiert + +1.4.1 Necrosis LdC ist nun kompatibel mit WoW 1.10 + +1.4 Kein Lag mehr, wenn man die Menüs öffnet + Graphische Timer + Verbannen Timer wurden korrigiert + Im Spruch Menü wurde "Dämonen spüren" hinzugefügt + +1.3.2 Verbannen Timer sollte nun funktionieren -- Aber man kann es nicht erkennen, + falls das Ziel zu früh entkommt. + Höllensteine und Dämonen-Statuetten werden nun korrekt gezählt + +1.3.1 Verschiedene Fehler verbessert (Wie fehlerhafte Timer, wenn man keinen Seelenstein verwendet) + Neues Einstellungs-Menü + Der Hexenmeister kann die Sphäre als Seelenstein-Timer nutzen +1.3 : Buff management Beschwörungs-, Verbannen- und Versklaven-Verwaltung Mana Verwaltung (inaktive Icons wenn nicht vorhanden) Veränderungen im Timer System : Timer sind nun über die Monster organisiert Fehler beim Tastenfestlegen behoben Fehler im englischen Teil von Necrosis behoben Geringe Fehler behoben1.2 : Es ist nun möglich die Buttons von Necrosis in der Größe zu ändern Es ist nun möglich das Skin von Necrosis zu ändern Die Anzeige der Seelensplitter in der Necrosis Sphäre kann nun deaktiviert werden Es gibt nun einen Timer für jeden Cooldown der Hexenmeistersprüche + Testweise wurde ein Timer für Instant Zaubern eingeführt1.1 : Ein Fehler wurde korrigiert der auftrat, wenn auf einem französischen Client + eine Höllenbestie beschworen wurde +1.0 : Erste stabile Version \ No newline at end of file diff --git a/Changelog-en.txt b/Changelog-en.txt new file mode 100644 index 0000000..908365f --- /dev/null +++ b/Changelog-en.txt @@ -0,0 +1,119 @@ +NECROSIS LdC +------------------------------- + +- Original Idea : Infernal (http://www.revolvus.com/games/interface/necrosis/) +- First translation (in French which was not supported by the original + mod) and improvements : Tilienna Thorondor +- Necrosis LdC maintainers : Lomig & Nyx from Kael'Thas + +- Skins and French voices : Eliah from Ner'zhul +- German Version by Arne Meier +- Special thanks to Sadyre + +- Contact : lomig@larmes-cenarius.net - nyx@larmes-cenarius.net + + +First of all, I apologize for my bad english, I will try to find someone +who can speak more fluently than me to improve my pieces of writing... + + +------------------------------- +Changelog : +------------------------------- + +1.5.2a TOC updated to match 1.12 + Epic Steed bug corrected for the FR client. + Necrosis will now be working in duel since your adversary is no longer considered an ally. + + Middle-clicking the curse menu now try to recast the curse the same way it was clicked, + meaning that if you right-clicked Curse of Agony to amplify it, the recast will try to + amplify it also. + + Keybind for Banish, Life Tap and recasting curse (like above) added. + +1.5.2 TOC updated to match 1.11 + Demonic Sacrifice added. + Keybind for shadow-ward now available. + + Some FR and DE localisation error were corrected. + + Brand new Curse Menu! Curse Buttons behaviour is: + - Amplify-able curses may be cast amplified with a right click. + - If the target is friendly, an assist is done before casting. + - Without target, the curse buttons don't respond. + - Middle click cast the curse and make your pet attack if you have one. + + Soulshard sorting is now not activated by default, since some people got issues when + switching from different version. + + Sounds should be working fine since 1.11.1, since it was a bug coming from Blizzard. + +1.5.1 Fix white skin with fel domination + Exhaustion Curse added + Amplify Curse added + + Fel Soulshards will no more be considered as Soulshards + Graphical Timers are now scaled with the UI, as firstly intented + + Internal changes in database format + New speech.lua format + - Every summoning sentences are now allowed on several chat-lines + - "Improved chance" : You will no longer have twice the same sentence on the bounce + - New tags added. Now, in you speeches, the warlock's name is replaced by , + then summoned demon by and the spell target by + + Life Tap added. As one of the most used spell, you just have to left click on the necrosis sphere + Shadow Ward added + + The option to turn on/off the speeches for demons is now fixed + Banish button is now at the end of the line, and you can now set its scale from 100 % to 200 % + + Detect Invisibility and Create Stones (normal ranks) are now fixed ! + +1.5 : Timers reworked --> Less lag + Internal changes in database format + English and German localisation improved + + Activating summon speech will now make you talk when you summon demons + Adding a "/necro sm" command to activate short messages while soulstoning and player summoning + Right click on a demon cast Fel Domination + Middle click on buff or demon menu will cast last buff or summon last demon + Adding a "/necro cast coa" command to cast a Curse of Agony in a macro with a timer + Adding a script function to add personalized timers + /script NecrosisTimer("Name of the timer", durration); let a timer be associated with your current target + If you do not have any target, it will be a general timer + When you are not in fight mode, The name of the mob you put your timer on may keep showing on the screen + It will disappear next fight. + +1.4.2 Timer bug fixed + +1.4.1 WoW 1.10 Compatibility + +1.4 No more lag when opening menus + Graphical Timers + Banish timers are now correct + Add Sense Demons in the Spell Menu + +1.3.2 Banish timer is now fixed -- But can't see if the target escape too soon + Infernal and Demoniac stones count is now fixed + +1.3.1 Various bugs fixed (As hazardous timers when you do not use a soulstone) + New Setting Menu + Let the warlock use the sphere as Soulstone timer + +1.3 : Buff management + Summoning, banish and enslave management + Mana management (inactive icons if unvailable) + Changes in the timers system : Timers are now organized by mobs + Bugs in binding keys removed + Bugs with using english part of Necrosis removed + Minor bugs removed + +1.2 : Changing size of the Necrosis buttons is now possible + It is now possible to change Necrosis' Skin + You can now hide the shard count in the Necrosis Sphere + There is now a timer for ALL warlock spell cooldowns + Timer for insta-cast (TEST) + +1.1 : Fix a bug about summoning an Inferno on French Client +1.0 : First stable version \ No newline at end of file diff --git a/Changelog-fr.txt b/Changelog-fr.txt new file mode 100644 index 0000000..2f0b35a --- /dev/null +++ b/Changelog-fr.txt @@ -0,0 +1,133 @@ + Necrosis LdC +------------------------------- + +- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +- Implémentation de base (FR) : Tilienna Thorondor +- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas + +- Skins et voix Françaises : Eliah, Ner'zhul +- Version Allemande par Arne Meier +- Remerciements spéciaux pour Sadyre (JoL) + +- Contact : lomig@larmes-cenarius.net - nyx@larmes-cenarius.net + + + +------------------------------- +Changelog : +------------------------------- + +1.5.2a Mise à jour de la TOC pour la 1.12 + Correction du bug de la monture épique pour les clients FR. + Correction des bugs en duel. Désormais, vous pouvez utilisez une pierre de soin et lancer + vos malédictions correctement sans que votre adversaire soit considéré comme un allié. + + Changement du comportement du clique-milieu sur le menu des malédictions. Désormais, la + la malédiction précedente est relancée mais surtout dans les mêmes conditions de clic. + (c'est à dire que si vous aviez lancé agonie en améliorer, cela retentera de le faire.) + + Ajout de trois raccourçis clavier: Bannissement, Connexion et recast de la dernière + lancée, exactement comme un clique-milieu sur le menu des malédictions. Cela permet de + démarrer un combat en lançant la malédiction voulue avec nécrosis, et de poursuivre le + combat en appuyant sur une touche pour les cast suivants. + +1.5.2 Mise à jour de la TOC pour la 1.11 + Correction de petites erreurs de localisation en FR et DE qui empêchait d'acceder à certains + sorts, comme le gardien de l'ombre en FR ou la malédiction d'ombre en DE. + Re-correction fr d'un bug qui empêchait le timer des démons asservis de se déclencher. + Peut-être que ce coup-ci ce foutu débuff va arrêter de changer de nom. + + Ajout du Sacrifice démoniaque dans le menu des démons. (Vous le vouliez, vous l'avez.) + Ajout d'un raccourçi clavier configurable via le menu ad-hoc pour le gardien de l'ombre. + + Ajout d'un menu de malédiction! Le comportement des boutons de malédictions est le suivant: + - Les malédictions amplifiables peuvent l'être en cliquant droit. + - Si la cible est allié, un assist est lancé avant de le cast. + - S'il n'y a pas de cible, les boutons ne répondent pas. + - En cas de clic avec le bouton du milieu, si un pet est présent il attaque en même temps + que le cast. + + Désactivation dans la configuration par défaut du tri de fragment d'âme. Certaines personnes + ont eu des soucis lors des changements de version. + + Les sons doivent remarcher correctement depuis la mise à jour 1.11.1. En effet, le bug était + du côté de Blizzard. + +1.5.1 Correction fr d'un bug de rangement des fragments avec les sacs à fragments bleus et violets + Correction fr d'un bug qui empêchait le timer des démons asservis de se déclencher + Correction de la skin du bouton de domination corrompue + Ajout de la malédiction de fatigue (je l'avais oubliée ! :D) + Ajout de la malédiction amplifiée (Oubliée aussi :D) + + Correction du bug entre Necrosis et les fragments d'âme corrompus de Felwood. + Correction du bug des timers graphiques qui ne respectaient pas l'échelle de l'interface + + Changement interne dans la base de données + Correction fr de la tooltip d'Asservir Démon + Correction d'orthographe dans le speech.lua (fr) + Changement du format du fichier speech.lua + - Les phrases d'invocations sont maintenant toutes multilignes + - "Hasard amélioré" : Il n'est plus possible d'avoir deux fois à suivre la même phrase + d'invocation ou de pierre de rez :) + - Ajout de tags simples à comprendre pour créer ses propres messages : Le nom du joueur + est remplacé par , du pet invoqué par et de la cible du sort par + + Ajout de connexion dans les sorts utilisés : Etant le sort le plus employé par les démos + qui se respectent, c'est un clic gauche sur la sphere qui le déclenche ! + Ajout du sort de protection contre les ombres + + Case à cocher des messages d'invocation des démons réparée + Le bouton Banish est maintenant en fin de ligne pour l'utiliser plus rapidement, et on peut + modifier sa taille du simple au double pour plus de visibilité + + ENFIN (logiquement) j'ai réparé la détection des sorts de création de pierre et de détection + de l'invisibilité + +1.5 : Retravail total des timers pour moins de lag + Changements internes dans la manière de gérer les données + Amélioration des localisations anglaises et allemandes + + L'activation des messages d'invocation vous fait parler aussi pour l'invocation des démons + Ajout de la commande /sm pour avoir des message de pierre d'âme et de tp non envahissants + Un clic droit sur un démon lance la domination corrompue si disponible + Un clic du milieu sur le menu des sorts ou celui des démons lance le dernier sort/démon castés + Ajout de la commande /necro cast coa qui permet de caster une malé d'agonie dans une macro avec un timer + Ajout d'une fonction de script permettant la création de timers personnalisés + /script NecrosisTimer("Nom donné au timer", durée); permet d'associer un timer à la cible en court + Si il n'y a pas de cible, le timer est un timer général + Hors Combat, quand on donne un timer à une cible, le nom de la cible du timer ne disparait pas : + Il disparaitra au prochain combat :) + +1.4.2 Correction d'un bug envahissant sur les timers + +1.4.1 Compatibilité 1.10 + +1.4 : Correction du lag à l'ouverture des menus + Timers représentés sous forme graphique + Les banissements sont maintenant bien timés + Ajout du radar à démons dans le menu + +1.3.2 Correction du timer de banissement -- Pas encore de gestion des libération de ban + Correction du comptage incorrect des pierres infernales et démoniaques + +1.3.1 Correction de bugs divers (timers fonctionnent meme si on ne pose pas de soulstone...) + Nouveau menu de configuration + Permet l'utilisation de la sphere comme timer de rez + +1.3 : Gestion des buffs + Gestion des invocations, des asservissements et des banissements + Gestion de la mana (icones grisées / inactives en cas d'impossibilité) + Modification du système de timers : Les timers sont maintenant classés par + mobs ! + Correction des bugs de touches de raccourci + Correction des bugs de passage des textes en VO + Correction de bugs mineurs + +1.2 : Réglage possible de la taille des boutons de necrosis + Changement possible de skin pour Necrosis + Possibilité de cacher le nombre de fragment dans la sphère + Timing de tous les cooldown de sorts démonistes + Timing de sorts instants + +1.1 : Correction d'un bug pour l'invocation de l'infernal en Français +1.0 : Première version stable diff --git a/Liesmich.txt b/Liesmich.txt new file mode 100644 index 0000000..a87ae11 --- /dev/null +++ b/Liesmich.txt @@ -0,0 +1,119 @@ +NECROSIS LdC +------------------------------- + +- Idee : Infernal (http://www.revolvus.com/games/interface/necrosis/) +- Erste Übersetzung (in Französisch, was vom Original-Addon noch + nicht unterstützt war) und Verbesserungen : Tilienna Thorondor +- Necrosis LdC Verfechter : Lomig & Nyx von Kael'Thas + +- Skins und Französische Stimmen : Eliah von Ner'zhul +- Deutsche Version von Arne Meier (bis Version 1.3), + ab Version 1.3.1 von Hexenmeisterin Halisstra auf Lothar + +- Besonderen Dank an Sadyre + +- Kontakt : lomig@larmes-cenarius.net - nyx@larmes-cenarius.net + + +------------------------------- +1 - Was ist Necrosis ? +------------------------------- + +Necrosis ist ein Addon, welches Hexenmeister bei der Nutzung von ihren +Steinen, Splittern und Dämonen unterstüzen soll. Nicht mehr, aber auch +nicht weniger... Es kann bisher keinen Kaffee machen, aber ich habe es +wirklich versucht! + +-------------------------------------- +2 - Warum sollte ich Necrosis nutzen? +-------------------------------------- + +Weil es einfach fantastisch ist! Es ist wirklich toll, dank ihm bist du +nicht gewzungen tausend an Knöpfen überall auf dem Bildschirm zu haben, +deine Freunde sind glücklich zu wissen, dass sie von einem Seelenstein +beschützt sind und sie werden dir danken, wenn es ihnen sagt, wie sie einen +Mitspieler zu beschwören haben... Fantastisch, wie gesagt! + +------------------------------- +3 - Wie funktioniert es ? +------------------------------- + +Es ist wirklich einfach. Meine Oma könnte es machen. Okay, meine Oma hat +niemals versucht Online Spiele zu spielen. Sie dachte, dass Computer +teuflische Maschinen sind, die Tod und Verderben bringen. Es ist eine Schande, +dass man selber nicht so beschränkt ist. Naja, irgendwie so... + +Wie funktionert es nun? Hmm... + +Necrosis bietet eine Sphere und 7 Knöpfe. +Rechtsklicke auf die Sphere und du siehst das Konfigurationsmenü. + +- Auf der Sphere, wird die Anzahl der Seelensplitter, die du besitzt angezeigt +- Ein Knopf um einen Feuerstein herzustellen / anzulegen +- Ein Knopf um einen Zauberstein herzustellen / zu benutzen / anzulegen + Rechtsklicke um ihn herzustellen oder anzulegen + Linksklicke um ihn herzustellen oder zu benutzen +- Ein Knopf um einen Gesundheitsstein herzustellen / zu benutzen / wegzugeben + Mit keinem Ziel, NPC, Monster oder Gegner : Benutze den Stein + Mit einem freundlichen Ziel : Gebe ihm den Stein +- Ein Knopf um einen Seelenstein herzustellen / zu benutzen + Benutze während du einen freundlichen Spieler im Ziel hast : Wende den + Stein auf ihn an. + Benutze während du wen anderes im Ziel hast : Benutze den Stein auf dich. + Glücklicherweise wirst du nicht in der Lage sein einen Stein zu benutzen, + wenn Du volles Leben hast... Und wenn du dennoch Spieler, die bei + vollen Kräften sind heilen willst, kannst du versuchen stattdessen + ein Paladin zu werden ! +- Ein Knopf um dein Mount zu beschwören +- Ein Knopf um dir das Dämonen-Menü anzuzeigen, von dem du in der Lage bist deine + Dämonen zu beschwören. +- Ein Knopf für Spruchtimer + Spruchtimer werden rechts von diesem Knopf erscheinen. + Rechtsklicke auf den Knopf um deinen Ruhestein zu nutzen. + +------------------------------- +4 - Weitere Funktionalitäten +------------------------------- + +Du kannst deine Necrosis Sphere hinziehen wohin immer du willst. +Du kannst deine Necrosis Knöpfe hinziehen wohin immer du willst. + +Wenn du ausloggst, während du einen Stein in deiner Nebenhand hälst und du +nach mehr als 30 Minuten später wieder einloggst, wenn deine Steine verschwunden +sind, wird dein erstes Seelengebundenes Nebenhand-Item in deinen Taschen wieder +angelegt. + +Wenn du einen Spieler beschwörst, wird Necrosis einen Satz aussuchen um deine +Freunde nach ihrer Hilfe zu fragen. Ich sagte "aussuchen" weil es mehrere +verschiedene Sätze gibt, von denen einer zufällig ausgewählt wird. + +Wenn du einen Seelenstein auf einen Freund über den Necrosisknopf anwendest, +wird Necrosis auch hier einen zufälligen Spruch wählen, um dies mitzuteilen. + +Diese Sätze stehen in der "Speech.lua" Datei, du kannst Sätze +verändern/hinzufügen/entfernen wie du möchtest. + +Die meisten deiner Sprüche mit Cooldown werden im Spruch Timer angezeigt... Die +meisten, aber nicht alle ! Es ist wirklich schwer Spontanzauber Sprüche richtig +zu timen... Nun versuch es selber, dann verstehst du mich. + +------------------------------- +5 - Hilfe gebraucht +------------------------------- + +Ich kann Englisch sehr gut lesen, aber selber sprechen oder schreiben ist eine +Qual. Weder dieser Text, noch meine "in game" Sätze sind Oxford Englisch. Wenn +du möchtest, dass ich Vokabeln / Aussprache / Grammatik ändern soll, schreib +mir eine mail! + +Bitte versuche nicht mein Französisch zu korrigeren, ich wäre beleidigt :P + +Wenn du einen Fehler im Addon findest, kannst du mir eine Mail schreiben, in +der du den Fehler ausführlich erklärst, wann der Fehler auftritt und mir die +vollständige (und lückenlose) (und wirklich komplette) Fehler Nachricht gibst. + +------------------------------- +6 - Verbesserungen +------------------------------- +Wenn du denkst einige Funktionen sind total bescheuert oder irgendwelchen total +genialen Kram hinzufügst und denkst jeder würde es lieben, schreibe eine Mail! diff --git a/Lisezmoi.txt b/Lisezmoi.txt new file mode 100644 index 0000000..70b18ff --- /dev/null +++ b/Lisezmoi.txt @@ -0,0 +1,114 @@ + Necrosis LdC +------------------------------- + +- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +- Implémentation de base (FR) : Tilienna Thorondor +- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas + +- Skins et voix Françaises : Eliah, Ner'zhul +- Version Allemande par Arne Meier +- Remerciements spéciaux pour Sadyre (JoL) + +- Contact : lomig@larmes-cenarius.net - nyx@larmes-cenarius.net + + + + +------------------------------- +1 - Qu'est-ce que Necrosis ? +------------------------------- + +Necrosis est un mod qui aide les Démonistes à gérer leurs pierres, fragments, +et démons. Ni plus, ni moins. Bon, ça ne fait pas encore le café, mais j'ai +pourtant essayé, promis ! + +------------------------------- +2 - Pourquoi utiliser Necrosis ? +------------------------------- + +Parce que ce mod est génial ! C'est joli tout plein, grace à lui vous ne serez +plus obligé d'avoir 150.000 boutons autour de votre écran, vos amis seront +contents d'apprendre que vous leur avez mis une pierre d'âme, et ils vous +remercieront de leur expliquer comment fonctionne une invocation de joueur... +Génial, je vous le disais ! + +------------------------------- +3 - Comment ça marche ? +------------------------------- + +En fait, c'est simplissime. Même ma grand mère peut le faire. Bon, bien sûr, ma +grand mère n'a jamais eu l'intention de jouer à des jeux en ligne. Elle pensait +que les ordinateurs étaient des machines du Diable qui apportaient la mort et la +désolation. Si c'est pas honteux une telle étroitesse d'esprit ! Enfin bref ... + + +Comment ça marche ? Mmmm.... + + +Necrosis vous fourni une sphère et 7 boutons. +Un clic droit sur la sphère vous permet d'avoir le menu de configuration + +- Sur la sphère est affiché le nombre de fragments en votre possession +- Un bouton pour créer / équiper une pierre de feu +- Un bouton pour créer / équiper / utiliser une pierre de sort + Clic droit pour créer ou équiper + Clic gauche pour créer ou utiliser +- Un bouton pour créer / utiliser / donner une pierre de soins + Sans cible, en ciblant un ennemi ou un PnJ : Utilise la pierre + En ciblant un joueur allié : Donne la pierre + Si une fenêtre d'échange est ouverte : Y met la pierre et valide l'échange + Astucieusement, il vous sera impossible d'utiliser la pierre si vous + êtes en pleine santé... Et si le heal de personne en forme vous + intéresse, faites donc un paladin ! +- Un bouton pour créer / utiliser une pierre d'âme + En ciblant un joueur allié : Lui pose la pierre + En ciblant autre chose : Pose la sphère sur vous +- Un bouton pour invoquer votre monture +- Un bouton pour ouvrir le menu d'invocation des démons, avec vos démons, + le sorts de Domination corrompue... +- Un bouton pour le timer des sorts + Indique l'emplacement des timers (à droite du bouton) + Un clic droit sur le bouton utilise votre pierre de foyer + +------------------------------- +4 - Plus de fonctionnalités +------------------------------- + +La sphère de Nécrosis est déplaçable où bon vous semble +Tous les boutons de Necrosis sont déplaçables où bon vous semble + +Quand vous vous déconnectez avec une pierre équipée en main gauche et que vous +vous reconnectez plus de 30 minutes plus tard, comme vos pierres ont disparu, +Necrosis rééquipe le premier objet main-gauche lié qu'il trouve dans vos sacs. + +Quand vous invoquez un autre joueur, Necrosis choisit au hasard une phrase pour +prévenir vos amis de qui vous invoquez. + +Quand vous posez une pierre d'âme sur un ami à l'aide du bouton de Necrosis, il +choisit au hasard une phrase pour prévenir vos amis... + +Ces phrases sont contenues dansr le fichier "Speech.lua", vous pouvez modifier/ +ajouter/enlever autant de phrase que vous le souhaitez + + + +La plupart de vos sorts à cooldown affichent un timer dans Necrosis La plupart, +pas tous ! J'y travaille, mais inscrire la durée d'un sort instantané est assez +ardu... + +------------------------------- +5 - Vous pouvez nous aider +------------------------------- + +Ce mod bug ? Envoyez-moi une description de ce que vous faisiez, et le message +d'erreur exact affiché. On a tellement testé ce mod qu'un gros bug me semble +évité, mais on est jamais à l'abris ! Au pire, sur les forums officiels ou +sur JoL, vous trouverez un topic sur Necrosis :) + +------------------------------- +6 - Améliorations +------------------------------- + +Si vous trouvez que certaines fonctions sont nulles, et vous voulez rajouter/ avez +rajouté un truc super génial... Et si vous voulez en faire profiter les gens, +n'hésitez pas à nous écrire ! diff --git a/Localization-dialog-de.lua b/Localization-dialog-de.lua new file mode 100644 index 0000000..3143b79 --- /dev/null +++ b/Localization-dialog-de.lua @@ -0,0 +1,305 @@ +------------------------------------------------------------------------------------------------------ +-- Necrosis LdC +-- +-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +-- Implémentation de base (FR) : Tilienna Thorondor +-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas +-- +-- Skins et voix Françaises : Eliah, Ner'zhul +-- Version Allemande par Arne Meier et Halisstra, Lothar +-- Remerciements spéciaux pour Sadyre (JoL) +-- Version 11.05.2006-1 +------------------------------------------------------------------------------------------------------ + + +------------------------------------------------ +-- GERMAN VERSION TEXTS -- +------------------------------------------------ + +function Necrosis_Localization_Dialog_De() + + function NecrosisLocalization() + Necrosis_Localization_Speech_De(); + end + + NECROSIS_COOLDOWN = { + ["Spellstone"] = "Zauberstein Cooldown", + ["Healthstone"] = "Gesundheitsstein Cooldown" + }; + + NecrosisTooltipData = { + ["Main"] = { + Label = "|c00FFFFFFNecrosis|r", + Stone = { + [true] = "Ja"; + [false] = "Nein"; + }, + Hellspawn = { + [true] = "An"; + [false] = "Aus"; + }, + ["Soulshard"] = "Seelensplitter : ", + ["InfernalStone"] = "H\195\182llensteine : ", + ["DemoniacStone"] = "D\195\164monen-Statuetten : ", + ["Soulstone"] = "\nSeelenstein : ", + ["Healthstone"] = "Gesundheitsstein : ", + ["Spellstone"] = "Zauberstein: ", + ["Firestone"] = "Feuerstein : ", + ["CurrentDemon"] = "D\195\164mon : ", + ["EnslavedDemon"] = "D\195\164mon : Versklavter", + ["NoCurrentDemon"] = "D\195\164mon : Keiner", + }, + ["Soulstone"] = { + Label = "|c00FF99FFSeelenstein|r", + Text = {"Erstelle","Verwende","Benutzt","Warten"} + }, + ["Healthstone"] = { + Label = "|c0066FF33Gesundheitsstein|r", + Text = {"Erstelle","Verwende"} + }, + ["Spellstone"] = { + Label = "|c0099CCFFZauberstein|r", + Text = {"Erstelle","Im Inventar","In der Hand gehalten"} + }, + ["Firestone"] = { + Label = "|c00FF4444Feuerstein|r", + Text = {"Erstelle","Im Inventar","In der Hand gehalten"} + }, + ["SpellTimer"] = { + Label = "|c00FFFFFFSpruchdauer|r", + Text = "Aktive Spr\195\188che auf dem Ziel\n", + Right = "Rechtsklick f\195\188r Ruhestein nach " + }, + ["ShadowTrance"] = { + Label = "|c00FFFFFFSchatten Trance|r" + }, + ["Domination"] = { + Label = "|c00FFFFFFTeufelsbeherrschung|r" + }, + ["Enslave"] = { + Label = "|c00FFFFFFVersklavt|r" + }, + ["Armor"] = { + Label = "|c00FFFFFFD\195\164monenr\195\188stung|r" + }, + ["Invisible"] = { + Label = "|c00FFFFFFEntdecke Unsichtbarkeit|r" + }, + ["Aqua"] = { + Label = "|c00FFFFFFUnendlicher Atem|r" + }, + ["Kilrogg"] = { + Label = "|c00FFFFFFAuge von Kilrogg|r" + }, + ["Banish"] = { + Label = "|c00FFFFFFVerbannen|r" + }, + ["TP"] = { + Label = "|c00FFFFFFRitual der Beschw\195\182rung|r" + }, + ["SoulLink"] = { + Label = "|c00FFFFFFSeelenverbindung|r" + }, + ["ShadowProtection"] = { + Label = "|c00FFFFFFSchattenzauberschutz|r" + }, + ["Imp"] = { + Label = "|c00FFFFFFWichtel|r" + }, + ["Void"] = { + Label = "|c00FFFFFFLeerwandler|r" + }, + ["Succubus"] = { + Label = "|c00FFFFFFSukkubus|r" + }, + ["Fel"] = { + Label = "|c00FFFFFFTeufelsj\195\164ger|r" + }, + ["Infernal"] = { + Label = "|c00FFFFFFH\195\182llenbestie|r" + }, + ["Doomguard"] = { + Label = "|c00FFFFFFVerdammniswache|r" + }, + ["Sacrifice"] = { + Label = "|c00FFFFFFD\195\164monenopferung|r" + }, + ["Amplify"] = { + Label = "|c00FFFFFFFluch verst\195\164rken|r" + }, + ["Weakness"] = { + Label = "|c00FFFFFFFluch der Schw\195\164che|r" + }, + ["Agony"] = { + Label = "|c00FFFFFFFluch der Pein|r" + }, + ["Reckless"] = { + Label = "|c00FFFFFFFluch der Tollk\195\188hnheit|r" + }, + ["Tongues"] = { + Label = "|c00FFFFFFFluch der Sprachen|r" + }, + ["Exhaust"] = { + Label = "|c00FFFFFFFluch der Ersch\195\182pfung|r" + }, + ["Elements"] = { + Label = "|c00FFFFFFFluch der Elemente|r" + }, + ["Shadow"] = { + Label = "|c00FFFFFFFluch der Schatten|r" + }, + ["Doom"] = { + Label = "|c00FFFFFFFluch der Verdammnis|r" + }, + ["Mount"] = { + Label = "|c00FFFFFFMount|r" + }, + ["Buff"] = { + Label = "|c00FFFFFFSpruch Men\195\188|r\nRechtsklick um das Men\195\188 zu \195\182ffnen" + }, + ["Pet"] = { + Label = "|c00FFFFFFD\195\164monen Men\195\188|r\nRechtsklick um das Men\195\188 zu \195\182ffnen" + }, + ["Curse"] = { + Label = "|c00FFFFFFFluch Men\195\188|r\nRechtsklick um das Men\195\188 zu \195\182ffnen" + }, + ["Radar"] = { + Label = "|c00FFFFFFD\195\164monen sp\195\188ren|r" + }, + ["AmplifyCooldown"] = "Mit der rechten Taste klicken f\195\188r verstärken", + ["DominationCooldown"] = "Mit der rechten Taste klicken f\195\188r eine schnelle Beschw\195\182rung", + ["LastSpell"] = "Mittlere Taste klicken f\195\188r ", + }; + + + NECROSIS_SOUND = { + ["Fear"] = "Interface\\AddOns\\Necrosis\\sounds\\Fear-En.mp3", + ["SoulstoneEnd"] = "Interface\\AddOns\\Necrosis\\sounds\\SoulstoneEnd-En.mp3", + ["EnslaveEnd"] = "Interface\\AddOns\\Necrosis\\sounds\\EnslaveDemonEnd-En.mp3", + ["ShadowTrance"] = "Interface\\AddOns\\Necrosis\\sounds\\ShadowTrance-En.mp3" + }; + + + NECROSIS_NIGHTFALL_TEXT = { + ["NoBoltSpell"] = "Du hast scheinbar keinen Schattenblitz Zauber.", + ["Message"] = "Schattentrance" + }; + + + NECROSIS_MESSAGE = { + ["Error"] = { + ["InfernalStoneNotPresent"] = "Du ben\195\182tigst einen H\195\182llenstein daf\195\188r !", + ["SoulShardNotPresent"] = "Du ben\195\182tigst einen Seelensplitter daf\195\188r !", + ["DemoniacStoneNotPresent"] = "Du ben\195\182tigst eine D\195\164monen-Statuette daf\195\188r !", + ["NoRiding"] = "Du hast kein Mount zum reiten !", + ["NoFireStoneSpell"] = "Du hast keinen Zauber um Feuersteine zu erstellen", + ["NoSpellStoneSpell"] = "Du hast keinen Zauber um Zaubersteine zu erstellen", + ["NoHealthStoneSpell"] = "Du hast keinen Zauber um Gesundheitssteine zu erstellen", + ["NoSoulStoneSpell"] = "Du hast keinen Zauber um Seelensteine zu erstellen", + ["FullHealth"] = "Du kannst deinen Gesundheitsstein nicht benutzen, du hast bereits volles Leben", + ["BagAlreadySelect"] = "Fehler : Diese Tasche ist bereits ausgew\195\164hlt.", + ["WrongBag"] = "Fehler : Die Zahl muss zwischen 0 und 4 sein.", + ["BagIsNumber"] = "Fehler : Bitte gib eine Zahl an.", + ["NoHearthStone"] = "Fehler : Du hast keinen Ruhestein im Inventar" + }, + ["Bag"] = { + ["FullPrefix"] = "Dein ", + ["FullSuffix"] = " ist voll !", + ["FullDestroySuffix"] = " ist voll; folgende Seelensplitter werden zerst\195\182rt !", + ["SelectedPrefix"] = "Du hast deinen ", + ["SelectedSuffix"] = " f\195\188r deine Seelensplitter gew\195\164hlt." + }, + ["Interface"] = { + ["Welcome"] = "/necro f\195\188r das Einstellungsmen\195\188.", + ["TooltipOn"] = "Tooltips an" , + ["TooltipOff"] = "Tooltips aus", + ["MessageOn"] = "Chat Nachrichten an", + ["MessageOff"] = "Chat Nachrichten aus", + ["MessagePosition"] = "<- Hier werden Nachrichten von Necrosis erscheinen ->", + ["DefaultConfig"] = "Standard-Einstellungen geladen.", + ["UserConfig"] = "Einstellungen geladen." + }, + ["Help"] = { + "/necro recall -- Zentriere Necrosis und alle Buttons in der Mitte des Bildschirms", + "/necro sm -- Ersetze Seelenstein- und Beschw\195\182rungs-Zufallsnachrichten durch eine kurze, raidgeeignete Version" + }, + ["EquipMessage"] = "Ausr\195\188ste ", + ["SwitchMessage"] = " anstelle von ", + ["Information"] = { + ["FearProtect"] = "Dein Ziel hat Fear-Protection!!!", + ["EnslaveBreak"] = "Dein D\195\164mon hat seine Ketten gebrochen...", + ["SoulstoneEnd"] = "Dein Seelenstein ist ausgelaufen." + } + }; + + + -- Gestion XML - Menu de configuration + + NECROSIS_COLOR_TOOLTIP = { + ["Purple"] = "Lila", + ["Blue"] = "Blau", + ["Pink"] = "Pink", + ["Orange"] = "Orange", + ["Turquoise"] = "T\195\188rkis", + ["X"] = "X" + }; + + NECROSIS_CONFIGURATION = { + ["Menu1"] = "Splitter Einstellungen", + ["Menu2"] = "Nachrichten Einstellungen", + ["Menu3"] = "Buttons Einstellungen", + ["Menu4"] = "Timer Einstellungen", + ["Menu5"] = "Graphische Einstellungen", + ["MainRotation"] = "Necrosis Rotiationseinstellung", + ["ShardMenu"] = "|CFFB700B7I|CFFFF00FFn|CFFFF50FFv|CFFFF99FFe|CFFFFC4FFn|CFFFF99FFt|CFFFF50FFa|CFFFF00FFr :", + ["ShardMenu2"] = "|CFFB700B7S|CFFFF00FFp|CFFFF50FFl|CFFFF99FFi|CFFFFC4FFtt|CFFFF99FFe|CFFFF50FFr :", + ["ShardMove"] = "Lege die Seelensplitter in die ausgew\195\164hlte Tasche.", + ["ShardDestroy"] = "Zerst\195\182re neue Seelensplitter, wenn die Tasche voll ist.", + ["SpellMenu1"] = "|CFFB700B7Z|CFFFF00FFa|CFFFF50FFu|CFFFFC4FFb|CFFFF99FFe|CFFFF50FFr :", + ["SpellMenu2"] = "|CFFB700B7S|CFFFF00FFp|CFFFF50FFi|CFFFF99FFe|CFFFFC4FFl|CFFFF99FFe|CFFFF50FFr :", + ["TimerMenu"] = "|CFFB700B7G|CFFFF00FFr|CFFFF50FFa|CFFFF99FFp|CFFFFC4FFh|CFFFF99FFi|CFFFF50FFs|CFFFF00FFc|CFFB700B7he T|CFFFF00FFi|CFFFF50FFm|CFFFF99FFe|CFFFF00FFr :", + ["TranseWarning"] = "Warnung, wenn Schattentrance eintritt", + ["SpellTime"] = "Spruchdauer anzeigen", + ["AntiFearWarning"] = "Warnung, wenn Ziel immun gegen\195\188ber Fear", + ["TranceButtonView"] = "Zeige versteckte Buttons um sie zu verschieben", + ["GraphicalTimer"] = "Verwende graphische Timer anstelle von Texttimern", + ["TimerColor"] = "Zeige wei\195\159en Text in Timern anstelle von gelbem Text", + ["TimerDirection"] = "Neue Timer oberhalb der bestehenden Timer anzeigen", + ["ButtonLock"] = "Sperre die Buttons um die Necrosis Sph\195\164re", + ["MainLock"] = "Sperre die Buttons und die Necrosis Sph\195\164re", + ["BagSelect"] = "W\195\164hle die Seelensplitter-Tasche", + ["BuffMenu"] = "Setze das Spruch Men\195\188 nach links", + ["CurseMenu"] = "Setze das Fluch Men\195\188 nach links", + ["PetMenu"] = "Setze das Diener Men\195\188 nach links", + ["STimerLeft"] = "Zeige die Timer auf der linken Seite des Knopfes", + ["ShowCount"] = "Zeige die Anzahl der Seelensplitter in Necrosis", + ["CountType"] = "Stein Typ gez\195\164hlt", + ["Circle"] = "Anzeige in der grafischen Sph\195\164re", + ["Sound"] = "Aktiviere Sounds", + ["ShowMessage"] = "Zuf\195\164llige Spr\195\188che", + ["ShowDemonSummon"] = "Zuf\195\164llige Spr\195\188che (D\195\164mon)", + ["ShowSteedSummon"] = "Zuf\195\164llige Spr\195\188che (Mount)", + ["ChatType"] = "Necrosis Nachrichten als System-Nachrichten anzeigen", + ["NecrosisSize"] = "Gr\195\182\195\159e des Necrosis Button", + ["BanishSize"] = "Gr\195\182\195\159e des Verbannen Button", + ["TranseSize"] = "Gr\195\182\195\159e des Trance und Anti-Fear Buttons", + ["Skin"] = "Aussehen der Necrosis Sph\195\164re", + ["Show"] = { + ["Firestone"] = "Zeige den Feuerstein Button", + ["Spellstone"] = "Zeige den Zauberstein Button", + ["Healthstone"] = "Zeige den Gesundheitsstein Button", + ["Soulstone"] = "Zeige den Seelenstein Button", + ["Steed"] = "Zeige den Mount Button", + ["Buff"] = "Zeige den Spruch Men\195\188 Button", + ["Demon"] = "Zeige den D\195\164monen Men\195\188 Button", + ["Curse"] = "Zeige den Fluch Men\195\188 Button", + ["Tooltips"] = "Zeige Tooltips" + }, + ["Count"] = { + ["Shard"] = "Seelensplitter", + ["Inferno"] = "D\195\164monenen-Beschw\195\182rungs-Steine", + ["Rez"] = "Wiederbelebungs-Timer" + } + }; + +end diff --git a/Localization-dialog-en.lua b/Localization-dialog-en.lua new file mode 100644 index 0000000..792c2b8 --- /dev/null +++ b/Localization-dialog-en.lua @@ -0,0 +1,305 @@ +------------------------------------------------------------------------------------------------------ +-- Necrosis LdC +-- +-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +-- Implémentation de base (FR) : Tilienna Thorondor +-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas +-- +-- Skins et voix Françaises : Eliah, Ner'zhul +-- Version Allemande par Arne Meier et Halisstra, Lothar +-- Remerciements spéciaux pour Sadyre (JoL) +-- Version 06.05.2006-1 +------------------------------------------------------------------------------------------------------ + + +------------------------------------------------ +-- ENGLISH VERSION TEXTS -- +------------------------------------------------ + +function Necrosis_Localization_Dialog_En() + + function NecrosisLocalization() + Necrosis_Localization_Speech_En(); + end + + NECROSIS_COOLDOWN = { + ["Spellstone"] = "Spellstone Cooldown", + ["Healthstone"] = "Healthstone Cooldown" + }; + + NecrosisTooltipData = { + ["Main"] = { + Label = "|c00FFFFFFNecrosis|r", + Stone = { + [true] = "Yes"; + [false] = "No"; + }, + Hellspawn = { + [true] = "On"; + [false] = "Off"; + }, + ["Soulshard"] = "Soul Shard(s) : ", + ["InfernalStone"] = "Infernal Stone(s) : ", + ["DemoniacStone"] = "Demonic Figurine(s) ", + ["Soulstone"] = "\nSoulstone : ", + ["Healthstone"] = "Healthstone : ", + ["Spellstone"] = "Spellstone : ", + ["Firestone"] = "Firestone : ", + ["CurrentDemon"] = "Demon : ", + ["EnslavedDemon"] = "Demon : Enslaved", + ["NoCurrentDemon"] = "Demon : None", + }, + ["Soulstone"] = { + Label = "|c00FF99FFSoulstone|r", + Text = {"Create","Use","Used","Waiting"} + }, + ["Healthstone"] = { + Label = "|c0066FF33Healthstone|r", + Text = {"Create","Use"} + }, + ["Spellstone"] = { + Label = "|c0099CCFFSpellstone|r", + Text = {"Create","In Inventory","Held in hand"} + }, + ["Firestone"] = { + Label = "|c00FF4444Firestone|r", + Text = {"Create","In Inventory","Held in hand"} + }, + ["SpellTimer"] = { + Label = "|c00FFFFFFSpell Durations|r", + Text = "Active Spells on the target", + Right = "Right Click for Hearthstone to " + }, + ["ShadowTrance"] = { + Label = "|c00FFFFFFShadow Transe|r" + }, + ["Domination"] = { + Label = "|c00FFFFFFFel Domination|r" + }, + ["Enslave"] = { + Label = "|c00FFFFFFEnslave|r" + }, + ["Armor"] = { + Label = "|c00FFFFFFDemon Armor|r" + }, + ["Invisible"] = { + Label = "|c00FFFFFFDetect Invisibility|r" + }, + ["Aqua"] = { + Label = "|c00FFFFFFUnending Breath|r" + }, + ["Kilrogg"] = { + Label = "|c00FFFFFFEye of Kilrogg|r" + }, + ["Banish"] = { + Label = "|c00FFFFFFBanish|r" + }, + ["TP"] = { + Label = "|c00FFFFFFRitual of Summoning|r" + }, + ["SoulLink"] = { + Label = "|c00FFFFFFSoul Link|r" + }, + ["ShadowProtection"] = { + Label = "|c00FFFFFFShadow Ward|r" + }, + ["Imp"] = { + Label = "|c00FFFFFFImp|r" + }, + ["Void"] = { + Label = "|c00FFFFFFVoidwalker|r" + }, + ["Succubus"] = { + Label = "|c00FFFFFFSuccubus|r" + }, + ["Fel"] = { + Label = "|c00FFFFFFFelhunter|r" + }, + ["Infernal"] = { + Label = "|c00FFFFFFInferno|r" + }, + ["Doomguard"] = { + Label = "|c00FFFFFFDoomguard|r" + }, + ["Sacrifice"] = { + Label = "|c00FFFFFFDemonic sacrifice|r" + }, + ["Amplify"] = { + Label = "|c00FFFFFFAmplify Curse|r" + }, + ["Weakness"] = { + Label = "|c00FFFFFFCurse of Weakness|r" + }, + ["Agony"] = { + Label = "|c00FFFFFFCurse of Agony|r" + }, + ["Reckless"] = { + Label = "|c00FFFFFFCurse of Recklessness|r" + }, + ["Tongues"] = { + Label = "|c00FFFFFFCurse of Tongues|r" + }, + ["Exhaust"] = { + Label = "|c00FFFFFFCurse of Exhaustion|r" + }, + ["Elements"] = { + Label = "|c00FFFFFFCurse of Elements|r" + }, + ["Shadow"] = { + Label = "|c00FFFFFFCurse of Shadow|r" + }, + ["Doom"] = { + Label = "|c00FFFFFFCurse of Doom|r" + }, + ["Mount"] = { + Label = "|c00FFFFFFSteed|r" + }, + ["Buff"] = { + Label = "|c00FFFFFFSpell Menu|r\nRight click to keep the menu open" + }, + ["Pet"] = { + Label = "|c00FFFFFFDemon Menu|r\nRight click to keep the menu open" + }, + ["Curse"] = { + Label = "|c00FFFFFFCurse Menu|r\nRight click to keep the menu open" + }, + ["Radar"] = { + Label = "|c00FFFFFFSense Demons|r" + }, + ["AmplifyCooldown"] = "Right click to amplify curse", + ["DominationCooldown"] = "Right click for fast summon", + ["LastSpell"] = "Middle click to cast ", + }; + + + NECROSIS_SOUND = { + ["Fear"] = "Interface\\AddOns\\Necrosis\\sounds\\Fear-En.mp3", + ["SoulstoneEnd"] = "Interface\\AddOns\\Necrosis\\sounds\\SoulstoneEnd-En.mp3", + ["EnslaveEnd"] = "Interface\\AddOns\\Necrosis\\sounds\\EnslaveDemonEnd-En.mp3", + ["ShadowTrance"] = "Interface\\AddOns\\Necrosis\\sounds\\ShadowTrance-En.mp3" + }; + + + NECROSIS_NIGHTFALL_TEXT = { + ["NoBoltSpell"] = "You do not seem to have any Shadow Bolt Spell.", + ["Message"] = "Shadow Trance" + }; + + + NECROSIS_MESSAGE = { + ["Error"] = { + ["InfernalStoneNotPresent"] = "You need an Infernal Stone to do that !", + ["SoulShardNotPresent"] = "You need a Soul shard to do that !", + ["DemoniacStoneNotPresent"] = "You need a Demoniac Figurine to do that !", + ["NoRiding"] = "You do not have any Steed to ride !", + ["NoFireStoneSpell"] = "You do not have any Firestone creation spell", + ["NoSpellStoneSpell"] = "You do not have any Spellstone creation spell", + ["NoHealthStoneSpell"] = "You do not have any Healthstone creation spell", + ["NoSoulStoneSpell"] = "You do not have any Soulstone creation spell", + ["FullHealth"] = "You cannot use your Healthstone as you are not hurt", + ["BagAlreadySelect"] = "Error : This bag is already selected.", + ["WrongBag"] = "Error : The number must be between 0 and 4.", + ["BagIsNumber"] = "Error : Please type a number.", + ["NoHearthStone"] = "Error : You do not have a Hearthstone in your inventory" + }, + ["Bag"] = { + ["FullPrefix"] = "Your ", + ["FullSuffix"] = " is full !", + ["FullDestroySuffix"] = " is full; Next shards will be destroyed !", + ["SelectedPrefix"] = "You have chosen your ", + ["SelectedSuffix"] = " to keep your shards." + }, + ["Interface"] = { + ["Welcome"] = "/necro to show the setting menu !", + ["TooltipOn"] = "Tooltips turned on" , + ["TooltipOff"] = "Tooltips turned off", + ["MessageOn"] = "Chat messaging turned on", + ["MessageOff"] = "Chat messaging turned off", + ["MessagePosition"] = "<- System messages by Necrosis will appear here ->", + ["DefaultConfig"] = "Default configuration loaded.", + ["UserConfig"] = "Configuration loaded." + }, + ["Help"] = { + "/necro recall -- Center Necrosis and all buttons in the middle of the screen", + "/necro sm -- Replace Soulstoning and summoning messages with a short raid-ready version" + }, + ["EquipMessage"] = "Equip ", + ["SwitchMessage"] = " instead of ", + ["Information"] = { + ["FearProtect"] = "Your target has got a fear protection !!!!", + ["EnslaveBreak"] = "Your demon broke his chains...", + ["SoulstoneEnd"] = "Your Soulstone has faded." + } + }; + + + -- Gestion XML - Menu de configuration + + NECROSIS_COLOR_TOOLTIP = { + ["Purple"] = "Purple", + ["Blue"] = "Blue", + ["Pink"] = "Pink", + ["Orange"] = "Orange", + ["Turquoise"] = "Turquoise", + ["X"] = "X" + }; + + NECROSIS_CONFIGURATION = { + ["Menu1"] = "Shard Settings", + ["Menu2"] = "Message Settings", + ["Menu3"] = "Button Settings", + ["Menu4"] = "Timer Settings", + ["Menu5"] = "Graphical Settings", + ["MainRotation"] = "Necrosis Angle Selection", + ["ShardMenu"] = "|CFFB700B7I|CFFFF00FFn|CFFFF50FFv|CFFFF99FFe|CFFFFC4FFn|CFFFF99FFt|CFFFF50FFo|CFFFF00FFr|CFFB700B7y :", + ["ShardMenu2"] = "|CFFB700B7S|CFFFF00FFh|CFFFF50FFa|CFFFF99FFr|CFFFFC4FFd C|CFFFF99FFo|CFFFF50FFu|CFFFF00FFn|CFFB700B7t :", + ["ShardMove"] = "Put shards in the selected bag.", + ["ShardDestroy"] = "Destroy all new shards if the bag is full.", + ["SpellMenu1"] = "|CFFB700B7S|CFFFF00FFp|CFFFF50FFe|CFFFF99FFl|CFFFFC4FFls :", + ["SpellMenu2"] = "|CFFB700B7P|CFFFF00FFl|CFFFF50FFa|CFFFF99FFy|CFFFFC4FFe|CFFFF99FFr :", + ["TimerMenu"] = "|CFFB700B7G|CFFFF00FFr|CFFFF50FFa|CFFFF99FFp|CFFFFC4FFh|CFFFF99FFi|CFFFF50FFc|CFFFF00FFa|CFFB700B7l T|CFFFF00FFi|CFFFF50FFm|CFFFF99FFe|CFFFFC4FFrs :", + ["TimerColor"] = "Show white instead of yellow timer texts", + ["TimerDirection"] = "Timers grow upwards", + ["TranseWarning"] = "Alert me when I enter a Trance State", + ["SpellTime"] = "Turn on the spell durations indicator", + ["AntiFearWarning"] = "Warn me when my target cannot be feared.", + ["GraphicalTimer"] = "Show graphical instead text timers", + ["TranceButtonView"] = "Let me see hidden buttons to drag them.", + ["ButtonLock"] = "Lock the buttons around the Necrosis Sphere.", + ["MainLock"] = "Lock buttons and the Necrosis Sphere.", + ["BagSelect"] = "Selection of Soul Shard Container", + ["BuffMenu"] = "Put buff menu on the left", + ["PetMenu"] = "Put pet menu on the left", + ["CurseMenu"] = "Put curse menu on the left", + ["STimerLeft"] = "Show timers on the left side of the button", + ["ShowCount"] = "Show the Shard count in Necrosis", + ["CountType"] = "Stone type counted", + ["Circle"] = "Event shown by the graphical sphere", + ["Sound"] = "Activate sounds", + ["ShowMessage"] = "Activate random speeches", + ["ShowDemonSummon"] = "Activate random speeches (demon)", + ["ShowSteedSummon"] = "Activate random speeches (steed)", + ["ChatType"] = "Declare Necrosis messages as system messages", + ["NecrosisSize"] = "Size of the Necrosis button", + ["BanishSize"] = "Size of the Banish button", + ["TranseSize"] = "Size of Transe and Anti-fear buttons", + ["Skin"] = "Skin of the Necrosis Sphere", + ["Show"] = { + ["Firestone"] = "Show Firestone button", + ["Spellstone"] = "Show Spellstone button", + ["Healthstone"] = "Show Healthstone button", + ["Soulstone"] = "Show Soulstone button", + ["Steed"] = "Show Steed button", + ["Buff"] = "Show Spell menu button", + ["Curse"] = "Show Curse menu button", + ["Demon"] = "Show Demon menu button", + ["Tooltips"] = "Show tooltips" + }, + ["Count"] = { + ["Shard"] = "Soulshards", + ["Inferno"] = "Demon summoning stones", + ["Rez"] = "Resurrection Timer" + } + }; + +end diff --git a/Localization-dialog-fr.lua b/Localization-dialog-fr.lua new file mode 100644 index 0000000..81ede9d --- /dev/null +++ b/Localization-dialog-fr.lua @@ -0,0 +1,303 @@ +------------------------------------------------------------------------------------------------------ +-- Necrosis LdC +-- +-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +-- Implémentation de base (FR) : Tilienna Thorondor +-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas +-- +-- Skins et voix Françaises : Eliah, Ner'zhul +-- Version Allemande par Arne Meier et Halisstra, Lothar +-- Remerciements spéciaux pour Sadyre (JoL) +-- Version 28.06.2006-1 +------------------------------------------------------------------------------------------------------ + + +------------------------------------------------ +-- VERSION FRANCAISE DES TEXTES -- +------------------------------------------------ + +function Necrosis_Localization_Dialog_Fr() + + function NecrosisLocalization() + Necrosis_Localization_Speech_Fr(); + end + + NECROSIS_COOLDOWN = { + ["Spellstone"] = "Temps de recharge Pierre de sort", + ["Healthstone"] = "Temps de recharge Pierre de soins" + }; + + NecrosisTooltipData = { + ["Main"] = { + Label = "|c00FFFFFFNecrosis|r", + Stone = { + [true] = "Oui"; + [false] = "Non"; + }, + Hellspawn = { + [true] = "On"; + [false] = "Off"; + }, + ["Soulshard"] = "Fragment(s) d'\195\162me : ", + ["InfernalStone"] = "Pierre(s) infernale(s) : ", + ["DemoniacStone"] = "Pierre(s) d\195\169moniaque(s) : ", + ["Soulstone"] = "\nPierre d'\195\162me : ", + ["Healthstone"] = "Pierre de soins : ", + ["Spellstone"] = "Pierre de sort : ", + ["Firestone"] = "Pierre de feu : ", + ["CurrentDemon"] = "Demon : ", + ["EnslavedDemon"] = "Demon : Asservi", + ["NoCurrentDemon"] = "Demon : Aucun", + }, + ["Soulstone"] = { + Label = "|c00FF99FFPierre d'\195\162me|r", + Text = {"Cr\195\169ation","Utilisation","Utilis\195\169e","En attente"} + }, + ["Healthstone"] = { + Label = "|c0066FF33Pierre de soins|r", + Text = {"Cr\195\169ation","Utilisation"} + }, + ["Spellstone"] = { + Label = "|c0099CCFFPierre de sort|r", + Text = {"Cr\195\169ation","En inventaire","Tenue en main"} + }, + ["Firestone"] = { + Label = "|c00FF4444Pierre de feu|r", + Text = {"Cr\195\169ation","En inventaire","Tenue en main"} + }, + ["SpellTimer"] = { + Label = "|c00FFFFFFDur\195\169e des sorts|r", + Text = "Sorts actifs sur la cible", + Right = "Clic droit pour pierre de foyer vers " + }, + ["ShadowTrance"] = { + Label = "|c00FFFFFFTranse de l'ombre|r" + }, + ["Domination"] = { + Label = "|c00FFFFFFDomination corrompue|r" + }, + ["Enslave"] = { + Label = "|c00FFFFFFAsservissement|r" + }, + ["Armor"] = { + Label = "|c00FFFFFFArmure d\195\169moniaque|r" + }, + ["Invisible"] = { + Label = "|c00FFFFFFD\195\169tection de l'invisibilit\195\169|r" + }, + ["Aqua"] = { + Label = "|c00FFFFFFRespiration interminable|r" + }, + ["Kilrogg"] = { + Label = "|c00FFFFFFOeil de Kilrogg|r" + }, + ["Banish"] = { + Label = "|c00FFFFFFBannir|r" + }, + ["TP"] = { + Label = "|c00FFFFFFRituel d'invocation|r" + }, + ["SoulLink"] = { + Label = "|c00FFFFFFLien spirituel|r" + }, + ["ShadowProtection"] = { + Label = "|c00FFFFFFGardien de l'ombre|r" + }, + ["Imp"] = { + Label = "|c00FFFFFFDiablotin|r" + }, + ["Void"] = { + Label = "|c00FFFFFFMarcheur \195\169th\195\169r\195\169|r" + }, + ["Succubus"] = { + Label = "|c00FFFFFFSuccube|r" + }, + ["Fel"] = { + Label = "|c00FFFFFFChasseur corrompu|r" + }, + ["Infernal"] = { + Label = "|c00FFFFFFInfernal|r" + }, + ["Doomguard"] = { + Label = "|c00FFFFFFGarde funeste|r" + }, + ["Sacrifice"] = { + Label = "|c00FFFFFFSacrifice d\195\169moniaque|r" + }, + ["Amplify"] = { + Label = "|c00FFFFFFMal\195\169diction amplifi\195\169e|r" + }, + ["Weakness"] = { + Label = "|c00FFFFFFMal\195\169diction de faiblesse|r" + }, + ["Agony"] = { + Label = "|c00FFFFFFMal\195\169diction d'agonie|r" + }, + ["Reckless"] = { + Label = "|c00FFFFFFMal\195\169diction de t\195\169m\195\169rit\195\169|r" + }, + ["Tongues"] = { + Label = "|c00FFFFFFMal\195\169diction des langages|r" + }, + ["Exhaust"] = { + Label = "|c00FFFFFFMal\195\169diction de fatigue|r" + }, + ["Elements"] = { + Label = "|c00FFFFFFMal\195\169diction des \195\169l\195\169ments|r" + }, + ["Shadow"] = { + Label = "|c00FFFFFFMal\195\169diction de l'ombre|r" + }, + ["Doom"] = { + Label = "|c00FFFFFFMal\195\169diction funeste|r" + }, + ["Mount"] = { + Label = "|c00FFFFFFMonture|r" + }, + ["Buff"] = { + Label = "|c00FFFFFFMenu des sorts|r\nClic droit pour laisser ouvert" + }, + ["Pet"] = { + Label = "|c00FFFFFFMenu des d\195\169mons|r\nClic droit pour laisser ouvert" + }, + ["Curse"] = { + Label = "|c00FFFFFFMenu des mal\195\169dictions|r\nClic droit pour laisser ouvert" + }, + ["Radar"] = { + Label = "|c00FFFFFFD\195\169tection des d\195\169mons|r" + }, + ["AmplifyCooldown"] = "Clic droit pour amplifier la mal\195\169diction", + ["DominationCooldown"] = "Clic droit pour invocation rapide", + ["LastSpell"] = "Clic du milieu pour caster ", + }; + + NECROSIS_SOUND = { + ["Fear"] = "Interface\\AddOns\\Necrosis\\sounds\\Fear-Fr.mp3", + ["SoulstoneEnd"] = "Interface\\AddOns\\Necrosis\\sounds\\SoulstoneEnd-Fr.mp3", + ["EnslaveEnd"] = "Interface\\AddOns\\Necrosis\\sounds\\EnslaveDemonEnd-Fr.mp3", + ["ShadowTrance"] = "Interface\\AddOns\\Necrosis\\sounds\\ShadowTrance-Fr.mp3" + }; + + NECROSIS_NIGHTFALL_TEXT = { + ["NoBoltSpell"] = "Vos n'avez pas le sort Trait de l'ombre.", + ["Message"] = "Transe de l'ombre" + }; + + + NECROSIS_MESSAGE = { + ["Error"] = { + ["InfernalStoneNotPresent"] = "Pas de Pierre infernale pour l'invocation", + ["SoulShardNotPresent"] = "Pas de Fragment d'\195\162me pour l'invocation", + ["DemoniacStoneNotPresent"] = "Pas de pierre d\195\169moniaque pour l'invocation", + ["NoRiding"] = "Vous n'avez pas de monture \192\160 invoquer !", + ["NoFireStoneSpell"] = "Vous n'avez pas de sort Cr\195\169ation de Pierre de feu", + ["NoSpellStoneSpell"] = "Vous n'avez pas de sort Cr\195\169ation de Pierre de sort", + ["NoHealthStoneSpell"] = "Vous n'avez pas de sort Cr\195\169ation de Pierre de soins", + ["NoSoulStoneSpell"] = "Vous n'avez pas de sort Cr\195\169ation de Pierre d'\195\162me", + ["FullHealth"] = "Utilisation de Pierre de soins impossible, vous n'etes pas bless\195\169(e)", + ["BagAlreadySelect"] = "Erreur : Vous avez d\195\169j\195\160 ce sac selectionn\195\169.", + ["WrongBag"] = "Erreur : Le No doit \195\170tre compris entre 0 et 4", + ["BagIsNumber"] = "Erreur : Veuillez taper un chiffre.", + ["NoHearthStone"] = "Erreur : Vous n'avez pas de pierre de foyer dans votre inventaire" + }, + ["Bag"] = { + ["FullPrefix"] = "Votre ", + ["FullSuffix"] = " est plein !", + ["FullDestroySuffix"] = " est plein; les prochains fragments seront detruits !", + ["SelectedPrefix"] = "Vous avez choisi votre ", + ["SelectedSuffix"] = " pour stocker vos fragments" + }, + ["Interface"] = { + ["Welcome"] = "/necro pour les options !", + ["TooltipOn"] = "Bulles d'aide activ\195\169es" , + ["TooltipOff"] = "Bulles d'aide d\195\169sactiv\195\169es", + ["MessageOn"] = "Messages Pierre d'\195\162me et Invocation de joueur activ\195\169s", + ["MessageOff"] = "Messages Pierre d'\195\162me et Invocation de joueur desactiv\195\169s", + ["MessagePosition"] = "<- position des messages systeme Necrosis ->", + ["DefaultConfig"] = "Configuration par defaut charg\195\169e.", + ["UserConfig"] = "Configuration charg\195\169e" + }, + ["Help"] = { + "/necro recall -- Centre Necrosis and tous les boutons au centre de l'écran", + "/necro sm -- Remplace les messages de pierre d'\195\162me et d'invocation par des versions courtes spéciales raid" + }, + ["EquipMessage"] = "Equipe ", + ["SwitchMessage"] = " \195\160 la place de ", + ["Information"] = { + ["FearProtect"] = "La cible est prot\195\168g\195\169e contre la peur !!!!", + ["EnslaveBreak"] = "Votre D\195\169mon a bris\195\169 ses chaines...", + ["SoulstoneEnd"] = "Votre Pierre d'\195\162me vient de s'eteindre." + } + }; + + + -- Gestion XML - Menu de configuration + + NECROSIS_COLOR_TOOLTIP = { + ["Purple"] = "Violet", + ["Blue"] = "Bleu", + ["Pink"] = "Rose", + ["Orange"] = "Orange", + ["Turquoise"] = "Turquoise", + ["X"] = "X" + }; + + NECROSIS_CONFIGURATION = { + ["Menu1"] = "Configuration des fragments", + ["Menu2"] = "Configuration des messages", + ["Menu3"] = "Configuration des boutons", + ["Menu4"] = "Configuration des timers", + ["Menu5"] = "Configuration graphique", + ["MainRotation"] = "Rotation de Necrosis", + ["ShardMenu"] = "|CFFB700B7I|CFFFF00FFn|CFFFF50FFv|CFFFF99FFen|CFFFFC4FFt|CFFFF99FFa|CFFFF50FFi|CFFFF00FFr|CFFB700B7e :", + ["ShardMenu2"] = "|CFFB700B7C|CFFFF00FFo|CFFFF50FFm|CFFFF99FFp|CFFFFC4FFt|CFFFF99FFe|CFFFF50FFu|CFFFF00FFr :", + ["ShardMove"] = "D\195\169place les fragments dans le sac specifi\195\169", + ["ShardDestroy"] = "D\195\169truit les fragments si sac plein", + ["SpellMenu1"] = "|CFFB700B7S|CFFFF00FFo|CFFFF50FFr|CFFFF99FFt|CFFFFC4FFs :", + ["SpellMenu2"] = "|CFFB700B7J|CFFFF00FFo|CFFFF50FFu|CFFFF99FFe|CFFFFC4FFu|CFFFF99FFr :", + ["TimerMenu"] = "|CFFB700B7T|CFFFF00FFi|CFFFF50FFm|CFFFF99FFe|CFFFFC4FFr|CFFFF99FFs G|CFFFF50FFr|CFFFF00FFa|CFFB700B7ph|CFFFF00FFi|CFFFF50FFq|CFFFF99FFue|CFFFFC4FFs :", + ["TranseWarning"] = "M'alerter quand j'entre en Transe", + ["SpellTime"] = "Affiche la gestion des dur\195\169es de sorts", + ["AntiFearWarning"] = "M'alerter quand ma cible \195\160 un 'anti fear'", + ["GraphicalTimer"] = "Affichage des timers sous forme graphique", + ["TimerColor"] = "Affiche le texte des timers en blanc", + ["TimerDirection"] = "Ajouter les timers en haut des pr\195\169c\195\169dents", + ["TranceButtonView"] = "Affichage des boutons cach\195\169s pour les d\195\169placer", + ["ButtonLock"] = "Verrouiller les boutons sur la sphere Necrosis", + ["MainLock"] = "Verrouiller les boutons des Pierres et Necrosis", + ["BagSelect"] = "Choix du sac contenant les fragments", + ["BuffMenu"] = "Afficher le menu des buffs vers la gauche", + ["PetMenu"] = "Afficher le menu des d\195\169mons vers la gauche", + ["CurseMenu"] = "Afficher le menu des mal\195\169dictions vers la gauche", + ["STimerLeft"] = "Afficher les timers sur la gauche du bouton", + ["ShowCount"] = "Afficher le compteur de fragments", + ["CountType"] = "Type de compteur", + ["Circle"] = "Ev\195\168nement montr\195\169 par la sph\195\168re graphique", + ["ShowMessage"] = "Active les messages al\195\169atoires d'invocation", + ["ShowDemonSummon"] = "Active les messages pour les D\195\169mons", + ["ShowSteedSummon"] = "Active les messages pour la Monture", + ["ChatType"] = "Les messages = des messages syst\195\168mes", + ["Sound"] = "Activer les sons", + ["NecrosisSize"] = "Taille de la pierre Necrosis", + ["BanishSize"] = "Taille du bouton Banish", + ["TranseSize"] = "Taille des boutons Transe et AntiPeur", + ["Skin"] = "Skin de la pierre Necrosis", + ["Show"] = { + ["Firestone"] = "Afficher le bouton des Pierres de feu", + ["Spellstone"] = "Afficher le bouton des Pierres de sort", + ["Healthstone"] = "Afficher le bouton des Pierres de soin", + ["Soulstone"] = "Afficher le bouton des Pierres d'\195\162me", + ["Steed"] = "Afficher le bouton de la Monture", + ["Buff"] = "Affiche le bouton des Buffs", + ["Curse"] = "Affiche le bouton des Mal\195\169dictions", + ["Demon"] = "Affiche le bouton d'invocation des D\195\169mons", + ["Tooltips"] = "Affiche les bulles d'aides" + }, + ["Count"] = { + ["Shard"] = "Fragments d'\195\162me", + ["Inferno"] = "Pierres d'invocations", + ["Rez"] = "Timer de Rez" + } + }; + +end diff --git a/Localization-functions-de.lua b/Localization-functions-de.lua new file mode 100644 index 0000000..08263c1 --- /dev/null +++ b/Localization-functions-de.lua @@ -0,0 +1,210 @@ +------------------------------------------------------------------------------------------------------ +-- Necrosis LdC +-- +-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +-- Implémentation de base (FR) : Tilienna Thorondor +-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas +-- +-- Skins et voix Françaises : Eliah, Ner'zhul +-- Version Allemande par Arne Meier et Halisstra, Lothar +-- Remerciements spéciaux pour Sadyre (JoL) +-- Version 28.06.2006-1 +------------------------------------------------------------------------------------------------------ + + + +------------------------------------------------ +-- GERMAN VERSION FUNCTIONS -- +------------------------------------------------ + +if ( GetLocale() == "deDE" ) then + +NECROSIS_UNIT_WARLOCK = "Hexenmeister"; + +NECROSIS_ANTI_FEAR_SPELL = { + -- Buffs die temporäre Immunität gegenüber Furcht geben + ["Buff"] = { + "Furchtzauberschutz", -- Dwarf priest racial trait + "Wille der Verlassenen", -- Forsaken racial trait + "Furchtlos", -- Trinket + "Berserkerwut", -- Warrior Fury talent + "Tollk\195\188hnheit", -- Warrior Fury talent + "Todeswunsch", -- Warrior Fury talent + "Zorn des Wildtieres", -- Hunter Beast Mastery talent (pet only) + "Eisblock", -- Mage Ice talent + "G\195\182ttlicher Schutz", -- Paladin Holy buff + "Gottesschild", -- Paladin Holy buff + "Totem des Erdsto\195\159es", -- Shaman totem + "Abolish Magic" -- Majordomo (NPC) spell + -- "Grounding Totem" is not considerated, as it can remove other spell than fear, and only one each 10 sec. + }, + + -- Debuffs and curses giving temporary immunity to fear effects + ["Debuff"] = { + "Fluch der Tollk\195\188hnheit" -- Warlock curse + } +}; + +-- Creature type absolutly immune to fear effects +NECROSIS_ANTI_FEAR_UNIT = { + "Untoter" +}; + +-- Word to search for spell immunity. First (.+) replace the spell's name, 2nd (.+) replace the creature's name +NECROSIS_ANTI_FEAR_SRCH = "(.+) war ein Fehlschlag. (.+) ist immun." + +NECROSIS_SPELL_TABLE = { + [1] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Teufelsross beschw\195\182ren", Length = 0, Type = 0}, + [2] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Schreckensross herbeirufen", Length = 0, Type = 0}, + [3] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Wichtel beschw\195\182ren", Length = 0, Type = 0}, + [4] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Leerwandler beschw\195\182ren", Length = 0, Type = 0}, + [5] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Sukkubus beschw\195\182ren", Length = 0, Type = 0}, + [6] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Teufelsj\195\164ger beschw\195\182ren", Length = 0, Type = 0}, + [7] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Schattenblitz", Length = 0, Type = 0}, + [8] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Inferno", Length = 3600, Type = 3}, + [9] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Verbannen", Length = 30, Type = 2}, + [10] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "D\195\164monensklave", Length = 30000, Type = 2}, + [11] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Seelenstein-Auferstehung", Length = 1800, Type = 1}, + [12] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Feuerbrand", Length = 15, Type = 5}, + [13] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Furcht", Length = 15, Type = 5}, + [14] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Verderbnis", Length = 17, Type = 5}, + [15] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Teufelsbeherrschung", Length = 900, Type = 3}, + [16] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch der Verdammnis", Length = 60, Type = 3}, + [17] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Opferung", Length = 30, Type = 3}, + [18] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Seelenfeuer", Length = 60, Type = 3}, + [19] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Todesmantel", Length = 120, Type = 3}, + [20] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Schattenbrand", Length = 15, Type = 3}, + [21] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Feuersbrunst", Length = 10, Type = 3}, + [22] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch der Pein", Length = 24, Type = 4}, + [23] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch der Schw\195\164che", Length = 120, Type = 4}, + [24] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch der Tollk\195\188hnheit", Length = 120, Type = 4}, + [25] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch der Sprachen", Length = 30, Type = 4}, + [26] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch der Elemente", Length = 300, Type = 4}, + [27] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch der Schatten", Length = 300, Type = 4}, + [28] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Lebensentzug", Length = 30, Type = 5}, + [29] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Schreckengeh\195\164ul", Length = 40, Type = 3}, + [30] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Ritual der Verdammnis", Length = 3600, Type = 0}, + [31] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "D\195\164monenr\195\188stung", Length = 0, Type = 0}, + [32] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Unendlicher Atem", Length = 0, Type = 0}, + [33] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Unsichtbarkeit", Length = 0, Type = 0}, + [34] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Auge von Kilrogg", Length = 0, Type = 0}, + [35] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "D\195\164monensklave", Length = 0, Type = 0}, + [36] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "D\195\164monenhaut", Length = 0, Type = 0}, + [37] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Ritual der Beschw\195\182rung", Length = 0, Type = 0}, + [38] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Seelenverbindung", Length = 0, Type = 0}, + [39] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "D\195\164monen sp\195\188ren", Length = 0, Type = 0}, + [40] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch der Ersch\195\182pfung", Length = 12, Type = 4}, + [41] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Aderlass", Length = 0, Type = 0}, + [42] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fluch verst\195\164rken", Length = 180, Type = 3}, + [43] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Schattenzauberschutz", Length = 30, Type = 3}, + [44] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "D\195\164monische Opferung", Length = 0, Type = 0}, + +}; +-- Type 0 = Pas de Timer +-- Type 1 = Timer permanent principal +-- Type 2 = Timer permanent +-- Type 3 = Timer de cooldown +-- Type 4 = Timer de malédiction +-- Type 5 = Timer de combat + +NECROSIS_ITEM = { + ["Soulshard"] = "Seelensplitter", + ["Soulstone"] = "Seelenstein", + ["Healthstone"] = "Gesundheitsstein", + ["Spellstone"] = "Zauberstein", + ["Firestone"] = "Feuerstein", + ["Offhand"] = "Schildhand", + ["Twohand"] = "Zweihand", + ["InfernalStone"] = "H\195\182llenstein", + ["DemoniacStone"] = "D\195\164monenstatuette", + ["Hearthstone"] = "Ruhestein", + ["SoulPouch"] = {"Seelenbeutel", "Teufelsstofftasche", "Kernteufelsstofftasche"} +}; + + +NECROSIS_STONE_RANK = { + [1] = " (schwach)", -- Rank Minor + [2] = " (gering)", -- Rank Lesser + [3] = "", -- Rank Intermediate, no name + [4] = " (gro\195\159)", -- Rank Greater + [5] = " (erheblich)" -- Rank Major +}; + +NECROSIS_NIGHTFALL = { + ["BoltName"] = "blitz", + ["ShadowTrance"] = "Schattentrance" +}; + +NECROSIS_CREATE = { + [1] = "Seelenstein herstellen", + [2] = "Gesundheitsstein herstellen", + [3] = "Zauberstein herstellen", + [4] = "Feuerstein herstellen" +}; + +NECROSIS_PET_LOCAL_NAME = { + [1] = "Wichtel", + [2] = "Leerwandler", + [3] = "Sukkubus", + [4] = "Teufelsj\195\164ger", + [5] = "H\195\182llenbestie", + [6] = "Verdammniswache" +}; + +NECROSIS_TRANSLATION = { + ["Cooldown"] = "Cooldown", + ["Hearth"] = "Ruhestein", + ["Rank"] = "Rang", + ["Invisible"] = "Unsichtbarkeit entdecken", + ["LesserInvisible"] = "Geringe Unsichtbarkeit entdecken", + ["GreaterInvisible"] = "Gro\195\159e Unsichtbarkeit entdecken", + ["SoulLinkGain"] = "Du bekommst Seelenverbindung.", + ["SacrificeGain"] = "Du bekommst Opferung.", + ["SummoningRitual"] = "Ritual der Beschw\195\182rung" +}; + +end diff --git a/Localization-functions-en.lua b/Localization-functions-en.lua new file mode 100644 index 0000000..a487af6 --- /dev/null +++ b/Localization-functions-en.lua @@ -0,0 +1,210 @@ +------------------------------------------------------------------------------------------------------ +-- Necrosis LdC +-- +-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +-- Implémentation de base (FR) : Tilienna Thorondor +-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas +-- +-- Skins et voix Françaises : Eliah, Ner'zhul +-- Version Allemande par Arne Meier et Halisstra, Lothar +-- Remerciements spéciaux pour Sadyre (JoL) +-- Version 06.05.2006-1 +------------------------------------------------------------------------------------------------------ + + + +------------------------------------------------ +-- ENGLISH VERSION FUNCTIONS -- +------------------------------------------------ + +if ( GetLocale() == "enUS" ) or ( GetLocale() == "enGB" ) then + +NECROSIS_UNIT_WARLOCK = "Warlock"; + +NECROSIS_ANTI_FEAR_SPELL = { + -- Buffs giving temporary immunity to fear effects + ["Buff"] = { + "Fear Ward", -- Dwarf priest racial trait + "Will of the Forsaken", -- Forsaken racial trait + "Fearless", -- Trinket + "Berzerker Rage", -- Warrior Fury talent + "Recklessness", -- Warrior Fury talent + "Death Wish", -- Warrior Fury talent + "Bestial Wrath", -- Hunter Beast Mastery talent (pet only) + "Ice Block", -- Mage Ice talent + "Divine Protection", -- Paladin Holy buff + "Divine Shield", -- Paladin Holy buff + "Tremor Totem", -- Shaman totem + "Abolish Magic" -- Majordomo (NPC) spell + -- "Grounding Totem" is not considerated, as it can remove other spell than fear, and only one each 10 sec. + }, + + -- Debuffs and curses giving temporary immunity to fear effects + ["Debuff"] = { + "Curse of Recklessness" -- Warlock curse + } +}; + +-- Creature type absolutly immune to fear effects +NECROSIS_ANTI_FEAR_UNIT = { + "Undead" +}; + +-- Word to search for spell immunity. First (.+) replace the spell's name, 2nd (.+) replace the creature's name +NECROSIS_ANTI_FEAR_SRCH = "Your (.+) failed. (.+) is immune." + +NECROSIS_SPELL_TABLE = { + [1] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Summon Felsteed", Length = 0, Type = 0}, + [2] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Summon Dreadsteed", Length = 0, Type = 0}, + [3] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Summon Imp", Length = 0, Type = 0}, + [4] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Summon Voidwalker", Length = 0, Type = 0}, + [5] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Summon Succubus", Length = 0, Type = 0}, + [6] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Summon Felhunter", Length = 0, Type = 0}, + [7] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Shadow Bolt", Length = 0, Type = 0}, + [8] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Inferno", Length = 3600, Type = 3}, + [9] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Banish", Length = 30, Type = 2}, + [10] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Enslave Demon", Length = 30000, Type = 2}, + [11] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Soulstone Resurrection", Length = 1800, Type = 1}, + [12] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Immolate", Length = 15, Type = 5}, + [13] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fear", Length = 15, Type = 5}, + [14] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Corruption", Length = 17, Type = 5}, + [15] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Fel Domination", Length = 900, Type = 3}, + [16] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Curse of Doom", Length = 60, Type = 3}, + [17] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Sacrifice", Length = 30, Type = 3}, + [18] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Soul Fire", Length = 60, Type = 3}, + [19] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Death Coil", Length = 120, Type = 3}, + [20] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Shadowburn", Length = 15, Type = 3}, + [21] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Conflagrate", Length = 10, Type = 3}, + [22] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Curse of Agony", Length = 24, Type = 4}, + [23] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Curse of Weakness", Length = 120, Type = 4}, + [24] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Curse of Recklessness", Length = 120, Type = 4}, + [25] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Curse of Tongues", Length = 30, Type = 4}, + [26] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Curse of the Elements", Length = 300, Type = 4}, + [27] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Curse of Shadow", Length = 300, Type = 4}, + [28] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Siphon Life", Length = 30, Type = 5}, + [29] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Howl of Terror", Length = 40, Type = 3}, + [30] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Ritual of Doom", Length = 3600, Type = 0}, + [31] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Demon Armor", Length = 0, Type = 0}, + [32] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Unending Breath", Length = 0, Type = 0}, + [33] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Invisibility", Length = 0, Type = 0}, + [34] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Eye of Kilrogg", Length = 0, Type = 0}, + [35] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Enslave Demon", Length = 0, Type = 0}, + [36] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Demon Skin", Length = 0, Type = 0}, + [37] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Ritual of Summoning", Length = 0, Type = 0}, + [38] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Soul Link", Length = 0, Type = 0}, + [39] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Sense Demons", Length = 0, Type = 0}, + [40] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Curse of Exhaustion", Length = 12, Type = 4}, + [41] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Life Tap", Length = 0, Type = 0}, + [42] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Amplify Curse", Length = 180, Type = 3}, + [43] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Shadow Ward", Length = 30, Type = 3}, + [44] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Demonic Sacrifice", Length = 0, Type = 0}, + +}; +-- Type 0 = Pas de Timer +-- Type 1 = Timer permanent principal +-- Type 2 = Timer permanent +-- Type 3 = Timer de cooldown +-- Type 4 = Timer de malédiction +-- Type 5 = Timer de combat + +NECROSIS_ITEM = { + ["Soulshard"] = "Soul Shard", + ["Soulstone"] = "Soulstone", + ["Healthstone"] = "Healthstone", + ["Spellstone"] = "Spellstone", + ["Firestone"] = "Firestone", + ["Offhand"] = "Held In Off-hand", + ["Twohand"] = "Two-Hand", + ["InfernalStone"] = "Infernal Stone", + ["DemoniacStone"] = "Demonic Figurine", + ["Hearthstone"] = "Hearthstone", + ["SoulPouch"] = {"Soul Pouch", "Felcloth Bag", "Core Felcloth Bag"} +}; + + +NECROSIS_STONE_RANK = { + [1] = " (Minor)", -- Rank Minor + [2] = " (Lesser)", -- Rank Lesser + [3] = "", -- Rank Intermediate, no name + [4] = " (Greater)", -- Rank Greater + [5] = " (Major)" -- Rank Major +}; + +NECROSIS_NIGHTFALL = { + ["BoltName"] = "Bolt", + ["ShadowTrance"] = "Shadow Trance" +}; + +NECROSIS_CREATE = { + [1] = "Create Soulstone", + [2] = "Create Healthstone", + [3] = "Create Spellstone", + [4] = "Create Firestone" +}; + +NECROSIS_PET_LOCAL_NAME = { + [1] = "Imp", + [2] = "Voidwalker", + [3] = "Succubus", + [4] = "Felhunter", + [5] = "Inferno", + [6] = "Doomguard" +}; + +NECROSIS_TRANSLATION = { + ["Cooldown"] = "Cooldown", + ["Hearth"] = "Hearthstone", + ["Rank"] = "Rank", + ["Invisible"] = "Detect Invisibility", + ["LesserInvisible"] = "Detect Lesser Invisibility", + ["GreaterInvisible"] = "Detect Greater Invisibility", + ["SoulLinkGain"] = "You gain Soul Link.", + ["SacrificeGain"] = "You gain Sacrifice.", + ["SummoningRitual"] = "Ritual of Summoning" +}; + +end diff --git a/Localization-functions-fr.lua b/Localization-functions-fr.lua new file mode 100644 index 0000000..05af38c --- /dev/null +++ b/Localization-functions-fr.lua @@ -0,0 +1,209 @@ +------------------------------------------------------------------------------------------------------ +-- Necrosis LdC +-- +-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +-- Implémentation de base (FR) : Tilienna Thorondor +-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas +-- +-- Skins et voix Françaises : Eliah, Ner'zhul +-- Version Allemande par Arne Meier et Halisstra, Lothar +-- Remerciements spéciaux pour Sadyre (JoL) +-- Version 05.09.2006-1 +------------------------------------------------------------------------------------------------------ + + + +------------------------------------------------ +-- VERSION FRANCAISE DES FONCTIONS -- +------------------------------------------------ + +if ( GetLocale() == "frFR" ) then + +NECROSIS_UNIT_WARLOCK = "D\195\169moniste"; + +NECROSIS_ANTI_FEAR_SPELL = { + -- Buffs giving temporary immunity to fear effects + ["Buff"] = { + "Gardien de peur", -- Dwarf priest racial trait + "Volont\195\169 des r\195\169prouv\195\169", -- Forsaken racial trait + "Sans peur", -- Trinket + "Furie Berzerker", -- Warrior Fury talent + "T\195\169m\195\169rit\195\169", -- Warrior Fury talent + "Souhait mortel", -- Warrior Fury talent + "Courroux bestial", -- Hunter Beast Mastery talent (pet only) + "Carapace de glace", -- Mage Ice talent + "Protection divine", -- Paladin Holy buff + "Bouclier divin", -- Paladin Holy buff + "Totem de s\195\169isme", -- Shaman totem + "Abolir la magie" -- Majordomo (NPC) spell + -- "Grounding Totem" is not considerated, as it can remove other spell than fear, and only one each 10 sec. + }, + + -- Debuffs and curses giving temporary immunity to fear effects + ["Debuff"] = { + "Mal\195\169diction de t\195\169m\195\169rit\195\169" -- Warlock curse + } +}; + +-- Creature type absolutly immune to fear effects +NECROSIS_ANTI_FEAR_UNIT = { + "Mort-vivant" +}; + +-- Word to search for spell immunity. First (.+) replace the spell's name, 2nd (.+) replace the creature's name +NECROSIS_ANTI_FEAR_SRCH = "Votre (.+) rate. (.+) y est insensible." + +NECROSIS_SPELL_TABLE = { + [1] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Invocation d'un palefroi corrompu", Length = 0, Type = 0}, + [2] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Invocation d'un destrier de l'effroi", Length = 0, Type = 0}, + [3] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Invocation d'un diablotin", Length = 0, Type = 0}, + [4] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Invocation d'un marcheur du Vide", Length = 0, Type = 0}, + [5] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Invocation d'une succube", Length = 0, Type = 0}, + [6] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Invocation d'un chasseur corrompu", Length = 0, Type = 0}, + [7] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Trait de l'ombre", Length = 0, Type = 0}, + [8] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Inferno", Length = 3600, Type = 3}, + [9] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Bannir", Length = 30, Type = 2}, + [10] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Asservir d\195\169mon", Length = 30000, Type = 2}, + [11] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "R\195\169surrection de Pierre d'\195\162me", Length = 1800, Type = 1}, + [12] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Immolation", Length = 15, Type = 5}, + [13] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Peur", Length = 15, Type = 5}, + [14] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Corruption", Length = 17, Type = 5}, + [15] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Domination corrompue", Length = 900, Type = 3}, + [16] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction funeste", Length = 60, Type = 3}, + [17] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Sacrifice", Length = 30, Type = 3}, + [18] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Feu de l'\195\162me", Length = 60, Type = 3}, + [19] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Voile mortel", Length = 120, Type = 3}, + [20] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Br\195\187lure de l'ombre", Length = 15, Type = 3}, + [21] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Conflagration", Length = 10, Type = 3}, + [22] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction d'agonie", Length = 24, Type = 4}, + [23] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction de faiblesse", Length = 120, Type = 4}, + [24] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction de t\195\169m\195\169rit\195\169", Length = 120, Type = 4}, + [25] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction des langages", Length = 30, Type = 4}, + [26] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction des \195\169l\195\169ments", Length = 300, Type = 4}, + [27] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction de l'ombre", Length = 300, Type = 4}, + [28] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Siphon de vie", Length = 30, Type = 5}, + [29] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Hurlement de terreur", Length = 40, Type = 3}, + [30] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Rituel de mal\195\169diction", Length = 3600, Type = 0}, + [31] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Armure d\195\169moniaque", Length = 0, Type = 0}, + [32] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Respiration interminable", Length = 0, Type = 0}, + [33] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Invisibilit\195\169", Length = 0, Type = 0}, + [34] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Oeil de Kilrogg", Length = 0, Type = 0}, + [35] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Asservir d\195\169mon", Length = 0, Type = 0}, + [36] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Peau de d\195\169mon", Length = 0, Type = 0}, + [37] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Rituel d'invocation", Length = 0, Type = 0}, + [38] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Lien spirituel", Length = 0, Type = 0}, + [39] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "D\195\169tection des d\195\169mons", Length = 0, Type = 0}, + [40] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction de fatigue", Length = 12, Type = 4}, + [41] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Connexion", Length = 0, Type = 0}, + [42] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Mal\195\169diction amplifi\195\169e", Length = 180, Type = 3}, + [43] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Gardien de l'ombre", Length = 30, Type = 3}, + [44] = {ID = nil, Rank = nil, CastTime = nil, Mana = nil, + Name = "Sacrifice d\195\169moniaque", Length = 0, Type = 0}, +}; +-- Type 0 = Pas de Timer +-- Type 1 = Timer permanent principal +-- Type 2 = Timer permanent +-- Type 3 = Timer de cooldown +-- Type 4 = Timer de malédiction +-- Type 5 = Timer de combat + +NECROSIS_ITEM = { + ["Soulshard"] = "Fragment d'\195\162me", + ["Soulstone"] = "Pierre d'\195\162me", + ["Healthstone"] = "Pierre de soins", + ["Spellstone"] = "Pierre de sort", + ["Firestone"] = "Pierre de feu", + ["Offhand"] = "Tenu en main gauche", + ["Twohand"] = "Deux mains", + ["InfernalStone"] = "Pierre infernale", + ["DemoniacStone"] = "Figurine d\195\169moniaque", + ["Hearthstone"] = "Pierre de foyer", + ["SoulPouch"] = {"Bourse d'\195\162me", "Sac en gangr\195\169toffe", "Sac en gangr\195\169toffe du Magma"} +}; + + +NECROSIS_STONE_RANK = { + [1] = " (mineure)", -- Rank Minor + [2] = " (inf\195\169rieure)", -- Rank Lesser + [3] = "", -- Rank Intermediate, no name + [4] = " (sup\195\169rieure)", -- Rank Greater + [5] = " (majeure)" -- Rank Major +}; + +NECROSIS_NIGHTFALL = { + ["BoltName"] = "Trait", + ["ShadowTrance"] = "Transe de l'ombre", +}; + +NECROSIS_CREATE = { + [1] = "Cr\195\169ation de Pierre d'\195\162me", + [2] = "Cr\195\169ation de Pierre de soins", + [3] = "Cr\195\169ation de Pierre de sort", + [4] = "Cr\195\169ation de Pierre de feu" +}; + +NECROSIS_PET_LOCAL_NAME = { + [1] = "Diablotin", + [2] = "Marcheur du Vide", + [3] = "Succube", + [4] = "Chasseur corrompu", + [5] = "Infernal", + [6] = "Garde funeste" +}; + +NECROSIS_TRANSLATION = { + ["Cooldown"] = "Temps", + ["Hearth"] = "Pierre de foyer", + ["Rank"] = "Rang", + ["Invisible"] = "D\195\169tection de l'invisibilit\195\169", + ["LesserInvisible"] = "D\195\169tection de l'invisibilit\195\169 inf\195\169rieure", + ["GreaterInvisible"] = "D\195\169tection de l'invisibilit\195\169 sup\195\169rieure", + ["SoulLinkGain"] = "Vous gagnez Lien spirituel.", + ["SacrificeGain"] = "Vous gagnez Sacrifice.", + ["SummoningRitual"] = "Rituel d'invocation" +}; + +end diff --git a/Localization.lua b/Localization.lua new file mode 100644 index 0000000..d060ad4 --- /dev/null +++ b/Localization.lua @@ -0,0 +1,35 @@ +------------------------------------------------------------------------------------------------------ +-- Necrosis LdC +-- +-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +-- Implémentation de base (FR) : Tilienna Thorondor +-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas +-- +-- Skins et voix Françaises : Eliah, Ner'zhul +-- Version Allemande par Arne Meier et Halisstra, Lothar +-- Remerciements spéciaux pour Sadyre (JoL) +-- Version 05.09.2006-1 +------------------------------------------------------------------------------------------------------ + + + +NecrosisData = {}; +NecrosisData.Version = "1.5.2a"; +NecrosisData.Author = "Lomig & Nyx"; +NecrosisData.AppName = "Necrosis"; +NecrosisData.Label = NecrosisData.AppName.." "..NecrosisData.Version.." by "..NecrosisData.Author; + + +-- Raccourcis claviers +BINDING_HEADER_NECRO_BIND = "Necrosis"; + +BINDING_NAME_SOULSTONE = "Pierre d'\195\162me / Soulstone"; +BINDING_NAME_HEALTHSTONE = "Pierre de soins / Healthstone"; +BINDING_NAME_SPELLSTONE = "Pierre de sort / Spellstone"; +BINDING_NAME_FIRESTONE = "Pierre de feu / Firestone"; +BINDING_NAME_STEED = "Monture / Steed"; +BINDING_NAME_WARD = "Gardien de l'ombre / Shadow Ward"; +BINDING_NAME_BANISH = "Bannir / Ban"; +BINDING_NAME_LIFETAP = "Connexion / Life tap"; +BINDING_NAME_REDOCURSE = "Relancer la mal\195\169diction / Recast the last curse"; + diff --git a/Necrosis.lua b/Necrosis.lua new file mode 100644 index 0000000..c06c249 --- /dev/null +++ b/Necrosis.lua @@ -0,0 +1,3188 @@ +------------------------------------------------------------------------------------------------------ +-- Necrosis LdC +-- +-- Créateur initial (US) : Infernal (http://www.revolvus.com/games/interface/necrosis/) +-- Implémentation de base (FR) : Tilienna Thorondor +-- Reprise du projet : Lomig & Nyx des Larmes de Cenarius, Kael'Thas +-- +-- Skins et voix Françaises : Eliah, Ner'zhul +-- Version Allemande par Arne Meier et Halisstra, Lothar +-- Remerciements spéciaux pour Sadyre (JoL) +-- Version 05.09.2006-1 +------------------------------------------------------------------------------------------------------ + +-- Configuration par défaut +-- Se charge en cas d'absence de configuration ou de changement de version +Default_NecrosisConfig = { + Version = NecrosisData.Version; + SoulshardContainer = 4; + SoulshardSort = false; + SoulshardDestroy = false; + ShadowTranceAlert = true; + ShowSpellTimers = true; + AntiFearAlert = true; + NecrosisLockServ = true; + NecrosisAngle = 180; + StonePosition = {true, true, true, true, true, true, true, true}; + NecrosisToolTip = true; + NoDragAll = false; + PetMenuPos = 34; + BuffMenuPos = 34; + CurseMenuPos = 34; + ChatMsg = true; + ChatType = true; + NecrosisLanguage = GetLocale(); + ShowCount = true; + CountType = 1; + ShadowTranceScale = 100; + NecrosisButtonScale = 90; + NecrosisColor = "Rose"; + Sound = true; + SpellTimerPos = 1; + SpellTimerJust = "LEFT"; + Circle = 1; + Graphical = true; + Yellow = true; + SensListe = 1; + PetName = { + [1] = " ", + [2] = " ", + [3] = " ", + [4] = " " + }; + DominationUp = false; + AmplifyUp = false; + SM = false; + SteedSummon = false; + DemonSummon = true; + BanishScale = 100; +}; + +NecrosisConfig = {}; +local Debug = false; +local Loaded = false + +-- Détection des initialisations du mod +local NecrosisRL = true; + +-- Initialisation des variables utilisées par Necrosis pour la gestion des sorts lancés +local SpellCastName = nil; +local SpellCastRank = nil; +local SpellTargetName = nil; +local SpellTargetLevel = nil; +local SpellCastTime = 0; + +-- Initialisation des tableaux gérant les Timers +-- Un pour les sorts à timer, l'autre pour les groupes de mobs +-- Le dernier permet l'association d'un timer à une frame graphique +SpellTimer = {}; +local SpellGroup = { + Name = {"Rez", "Main", "Cooldown"}, + SubName = {" ", " ", " "}, + Visible = {true, true, true} +}; + +local TimerTable = {}; +for i = 1, 50, 1 do + TimerTable[i] = false; +end + +-- Menus : Permet l'affichage des menus de buff et de pet +local PetShow = false; +local PetMenuShow = false; +local BuffShow = false; +local BuffMenuShow = false; +local CurseShow = false; +local CurseMenuShow = false; + +-- Menus : Permet la disparition progressive du menu des pets (transparence) +local AlphaPetMenu = 1; +local AlphaPetVar = 0; +local PetVisible = false; + +-- Menus : Permet la disparition progressive du menu des buffs (transparence) +local AlphaBuffMenu = 1; +local AlphaBuffVar = 0; +local BuffVisible = false; + +-- Menus : Permet la disparition progressive du menu des curses (transparence) +local AlphaCurseMenu = 1; +local AlphaCurseVar = 0; +local CurseVisible = false; + +-- Menus : Permet de recaster le dernier cast du menu en cliquant milieu sur celui-ci +local LastDemon = 0; +local LastBuff = 0; +local LastCurse = 0; +local LastCurseClick = "LeftButton"; + +-- Liste des boutons disponible pour le démoniste dans chaque menu +local PetMenuCreate = {}; +local BuffMenuCreate = {}; +local CurseMenuCreate = {}; + +-- Variables utilisées pour la gestion des montures +local MountAvailable = false; +local NecrosisMounted = false; +local NecrosisTellMounted = true; +local PlayerCombat = false; + +-- Variables utilisées pour la gestion des transes de l'ombre +local ShadowTrance = false; +local AntiFearInUse = false; +local ShadowTranceID = -1; + +-- Variables utilisées pour la gestion des fragments d'âme +-- (principalement comptage) +local Soulshards = 0; +local SoulshardContainer = 4; +local SoulshardSlot = {}; +local SoulshardSlotID = 1; +local SoulshardMP = 0; +local SoulshardTime = 0; + +-- Variables utilisées pour la gestion des composants d'invocation +-- (principalement comptage) +local InfernalStone = 0; +local DemoniacStone = 0; + + +-- Variables utilisées pour la gestion des boutons d'invocation et d'utilisation des pierres +local StoneIDInSpellTable = {0, 0, 0, 0} +local SoulstoneUsedOnTarget = false; +local SoulstoneOnHand = false; +local SoulstoneLocation = {nil,nil}; +local SoulstoneMode = 1; +local HealthstoneOnHand = false; +local HealthstoneLocation = {nil,nil}; +local HealthstoneMode = 1; +local FirestoneOnHand = false; +local FirestoneLocation = {nil,nil}; +local FirestoneMode = 1; +local SpellstoneOnHand = false; +local SpellstoneLocation = {nil,nil}; +local SpellstoneMode = 1; +local HearthstoneOnHand = false; +local HearthstoneLocation = {nil,nil}; +local ItemswitchLocation = {nil,nil}; +local ItemOnHand = false; + +-- Variables gérant la possibilité ou l'impossibilité d'utiliser un timer de rez +local SoulstoneWaiting = false; +local SoulstoneCooldown = false; +local SoulstoneAdvice = false; +local SoulstoneTarget = ""; + +-- Variables utilisées dans la gestion des démons +local DemonType = nil; +local DemonEnslaved = false; + +-- Variables utilisées pour l'anti-fear +local AFblink1, AFBlink2 = 0; +local AFImageType = { "", "Immu", "Prot"}; -- Fear warning button filename variations +local AFCurrentTargetImmune = false; + +-- Variables utilisées pour les échanges de pierre avec les joueurs +local NecrosisTradeRequest = false; +local Trading = false; +local TradingNow = 0; + +-- Gestion des sacs à fragment d'âme +local BagIsSoulPouch = {nil, nil, nil, nil, nil}; + +-- Variable contenant les derniers messages invoqués +local PetMess = 0 +local SteedMess = 0 +local RezMess = 0 +local TPMess = 0 + +-- Permet la gestion des tooltips dans Necrosis (sans la frame des pièces de monnaie) +local lOriginal_GameTooltip_ClearMoney; + +local Necrosis_In = true; + +------------------------------------------------------------------------------------------------------ +-- FONCTIONS NECROSIS APPLIQUEES A L'ENTREE DANS LE JEU +------------------------------------------------------------------------------------------------------ + + +-- Fonction appliquée au chargement +function Necrosis_OnLoad() + + -- Permet de repérer les sorts lancés + Necrosis_Hook("UseAction", "Necrosis_UseAction", "before"); + Necrosis_Hook("CastSpell", "Necrosis_CastSpell", "before"); + Necrosis_Hook("CastSpellByName", "Necrosis_CastSpellByName", "before"); + + -- Enregistrement des événements interceptés par Necrosis + this:RegisterEvent("PLAYER_ENTERING_WORLD"); + this:RegisterEvent("PLAYER_LEAVING_WORLD"); + NecrosisButton:RegisterEvent("BAG_UPDATE"); + NecrosisButton:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS"); + NecrosisButton:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_SELF"); + NecrosisButton:RegisterEvent("CHAT_MSG_SPELL_BREAK_AURA"); + NecrosisButton:RegisterEvent("PLAYER_REGEN_DISABLED"); + NecrosisButton:RegisterEvent("PLAYER_REGEN_ENABLED"); + NecrosisButton:RegisterEvent("UNIT_PET"); + NecrosisButton:RegisterEvent("SPELLCAST_START"); + NecrosisButton:RegisterEvent("SPELLCAST_FAILED"); + NecrosisButton:RegisterEvent("SPELLCAST_INTERRUPTED"); + NecrosisButton:RegisterEvent("SPELLCAST_STOP"); + NecrosisButton:RegisterEvent("LEARNED_SPELL_IN_TAB"); + NecrosisButton:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE"); + NecrosisButton:RegisterEvent("PLAYER_TARGET_CHANGED"); + NecrosisButton:RegisterEvent("TRADE_REQUEST"); + NecrosisButton:RegisterEvent("TRADE_REQUEST_CANCEL"); + NecrosisButton:RegisterEvent("TRADE_SHOW"); + NecrosisButton:RegisterEvent("TRADE_CLOSED"); + + -- Enregistrement des composants graphiques + NecrosisButton:RegisterForDrag("LeftButton"); + NecrosisButton:RegisterForClicks("LeftButtonUp", "RightButtonUp"); + NecrosisButton:SetFrameLevel(1); + + -- Enregistrement de la commande console + SlashCmdList["NecrosisCommand"] = Necrosis_SlashHandler; + SLASH_NecrosisCommand1 = "/necro"; +end + + +-- Fonction appliquée une fois les paramètres des mods chargés +function Necrosis_LoadVariables() + if Loaded or UnitClass("player") ~= NECROSIS_UNIT_WARLOCK then + return + end + + Necrosis_Initialize(); + Loaded = true ; + + -- Détection du type de démon présent à la connexion + DemonType = UnitCreatureFamily("pet"); +end + +------------------------------------------------------------------------------------------------------ +-- FONCTIONS NECROSIS +------------------------------------------------------------------------------------------------------ + +-- Fonction lancée à la mise à jour de l'interface (main) -- toutes les 0,1 secondes environ +function Necrosis_OnUpdate() + + -- La fonction n'est utilisée que si Necrosis est initialisé et le joueur un Démoniste -- + if (not Loaded) and UnitClass("player") ~= NECROSIS_UNIT_WARLOCK then + return; + end + -- La fonction n'est utilisée que si Necrosis est initialisé et le joueur un Démoniste -- + + + -- Gestion des fragments d'âme : Tri des fragment toutes les secondes + local curTime = GetTime(); + if ((curTime-SoulshardTime) >= 1) then + SoulshardTime = curTime; + if (SoulshardMP > 0) then + Necrosis_SoulshardSwitch("MOVE"); + end + end + + ---------------------------------------------------------- + -- Gestion des sorts du Démoniste + ---------------------------------------------------------- + + -- Gestion du menu d'invocation des démons + if PetShow then + if GetTime() >= AlphaPetVar and AlphaPetMenu > 0 and (not PetVisible) then + AlphaPetVar = GetTime() + 0.1; + NecrosisPetMenu1:SetAlpha(AlphaPetMenu); + NecrosisPetMenu2:SetAlpha(AlphaPetMenu); + NecrosisPetMenu3:SetAlpha(AlphaPetMenu); + NecrosisPetMenu4:SetAlpha(AlphaPetMenu); + NecrosisPetMenu5:SetAlpha(AlphaPetMenu); + NecrosisPetMenu6:SetAlpha(AlphaPetMenu); + NecrosisPetMenu7:SetAlpha(AlphaPetMenu); + NecrosisPetMenu8:SetAlpha(AlphaPetMenu); + NecrosisPetMenu9:SetAlpha(AlphaPetMenu); + AlphaPetMenu = AlphaPetMenu - 0.1; + end + if AlphaPetMenu <= 0 then + Necrosis_PetMenu(); + end + end + + -- Gestion du menu des Buffs + if BuffShow then + if GetTime() >= AlphaBuffVar and AlphaBuffMenu > 0 and (not BuffVisible) then + AlphaBuffVar = GetTime() + 0.1; + NecrosisBuffMenu1:SetAlpha(AlphaBuffMenu); + NecrosisBuffMenu2:SetAlpha(AlphaBuffMenu); + NecrosisBuffMenu3:SetAlpha(AlphaBuffMenu); + NecrosisBuffMenu4:SetAlpha(AlphaBuffMenu); + NecrosisBuffMenu5:SetAlpha(AlphaBuffMenu); + NecrosisBuffMenu6:SetAlpha(AlphaBuffMenu); + NecrosisBuffMenu7:SetAlpha(AlphaBuffMenu); + NecrosisBuffMenu8:SetAlpha(AlphaBuffMenu); + NecrosisBuffMenu9:SetAlpha(AlphaBuffMenu); + AlphaBuffMenu = AlphaBuffMenu - 0.1; + end + if AlphaBuffMenu <= 0 then + Necrosis_BuffMenu(); + end + end + + -- Gestion du menu des Curses + if CurseShow then + if GetTime() >= AlphaCurseVar and AlphaCurseMenu > 0 and (not CurseVisible) then + AlphaCurseVar = GetTime() + 0.1; + NecrosisCurseMenu1:SetAlpha(AlphaCurseMenu); + NecrosisCurseMenu2:SetAlpha(AlphaCurseMenu); + NecrosisCurseMenu3:SetAlpha(AlphaCurseMenu); + NecrosisCurseMenu4:SetAlpha(AlphaCurseMenu); + NecrosisCurseMenu5:SetAlpha(AlphaCurseMenu); + NecrosisCurseMenu6:SetAlpha(AlphaCurseMenu); + NecrosisCurseMenu7:SetAlpha(AlphaCurseMenu); + NecrosisCurseMenu8:SetAlpha(AlphaCurseMenu); + NecrosisCurseMenu9:SetAlpha(AlphaCurseMenu); + AlphaCurseMenu = AlphaCurseMenu - 0.1; + end + if AlphaCurseMenu <= 0 then + Necrosis_CurseMenu(); + end + end + + -- Gestion du talent "Crépuscule" + if NecrosisConfig.ShadowTranceAlert then + local Actif = false; + local TimeLeft = 0; + Necrosis_UnitHasTrance(); + if ShadowTranceID ~= -1 then Actif = true; end + if Actif and not ShadowTrance then + ShadowTrance = true; + Necrosis_Msg(NECROSIS_NIGHTFALL_TEXT.Message, "USER"); + if NecrosisConfig.Sound then PlaySoundFile(NECROSIS_SOUND.ShadowTrance); end + local ShadowTranceIndex, cancel = GetPlayerBuff(ShadowTranceID,"HELPFUL|HARMFUL|PASSIVE"); + TimeLeft = floor(GetPlayerBuffTimeLeft(ShadowTranceIndex)); + NecrosisShadowTranceTimer:SetText(TimeLeft); + ShowUIPanel(NecrosisShadowTranceButton); + end + if not Actif and ShadowTrance then + HideUIPanel(NecrosisShadowTranceButton); + ShadowTrance = false; + end + if Actif and ShadowTrance then + local ShadowTranceIndex, cancel = GetPlayerBuff(ShadowTranceID,"HELPFUL|HARMFUL|PASSIVE"); + TimeLeft = floor(GetPlayerBuffTimeLeft(ShadowTranceIndex)); + NecrosisShadowTranceTimer:SetText(TimeLeft); + end + end + + -- Gestion des Antifears + if NecrosisConfig.AntiFearAlert then + local Actif = false; -- must be False, or a number from 1 to AFImageType[] max element. + + -- Checking if we have a target. Any fear need a target to be casted on + if UnitExists("target") and UnitCanAttack("player", "target") and not UnitIsDead("target") then + -- Checking if the target has natural immunity (only NPC target) + if not UnitIsPlayer("target") then + for index=1, table.getn(NECROSIS_ANTI_FEAR_UNIT), 1 do + if (UnitCreatureType("target") == NECROSIS_ANTI_FEAR_UNIT[index] ) then + Actif = 2; -- Immun + break; + end + end + end + + -- We'll start to parse the target buffs, as his class doesn't give him natural permanent immunity + if not Actif then + for index=1, table.getn(NECROSIS_ANTI_FEAR_SPELL.Buff), 1 do + if Necrosis_UnitHasBuff("target",NECROSIS_ANTI_FEAR_SPELL.Buff[index]) then + Actif = 3; -- Prot + break; + end + end + + -- No buff found, let's try the debuffs + for index=1, table.getn(NECROSIS_ANTI_FEAR_SPELL.Debuff), 1 do + if Necrosis_UnitHasEffect("target",NECROSIS_ANTI_FEAR_SPELL.Debuff[index]) then + Actif = 3; -- Prot + break; + end + end + end + + -- an immunity has been detected before, but we still don't know why => show the button anyway + if AFCurrentTargetImmune and not Actif then + Actif = 1; + end + end + + if Actif then + -- Antifear button is currently not visible, we have to change that + if not AntiFearInUse then + AntiFearInUse = true; + Necrosis_Msg(NECROSIS_MESSAGE.Information.FearProtect, "USER"); + NecrosisAntiFearButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\AntiFear"..AFImageType[Actif].."-02"); + if NecrosisConfig.Sound then PlaySoundFile(NECROSIS_SOUND.Fear); end + ShowUIPanel(NecrosisAntiFearButton); + AFBlink1 = GetTime() + 0.6; + AFBlink2 = 2; + + -- Timer to make the button blink + elseif GetTime() >= AFBlink1 then + if AFBlink2 == 1 then + AFBlink2 = 2; + else + AFBlink2 = 1; + end + AFBlink1 = GetTime() + 0.4; + NecrosisAntiFearButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\AntiFear"..AFImageType[Actif].."-0"..AFBlink2); + end + + elseif AntiFearInUse then -- No antifear on target, but the button is still visible => gonna hide it + AntiFearInUse = false; + HideUIPanel(NecrosisAntiFearButton); + end + end + + -- Gestion du Timer des sorts + if (not NecrosisSpellTimerButton:IsVisible()) then + ShowUIPanel(NecrosisSpellTimerButton); + end + local display = ""; + + if NecrosisConfig.CountType == 3 then + NecrosisShardCount:SetText(""); + end + local update = false; + if ((curTime - SpellCastTime) >= 1) then + SpellCastTime = curTime; + update = true; + end + + -- On met à jour les boutons toutes les secondes + -- On accepte le trade de la pierre de soin si transfert en cours + if update then + if Trading then + TradingNow = TradingNow - 1; + if TradingNow == 0 then + AcceptTrade(); + Trading = false; + end + end + Necrosis_UpdateIcons(); + end + + -- Parcours du tableau des Timers + local GraphicalTimer = {texte = {}, TimeMax = {}, Time = {}, titre = {}, temps = {}, Gtimer = {}}; + if SpellTimer then + for index = 1, table.getn(SpellTimer), 1 do + if SpellTimer[index] then + if (GetTime() <= SpellTimer[index].TimeMax) then + -- Création de l'affichage des timers + display, SpellGroup, GraphicalTimer, TimerTable = Necrosis_DisplayTimer(display, index, SpellGroup, SpellTimer, GraphicalTimer, TimerTable); + end + -- Action toutes les secondes + if (update) then + -- On enlève les timers terminés + local TimeLocal = GetTime(); + if TimeLocal >= (SpellTimer[index].TimeMax - 0.5) and SpellTimer[index].TimeMax ~= -1 then + -- Si le timer était celui de la Pierre d'âme, on prévient le Démoniste + if SpellTimer[index].Name == NECROSIS_SPELL_TABLE[11].Name then + Necrosis_Msg(NECROSIS_MESSAGE.Information.SoulstoneEnd, "USER"); + SpellTimer[index].Target = ""; + SpellTimer[index].TimeMax = -1; + if NecrosisConfig.Sound then PlaySoundFile(NECROSIS_SOUND.SoulstoneEnd); end + Necrosis_RemoveFrame(SpellTimer[index].Gtimer, TimerTable); + -- On met à jour l'apparence du bouton de la pierre d'âme + Necrosis_UpdateIcons(); + -- Sinon on enlève le timer silencieusement (mais pas en cas d'enslave) + elseif SpellTimer[index].Name ~= NECROSIS_SPELL_TABLE[10].Name then + SpellTimer, TimerTable = Necrosis_RetraitTimerParIndex(index, SpellTimer, TimerTable); + index = 0; + break; + end + end + -- Si le Démoniste n'est plus sous l'emprise du Sacrifice + if SpellTimer and SpellTimer[index].Name == NECROSIS_SPELL_TABLE[17].Name then -- Sacrifice + if not Necrosis_UnitHasEffect("player", SpellTimer[index].Name) and SpellTimer[index].TimeMax ~= nil then + SpellTimer, TimerTable = Necrosis_RetraitTimerParIndex(index, SpellTimer, TimerTable); + index = 0; + break; + end + end + -- Si la cible visée n'est plus atteinte par un sort lancé [résists] + if SpellTimer and (SpellTimer[index].Type == 4 or SpellTimer[index].Type == 5) + and SpellTimer[index].Target == UnitName("target") + then + -- On triche pour laisser le temps au mob de bien sentir qu'il est débuffé ^^ + if TimeLocal >= ((SpellTimer[index].TimeMax - SpellTimer[index].Time) + 1.5) + and SpellTimer[index] ~= 6 then + if not Necrosis_UnitHasEffect("target", SpellTimer[index].Name) then + SpellTimer, TimerTable = Necrosis_RetraitTimerParIndex(index, SpellTimer, TimerTable); + index = 0; + break; + end + end + end + end + end + end + else + for i = 1, 10, 1 do + local frameName = "NecrosisTarget"..i.."Text"; + local frameItem = getglobal(frameName); + if frameItem:IsShown() then + frameItem:Hide(); + end + end + end + + if NecrosisConfig.ShowSpellTimers or NecrosisConfig.Graphical then + -- Si affichage de timer texte + if not NecrosisConfig.Graphical then + -- Coloration de l'affichage des timers + display = Necrosis_MsgAddColor(display); + -- Affichage des timers + NecrosisListSpells:SetText(display); + else + NecrosisListSpells:SetText(""); + end + for i = 4, table.getn(SpellGroup.Name) do + SpellGroup.Visible[i] = false; + end + else + if (NecrosisSpellTimerButton:IsVisible()) then + NecrosisListSpells:SetText(""); + HideUIPanel(NecrosisSpellTimerButton); + end + end +end + +-- Fonction lancée selon l'événement intercepté +function Necrosis_OnEvent(event) + if (event == "PLAYER_ENTERING_WORLD") then + Necrosis_In = true; + elseif (event == "PLAYER_LEAVING_WORLD") then + Necrosis_In = false; + end + + -- Traditionnel test : Le joueur est-il bien Démoniste ? + -- Le jeu est-il bine chargé ? + if (not Loaded) or (not Necrosis_In) or UnitClass("player") ~= NECROSIS_UNIT_WARLOCK then + return; + end + + -- Si le contenu des sacs a changé, on vérifie que les Fragments d'âme sont toujours dans le bon sac + if (event == "BAG_UPDATE") then + if (NecrosisConfig.SoulshardSort) then + Necrosis_SoulshardSwitch("CHECK"); + else + Necrosis_BagExplore(); + end + -- Gestion de la fin de l'incantation des sorts + elseif (event == "SPELLCAST_STOP") then + Necrosis_SpellManagement(); + -- Quand le démoniste commence à incanter un sort, on intercepte le nom de celui-ci + -- On sauve également le nom de la cible du sort ainsi que son niveau + elseif (event == "SPELLCAST_START") then + SpellCastName = arg1; + SpellTargetName = UnitName("target"); + if not SpellTargetName then + SpellTargetName = ""; + end + SpellTargetLevel = UnitLevel("target"); + if not SpellTargetLevel then + SpellTargetLevel = ""; + end + -- Quand le démoniste stoppe son incantation, on relache le nom de celui-ci + elseif (event == "SPELLCAST_FAILED") or (event == "SPELLCAST_INTERRUPTED") then + SpellCastName = nil; + SpellCastRank = nil; + SpellTargetName = nil; + SpellTargetLevel = nil; + -- Flag si une fenetre de Trade est ouverte, afin de pouvoir trader automatiquement les pierres de soin + elseif event == "TRADE_REQUEST" or event == "TRADE_SHOW" then + NecrosisTradeRequest = true; + elseif event == "TRADE_REQUEST_CANCEL" or event == "TRADE_CLOSED" then + NecrosisTradeRequest = false; + -- AntiFear button hide on target change + elseif event == "PLAYER_TARGET_CHANGED" then + if NecrosisConfig.AntiFearAlert and AFCurrentTargetImmune then + AFCurrentTargetImmune = false; + end + -- AntiFear immunity on cast detection + elseif event == "CHAT_MSG_SPELL_SELF_DAMAGE" then + if NecrosisConfig.AntiFearAlert then + for spell, creatureName in string.gfind(arg1, NECROSIS_ANTI_FEAR_SRCH) do + -- We check if the casted spell on the immune target is Fear or Death Coil + if spell == NECROSIS_SPELL_TABLE[13].Name or spell == NECROSIS_SPELL_TABLE[19].Name then + AFCurrentTargetImmune = true; + break; + end + end + end + + -- Si le Démoniste apprend un nouveau sort / rang de sort, on récupère la nouvelle liste des sorts + -- Si le Démoniste apprend un nouveau sort de buff ou d'invocation, on recrée les boutons + elseif (event == "LEARNED_SPELL_IN_TAB") then + Necrosis_SpellSetup(); + Necrosis_CreateMenu(); + Necrosis_ButtonSetup(); + + -- A la fin du combat, on arrête de signaler le Crépuscule + -- On enlève les timers de sorts ainsi que les noms des mobs + elseif (event == "PLAYER_REGEN_ENABLED") then + PlayerCombat = false; + SpellGroup, SpellTimer, TimerTable = Necrosis_RetraitTimerCombat(SpellGroup, SpellTimer, TimerTable); + for i = 1, 10, 1 do + local frameName = "NecrosisTarget"..i.."Text"; + local frameItem = getglobal(frameName); + if frameItem:IsShown() then + frameItem:Hide(); + end + end + -- Quand le démoniste change de démon + elseif (event == "UNIT_PET" and arg1 == "player") then + Necrosis_ChangeDemon(); + -- Actions personnelles -- "Buffs" + elseif (event == "CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS") then + Necrosis_SelfEffect("BUFF"); + -- Actions personnelles -- "Debuffs" + elseif event == "CHAT_MSG_SPELL_AURA_GONE_SELF" or event == "CHAT_MSG_SPELL_BREAK_AURA" then + Necrosis_SelfEffect("DEBUFF"); + elseif event == "PLAYER_REGEN_DISABLED" then + PlayerCombat = true; + -- Fin de l'écran de chargement + end + return; +end + +------------------------------------------------------------------------------------------------------ +-- FONCTIONS NECROSIS "ON EVENT" +------------------------------------------------------------------------------------------------------ + +-- Events : PLAYER_ENTERING_WORLD et PLAYER_LEAVING_WORLD +-- Fonction appliquée à chaque écran de chargement +-- Quand on sort d'une zone, on arrête de surveiller les envents +-- Quand on rentre dans une zone, on reprend la surveillance +-- Cela permet d'éviter un temps de chargement trop long du mod +function Necrosis_RegisterManagement(RegistrationType) + if RegistrationType == "IN" then + NecrosisButton:RegisterEvent("BAG_UPDATE"); + NecrosisButton:RegisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS"); + NecrosisButton:RegisterEvent("CHAT_MSG_SPELL_AURA_GONE_SELF"); + NecrosisButton:RegisterEvent("CHAT_MSG_SPELL_BREAK_AURA"); + NecrosisButton:RegisterEvent("PLAYER_REGEN_DISABLED"); + NecrosisButton:RegisterEvent("PLAYER_REGEN_ENABLED"); + NecrosisButton:RegisterEvent("UNIT_PET"); + NecrosisButton:RegisterEvent("SPELLCAST_START"); + NecrosisButton:RegisterEvent("SPELLCAST_FAILED"); + NecrosisButton:RegisterEvent("SPELLCAST_INTERRUPTED"); + NecrosisButton:RegisterEvent("SPELLCAST_STOP"); + NecrosisButton:RegisterEvent("LEARNED_SPELL_IN_TAB"); + NecrosisButton:RegisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE"); + NecrosisButton:RegisterEvent("PLAYER_TARGET_CHANGED"); + NecrosisButton:RegisterEvent("TRADE_REQUEST"); + NecrosisButton:RegisterEvent("TRADE_REQUEST_CANCEL"); + NecrosisButton:RegisterEvent("TRADE_SHOW"); + NecrosisButton:RegisterEvent("TRADE_CLOSED"); + else + NecrosisButton:UnregisterEvent("BAG_UPDATE"); + NecrosisButton:UnregisterEvent("CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS"); + NecrosisButton:UnregisterEvent("CHAT_MSG_SPELL_AURA_GONE_SELF"); + NecrosisButton:UnregisterEvent("CHAT_MSG_SPELL_BREAK_AURA"); + NecrosisButton:UnregisterEvent("PLAYER_REGEN_DISABLED"); + NecrosisButton:UnregisterEvent("PLAYER_REGEN_ENABLED"); + NecrosisButton:UnregisterEvent("UNIT_PET"); + NecrosisButton:UnregisterEvent("SPELLCAST_START"); + NecrosisButton:UnregisterEvent("SPELLCAST_FAILED"); + NecrosisButton:UnregisterEvent("SPELLCAST_INTERRUPTED"); + NecrosisButton:UnregisterEvent("SPELLCAST_STOP"); + NecrosisButton:UnregisterEvent("LEARNED_SPELL_IN_TAB"); + NecrosisButton:UnregisterEvent("CHAT_MSG_SPELL_SELF_DAMAGE"); + NecrosisButton:UnregisterEvent("PLAYER_TARGET_CHANGED"); + NecrosisButton:UnregisterEvent("TRADE_REQUEST"); + NecrosisButton:UnregisterEvent("TRADE_REQUEST_CANCEL"); + NecrosisButton:UnregisterEvent("TRADE_SHOW"); + NecrosisButton:UnregisterEvent("TRADE_CLOSED"); + end + return; +end + +-- event : UNIT_PET +-- Permet de timer les asservissements, ainsi que de prévenir pour les ruptures d'asservissement +-- Change également le nom du pet au remplacement de celui-ci +function Necrosis_ChangeDemon() + -- Si le nouveau démon est un démon asservi, on place un timer de 5 minutes + if (Necrosis_UnitHasEffect("pet", NECROSIS_SPELL_TABLE[10].Name)) then + if (not DemonEnslaved) then + DemonEnslaved = true; + SpellGroup, SpellTimer, TimerTable = Necrosis_InsertTimerParTable(10, "","", SpellGroup, SpellTimer, TimerTable); + end + else + -- Quand le démon asservi est perdu, on retire le Timer et on prévient le Démoniste + if (DemonEnslaved) then + DemonEnslaved = false; + SpellTimer, TimerTable = Necrosis_RetraitTimerParNom(NECROSIS_SPELL_TABLE[10].Name, SpellTimer, TimerTable); + if NecrosisConfig.Sound then PlaySoundFile(NECROSIS_SOUND.EnslaveEnd); end + Necrosis_Msg(NECROSIS_MESSAGE.Information.EnslaveBreak, "USER"); + end + end + + -- Si le démon n'est pas asservi on définit son titre, et on met à jour son nom dans Necrosis + DemonType = UnitCreatureFamily("pet"); + for i = 1, 4, 1 do + if DemonType == NECROSIS_PET_LOCAL_NAME[i] and NecrosisConfig.PetName[i] == " " and UnitName("pet") ~= UNKNOWNOBJECT then + NecrosisConfig.PetName[i] = UnitName("pet"); + NecrosisLocalization(); + break; + end + end + + return; +end + +-- events : CHAT_MSG_SPELL_PERIODIC_SELF_BUFFS, CHAT_MSG_SPELL_AURA_GONE_SELF et CHAT_MSG_SPELL_BREAK_AURA +-- Permet de gérer les effets apparaissants et disparaissants sur le démoniste +-- Basé sur le CombatLog +function Necrosis_SelfEffect(action) + if action == "BUFF" then + -- Insertion d'un timer quand le Démoniste subit "Sacrifice" + if arg1 == NECROSIS_TRANSLATION.SacrificeGain then + SpellGroup, SpellTimer, TimerTable = Necrosis_InsertTimerParTable(17, "", "", SpellGroup, SpellTimer, TimerTable); + end + -- Changement du bouton de monture quand le Démoniste chevauche + if string.find(arg1, NECROSIS_SPELL_TABLE[1].Name) or string.find(arg1, NECROSIS_SPELL_TABLE[2].Name) then + NecrosisMounted = true; + if NecrosisConfig.SteedSummon and NecrosisTellMounted + and NecrosisConfig.ChatMsg and NECROSIS_PET_MESSAGE[6] and not NecrosisConfig.SM + then + local tempnum = random(1, table.getn(NECROSIS_PET_MESSAGE[6])); + while tempnum == SteedMess and table.getn(NECROSIS_PET_MESSAGE[6]) >= 2 do + tempnum = random(1, table.getn(NECROSIS_PET_MESSAGE[6])); + end + SteedMess = tempnum; + for i = 1, table.getn(NECROSIS_PET_MESSAGE[6][tempnum]) do + Necrosis_Msg(Necrosis_MsgReplace(NECROSIS_PET_MESSAGE[6][tempnum][i]), "SAY"); + end + NecrosisTellMounted = false; + end + NecrosisMountButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\MountButton-02"); + + end + -- Changement du bouton de la domination corrompue si celle-ci est activée + Timer de cooldown + if string.find(arg1, NECROSIS_SPELL_TABLE[15].Name) and NECROSIS_SPELL_TABLE[15].ID ~= nil then + DominationUp = true; + NecrosisPetMenu1:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Domination-02"); + end + -- Changement du bouton de la malédiction amplifiée si celle-ci est activée + Timer de cooldown + if string.find(arg1, NECROSIS_SPELL_TABLE[42].Name) and NECROSIS_SPELL_TABLE[42].ID ~= nil then + AmplifyUp = true; + NecrosisCurseMenu1:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Amplify-02"); + end + else + -- Changement du bouton de monture quand le Démoniste est démonté + if string.find(arg1, NECROSIS_SPELL_TABLE[1].Name) or string.find(arg1, NECROSIS_SPELL_TABLE[2].Name) then + NecrosisMounted = false; + NecrosisTellMounted = true; + NecrosisMountButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\MountButton-01"); + end + -- Changement du bouton de Domination quand le Démoniste n'est plus sous son emprise + if string.find(arg1, NECROSIS_SPELL_TABLE[15].Name) and NECROSIS_SPELL_TABLE[15].ID ~= nil then + DominationUp = false; + NecrosisPetMenu1:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Domination-01"); + end + -- Changement du bouton de la malédiction amplifiée quand le Démoniste n'est plus sous son emprise + if string.find(arg1, NECROSIS_SPELL_TABLE[42].Name) and NECROSIS_SPELL_TABLE[42].ID ~= nil then + AmplifyUp = false; + NecrosisCurseMenu1:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Amplify-01"); + end + end + return; +end + +-- event : SPELLCAST_STOP +-- Permet de gérer tout ce qui touche aux sorts une fois leur incantation réussie +function Necrosis_SpellManagement() + local SortActif = false; + if (SpellCastName) then + -- Si le sort lancé à été une Résurrection de Pierre d'âme, on place un timer + if (SpellCastName == NECROSIS_SPELL_TABLE[11].Name) then + if SpellTargetName == UnitName("player") then + SpellTargetName = ""; + end + -- Si les messages sont actifs et que la pierre est posée sur un joueur ciblé, hop, message ! + if (NecrosisConfig.ChatMsg or NecrosisConfig.SM) + and SoulstoneUsedOnTarget then + SoulstoneTarget = SpellTargetName; + SoulstoneAdvice = true; + end + SpellGroup, SpellTimer, TimerTable = Necrosis_InsertTimerParTable(11, SpellTargetName, "", SpellGroup, SpellTimer, TimerTable); + -- Si le sort était un rituel d'invocation, alors on écrit une phrase a caractère informatif aux joueurs + elseif (SpellCastName == NECROSIS_TRANSLATION.SummoningRitual) + and (NecrosisConfig.ChatMsg or NecrosisConfig.SM) + and NECROSIS_INVOCATION_MESSAGES then + local tempnum = random(1, table.getn(NECROSIS_INVOCATION_MESSAGES)); + while tempnum == TPMess and table.getn(NECROSIS_INVOCATION_MESSAGES) >= 2 do + tempnum = random(1, table.getn(NECROSIS_INVOCATION_MESSAGES)); + end + TPMess = tempnum; + for i = 1, table.getn(NECROSIS_INVOCATION_MESSAGES[tempnum]) do + Necrosis_Msg(Necrosis_MsgReplace(NECROSIS_INVOCATION_MESSAGES[tempnum][i], SpellTargetName), "WORLD"); + end + -- Pour les autres sorts castés, tentative de timer si valable + else + for spell=1, table.getn(NECROSIS_SPELL_TABLE), 1 do + if SpellCastName == NECROSIS_SPELL_TABLE[spell].Name and not (spell == 10) then + -- Si le timer existe déjà sur la cible, on le met à jour + for thisspell=1, table.getn(SpellTimer), 1 do + if SpellTimer[thisspell].Name == SpellCastName + and SpellTimer[thisspell].Target == SpellTargetName + and SpellTimer[thisspell].TargetLevel == SpellTargetLevel + and NECROSIS_SPELL_TABLE[spell].Type ~= 4 + and spell ~= 16 + then + -- Si c'est sort lancé déjà présent sur un mob, on remet le timer à fond + if spell ~= 9 or (spell == 9 and not Necrosis_UnitHasEffect("target", SpellCastName)) then + SpellTimer[thisspell].Time = NECROSIS_SPELL_TABLE[spell].Length; + SpellTimer[thisspell].TimeMax = floor(GetTime() + NECROSIS_SPELL_TABLE[spell].Length); + if spell == 9 and SpellCastRank == 1 then + SpellTimer[thisspell].Time = 20; + SpellTimer[thisspell].TimeMax = floor(GetTime() + 20); + end + end + SortActif = true; + break; + end + -- Si c'est un banish sur une nouvelle cible, on supprime le timer précédent + if SpellTimer[thisspell].Name == SpellCastName and spell == 9 + and + (SpellTimer[thisspell].Target ~= SpellTargetName + or SpellTimer[thisspell].TargetLevel ~= SpellTargetLevel) + then + SpellTimer, TimerTable = Necrosis_RetraitTimerParIndex(thisspell, SpellTimer, TimerTable); + SortActif = false; + break; + end + + -- Si c'est un fear, on supprime le timer du fear précédent + if SpellTimer[thisspell].Name == SpellCastName and spell == 13 then + SpellTimer, TimerTable = Necrosis_RetraitTimerParIndex(thisspell, SpellTimer, TimerTable); + SortActif = false; + break; + end + if SortActif then break; end + end + -- Si le timer est une malédiction, on enlève la précédente malédiction sur la cible + if (NECROSIS_SPELL_TABLE[spell].Type == 4) or (spell == 16) then + for thisspell=1, table.getn(SpellTimer), 1 do + -- Mais on garde le cooldown de la malédiction funeste + if SpellTimer[thisspell].Name == NECROSIS_SPELL_TABLE[16].Name then + SpellTimer[thisspell].Target = ""; + SpellTimer[thisspell].TargetLevel = ""; + end + if SpellTimer[thisspell].Type == 4 + and SpellTimer[thisspell].Target == SpellTargetName + and SpellTimer[thisspell].TargetLevel == SpellTargetLevel + then + SpellTimer, TimerTable = Necrosis_RetraitTimerParIndex(thisspell, SpellTimer, TimerTable); + break; + end + end + SortActif = false; + end + if not SortActif + and NECROSIS_SPELL_TABLE[spell].Type ~= 0 + and spell ~= 10 + then + + if spell == 9 then + if SpellCastRank == 1 then + NECROSIS_SPELL_TABLE[spell].Length = 20; + else + NECROSIS_SPELL_TABLE[spell].Length = 30; + end + end + + SpellGroup, SpellTimer, TimerTable = Necrosis_InsertTimerParTable(spell, SpellTargetName, SpellTargetLevel, SpellGroup, SpellTimer, TimerTable); + break; + end + end + end + end + end + SpellCastName = nil; + SpellCastRank = nil; + return; +end + +------------------------------------------------------------------------------------------------------ +-- FONCTIONS DE L'INTERFACE -- LIENS XML +------------------------------------------------------------------------------------------------------ + +-- En cliquant droit sur Necrosis, on affiche ou masque les deux panneaux de configurations +function Necrosis_Toggle(button) + if button == "LeftButton" then + if NECROSIS_SPELL_TABLE[41].ID then + CastSpell(NECROSIS_SPELL_TABLE[41].ID, "spell"); + end + return; + elseif (NecrosisGeneralFrame:IsVisible()) then + HideUIPanel(NecrosisGeneralFrame); + return; + else + if NecrosisConfig.SM then + Necrosis_Msg("!!! Short Messages : On", "USER"); + end + ShowUIPanel(NecrosisGeneralFrame); + NecrosisGeneralTab_OnClick(1); + return; + end +end + +-- Fonction permettant le déplacement d'éléments de Necrosis sur l'écran +function Necrosis_OnDragStart(button) + if (button == "NecrosisIcon") then GameTooltip:Hide(); end + button:StartMoving(); +end + +-- Fonction arrêtant le déplacement d'éléments de Necrosis sur l'écran +function Necrosis_OnDragStop(button) + if (button == "NecrosisIcon") then Necrosis_BuildTooltip("OVERALL"); end + button:StopMovingOrSizing(); +end + +-- Fonction alternant Timers graphiques et Timers textes +function Necrosis_HideGraphTimer() + for i = 1, 50, 1 do + local elements = {"Text", "Bar", "Texture", "OutText"} + if NecrosisConfig.Graphical then + if TimerTable[i] then + for j = 1, 4, 1 do + frameName = "NecrosisTimer"..i..elements[j]; + frameItem = getglobal(frameName); + frameItem:Show(); + end + end + else + for j = 1, 4, 1 do + frameName = "NecrosisTimer"..i..elements[j]; + frameItem = getglobal(frameName); + frameItem:Hide(); + end + end + end +end + +-- Fonction gérant les bulles d'aide +function Necrosis_BuildTooltip(button, type, anchor) + + -- Si l'affichage des bulles d'aide est désactivé, Bye bye ! + if not NecrosisConfig.NecrosisToolTip then + return; + end + + -- On regarde si la domination corrompue, le gardien de l'ombre ou l'amplification de malédiction sont up (pour tooltips) + local start, duration, start2, duration2, start3, duration3 + if NECROSIS_SPELL_TABLE[15].ID then + start, duration = GetSpellCooldown(NECROSIS_SPELL_TABLE[15].ID, BOOKTYPE_SPELL); + else + start = 1; + duration = 1; + end + if NECROSIS_SPELL_TABLE[43].ID then + start2, duration2 = GetSpellCooldown(NECROSIS_SPELL_TABLE[43].ID, BOOKTYPE_SPELL); + else + start2 = 1; + duration2 = 1; + end + if NECROSIS_SPELL_TABLE[42].ID then + start3, duration3 = GetSpellCooldown(NECROSIS_SPELL_TABLE[42].ID, BOOKTYPE_SPELL); + else + start3 = 1; + duration3 = 1; + end + + -- Création des bulles d'aides.... + GameTooltip:SetOwner(button, anchor); + GameTooltip:SetText(NecrosisTooltipData[type].Label); + -- ..... pour le bouton principal + if (type == "Main") then + GameTooltip:AddLine(NecrosisTooltipData.Main.Soulshard..Soulshards); + GameTooltip:AddLine(NecrosisTooltipData.Main.InfernalStone..InfernalStone); + GameTooltip:AddLine(NecrosisTooltipData.Main.DemoniacStone..DemoniacStone); + GameTooltip:AddLine(NecrosisTooltipData.Main.Soulstone..NecrosisTooltipData[type].Stone[SoulstoneOnHand]); + GameTooltip:AddLine(NecrosisTooltipData.Main.Healthstone..NecrosisTooltipData[type].Stone[HealthstoneOnHand]); + -- On vérifie si une pierre de sort n'est pas équipée + NecrosisTooltip:SetInventoryItem("player", 17); + local rightHand = tostring(NecrosisTooltipTextLeft1:GetText()); + if string.find(rightHand, NECROSIS_ITEM.Spellstone) then SpellstoneOnHand = true; end + GameTooltip:AddLine(NecrosisTooltipData.Main.Spellstone..NecrosisTooltipData[type].Stone[SpellstoneOnHand]); + -- De même pour la pierre de feu + if string.find(rightHand, NECROSIS_ITEM.Firestone) then FirestoneOnHand = true; end + GameTooltip:AddLine(NecrosisTooltipData.Main.Firestone..NecrosisTooltipData[type].Stone[FirestoneOnHand]); + -- Affichage du nom du démon, ou s'il est asservi, ou "Aucun" si aucun démon n'est présent + if (DemonType) then + GameTooltip:AddLine(NecrosisTooltipData.Main.CurrentDemon..DemonType); + elseif DemonEnslaved then + GameTooltip:AddLine(NecrosisTooltipData.Main.EnslavedDemon); + else + GameTooltip:AddLine(NecrosisTooltipData.Main.NoCurrentDemon); + end + -- ..... pour les boutons de pierre + elseif (string.find(type, "stone")) then + -- Pierre d'âme + if (type == "Soulstone") then + -- On affiche le nom de la pierre et l'action que produira le clic sur le bouton + -- Et aussi le Temps de recharge + if SoulstoneMode == 1 or SoulstoneMode == 3 then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[StoneIDInSpellTable[1]].Mana.." Mana"); + end + Necrosis_MoneyToggle(); + NecrosisTooltip:SetBagItem(SoulstoneLocation[1], SoulstoneLocation[2]); + local itemName = tostring(NecrosisTooltipTextLeft6:GetText()); + GameTooltip:AddLine(NecrosisTooltipData[type].Text[SoulstoneMode]); + if string.find(itemName, NECROSIS_TRANSLATION.Cooldown) then + GameTooltip:AddLine(itemName); + end + -- Pierre de vie + elseif (type == "Healthstone") then + -- Idem + if HealthstoneMode == 1 then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[StoneIDInSpellTable[2]].Mana.." Mana"); + end + Necrosis_MoneyToggle(); + NecrosisTooltip:SetBagItem(HealthstoneLocation[1], HealthstoneLocation[2]); + local itemName = tostring(NecrosisTooltipTextLeft6:GetText()); + GameTooltip:AddLine(NecrosisTooltipData[type].Text[HealthstoneMode]); + if string.find(itemName, NECROSIS_TRANSLATION.Cooldown) then + GameTooltip:AddLine(itemName); + end + -- Pierre de sort + elseif (type == "Spellstone") then + -- Eadem + if SpellstoneMode == 1 then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[StoneIDInSpellTable[3]].Mana.." Mana"); + end + Necrosis_MoneyToggle(); + NecrosisTooltip:SetInventoryItem("player", 17); + local itemName = tostring(NecrosisTooltipTextLeft9:GetText()); + local itemStone = tostring(NecrosisTooltipTextLeft1:GetText()); + GameTooltip:AddLine(NecrosisTooltipData[type].Text[SpellstoneMode]); + if (string.find(itemStone, NECROSIS_ITEM.Spellstone) + and string.find(itemName, NECROSIS_TRANSLATION.Cooldown)) then + GameTooltip:AddLine(itemName); + end + -- Pierre de feu + elseif (type == "Firestone") then + -- Idem, mais sans le cooldown + if FirestoneMode == 1 then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[StoneIDInSpellTable[4]].Mana.." Mana"); + end + GameTooltip:AddLine(NecrosisTooltipData[type].Text[FirestoneMode]); + end + -- ..... pour le bouton des Timers + elseif (type == "SpellTimer") then + Necrosis_MoneyToggle(); + NecrosisTooltip:SetBagItem(HearthstoneLocation[1], HearthstoneLocation[2]); + local itemName = tostring(NecrosisTooltipTextLeft5:GetText()); + GameTooltip:AddLine(NecrosisTooltipData[type].Text); + if string.find(itemName, NECROSIS_TRANSLATION.Cooldown) then + GameTooltip:AddLine(NECROSIS_TRANSLATION.Hearth.." - "..itemName); + else + GameTooltip:AddLine(NecrosisTooltipData[type].Right..GetBindLocation()); + end + + -- ..... pour le bouton de la Transe de l'ombre + elseif (type == "ShadowTrance") then + local rank = Necrosis_FindSpellAttribute("Name", NECROSIS_NIGHTFALL.BoltName, "Rank"); + GameTooltip:SetText(NecrosisTooltipData[type].Label.." |CFF808080Rank "..rank.."|r"); + -- ..... pour les autres buffs et démons, le coût en mana... + elseif (type == "Enslave") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[35].Mana.." Mana"); + if Soulshards == 0 then + GameTooltip:AddLine("|c00FF4444"..NecrosisTooltipData.Main.Soulshard..Soulshards.."|r"); + end + elseif (type == "Mount") then + if NECROSIS_SPELL_TABLE[2].ID then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[2].Mana.." Mana"); + elseif NECROSIS_SPELL_TABLE[1].ID then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[1].Mana.." Mana"); + end + elseif (type == "Armor") then + if NECROSIS_SPELL_TABLE[31].ID then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[31].Mana.." Mana"); + else + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[36].Mana.." Mana"); + end + elseif (type == "Invisible") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[33].Mana.." Mana"); + elseif (type == "Aqua") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[32].Mana.." Mana"); + elseif (type == "Kilrogg") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[34].Mana.." Mana"); + elseif (type == "Banish") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[9].Mana.." Mana"); + elseif (type == "Weakness") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[23].Mana.." Mana"); + if not (start3 > 0 and duration3 > 0) then + GameTooltip:AddLine(NecrosisTooltipData.AmplifyCooldown); + end + elseif (type == "Agony") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[22].Mana.." Mana"); + if not (start3 > 0 and duration3 > 0) then + GameTooltip:AddLine(NecrosisTooltipData.AmplifyCooldown); + end + elseif (type == "Reckless") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[24].Mana.." Mana"); + elseif (type == "Tongues") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[25].Mana.." Mana"); + elseif (type == "Exhaust") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[40].Mana.." Mana"); + if not (start3 > 0 and duration3 > 0) then + GameTooltip:AddLine(NecrosisTooltipData.AmplifyCooldown); + end + elseif (type == "Elements") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[26].Mana.." Mana"); + elseif (type == "Shadow") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[27].Mana.." Mana"); + elseif (type == "Doom") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[16].Mana.." Mana"); + elseif (type == "Amplify") then + if start3 > 0 and duration3 > 0 then + local seconde = duration3 - ( GetTime() - start3) + local affiche, minute, time + if seconde <= 59 then + affiche = tostring(floor(seconde)).." sec"; + else + minute = tostring(floor(seconde/60)) + seconde = mod(seconde, 60); + if seconde <= 9 then + time = "0"..tostring(floor(seconde)); + else + time = tostring(floor(seconde)); + end + affiche = minute..":"..time; + end + GameTooltip:AddLine("Cooldown : "..affiche); + end + elseif (type == "TP") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[37].Mana.." Mana"); + if Soulshards == 0 then + GameTooltip:AddLine("|c00FF4444"..NecrosisTooltipData.Main.Soulshard..Soulshards.."|r"); + end + elseif (type == "SoulLink") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[38].Mana.." Mana"); + elseif (type == "ShadowProtection") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[43].Mana.." Mana"); + if start2 > 0 and duration2 > 0 then + local seconde = duration2 - ( GetTime() - start2) + local affiche + affiche = tostring(floor(seconde)).." sec"; + GameTooltip:AddLine("Cooldown : "..affiche); + end + elseif (type == "Domination") then + if start > 0 and duration > 0 then + local seconde = duration - ( GetTime() - start) + local affiche, minute, time + if seconde <= 59 then + affiche = tostring(floor(seconde)).." sec"; + else + minute = tostring(floor(seconde/60)) + seconde = mod(seconde, 60); + if seconde <= 9 then + time = "0"..tostring(floor(seconde)); + else + time = tostring(floor(seconde)); + end + affiche = minute..":"..time; + end + GameTooltip:AddLine("Cooldown : "..affiche); + end + elseif (type == "Imp") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[3].Mana.." Mana"); + if not (start > 0 and duration > 0) then + GameTooltip:AddLine(NecrosisTooltipData.DominationCooldown); + end + + elseif (type == "Void") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[4].Mana.." Mana"); + if Soulshards == 0 then + GameTooltip:AddLine("|c00FF4444"..NecrosisTooltipData.Main.Soulshard..Soulshards.."|r"); + elseif not (start > 0 and duration > 0) then + GameTooltip:AddLine(NecrosisTooltipData.DominationCooldown); + end + elseif (type == "Succubus") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[5].Mana.." Mana"); + if Soulshards == 0 then + GameTooltip:AddLine("|c00FF4444"..NecrosisTooltipData.Main.Soulshard..Soulshards.."|r"); + elseif not (start > 0 and duration > 0) then + GameTooltip:AddLine(NecrosisTooltipData.DominationCooldown); + end + elseif (type == "Fel") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[6].Mana.." Mana"); + if Soulshards == 0 then + GameTooltip:AddLine("|c00FF4444"..NecrosisTooltipData.Main.Soulshard..Soulshards.."|r"); + elseif not (start > 0 and duration > 0) then + GameTooltip:AddLine(NecrosisTooltipData.DominationCooldown); + end + elseif (type == "Infernal") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[8].Mana.." Mana"); + if InfernalStone == 0 then + GameTooltip:AddLine("|c00FF4444"..NecrosisTooltipData.Main.InfernalStone..InfernalStone.."|r"); + else + GameTooltip:AddLine(NecrosisTooltipData.Main.InfernalStone..InfernalStone); + end + elseif (type == "Doomguard") then + GameTooltip:AddLine(NECROSIS_SPELL_TABLE[30].Mana.." Mana"); + if DemoniacStone == 0 then + GameTooltip:AddLine("|c00FF4444"..NecrosisTooltipData.Main.DemoniacStone..DemoniacStone.."|r"); + else + GameTooltip:AddLine(NecrosisTooltipData.Main.DemoniacStone..DemoniacStone); + end + elseif (type == "Buff") and LastBuff ~= 0 then + GameTooltip:AddLine(NecrosisTooltipData.LastSpell..NECROSIS_SPELL_TABLE[LastBuff].Name); + elseif (type == "Curse") and LastCurse ~= 0 then + GameTooltip:AddLine(NecrosisTooltipData.LastSpell..NECROSIS_SPELL_TABLE[LastCurse].Name); + elseif (type == "Pet") and LastDemon ~= 0 then + GameTooltip:AddLine(NecrosisTooltipData.LastSpell..NECROSIS_PET_LOCAL_NAME[(LastDemon - 2)]); + end + -- Et hop, affichage ! + GameTooltip:Show(); +end + +-- Fonction mettant à jour les boutons Necrosis et donnant l'état du bouton de la pierre d'âme +function Necrosis_UpdateIcons() + -- Pierre d'âme + ----------------------------------------------- + + -- On se renseigne pour savoir si une pierre d'âme a été utilisée --> vérification dans les timers + local SoulstoneInUse = false; + if SpellTimer then + for index = 1, table.getn(SpellTimer), 1 do + if (SpellTimer[index].Name == NECROSIS_SPELL_TABLE[11].Name) and SpellTimer[index].TimeMax > 0 then + SoulstoneInUse = true; + break; + end + end + end + + -- Si la Pierre n'a pas été utilisée, et qu'il n'y a pas de pierre en inventaire -> Mode 1 + if not (SoulstoneOnHand or SoulstoneInUse) then + SoulstoneMode = 1; + SoulstoneWaiting = false; + SoulstoneCooldown = false; + end + + -- Si la Pierre n'a pas été utilisée, mais qu'il y a une pierre en inventaire + if SoulstoneOnHand and (not SoulstoneInUse) then + -- Si la pierre en inventaire contient un timer, et qu'on sort d'un RL --> Mode 4 + local start, duration = GetContainerItemCooldown(SoulstoneLocation[1],SoulstoneLocation[2]); + if NecrosisRL and start > 0 and duration > 0 then + SpellGroup, SpellTimer, TimerTable = Necrosis_InsertTimerStone("Soulstone", start, duration, SpellGroup, SpellTimer, TimerTable); + SoulstoneMode = 4; + NecrosisRL = false; + SoulstoneWaiting = false; + SoulstoneCooldown = true; + -- Si la pierre ne contient pas de timer, ou qu'on ne sort pas d'un RL --> Mode 2 + else + SoulstoneMode = 2; + NecrosisRL = false; + SoulstoneWaiting = false; + SoulstoneCooldown = false; + end + end + + -- Si la Pierre a été utilisée mais qu'il n'y a pas de pierre en inventaire --> Mode 3 + if (not SoulstoneOnHand) and SoulstoneInUse then + SoulstoneMode = 3; + SoulstoneWaiting = true; + -- Si on vient de poser la pierre, on l'annonce au raid + if SoulstoneAdvice and NECROSIS_SOULSTONE_ALERT_MESSAGE then + local tempnum = random(1, table.getn(NECROSIS_SOULSTONE_ALERT_MESSAGE)); + while tempnum == RezMess and table.getn(NECROSIS_SOULSTONE_ALERT_MESSAGE) >= 2 do + tempnum = random(1, table.getn(NECROSIS_SOULSTONE_ALERT_MESSAGE)); + end + RezMess = tempnum; + for i = 1, table.getn(NECROSIS_SOULSTONE_ALERT_MESSAGE[tempnum]) do + Necrosis_Msg(Necrosis_MsgReplace(NECROSIS_SOULSTONE_ALERT_MESSAGE[tempnum][i], SoulstoneTarget), "WORLD"); + end + SoulstoneAdvice = false; + end + end + + -- Si la Pierre a été utilisée et qu'il y a une pierre en inventaire + if SoulstoneOnHand and SoulstoneInUse then + SoulstoneAdvice = false; + if not (SoulstoneWaiting or SoulstoneCooldown) then + SpellTimer, TimerTable = Necrosis_RetraitTimerParNom(NECROSIS_SPELL_TABLE[11].Name, SpellTimer, TimerTable); + SoulstoneMode = 2; + else + SoulstoneWaiting = false; + SoulstoneCooldown = true; + SoulstoneMode = 4; + end + end + + -- Affichage de l'icone liée au mode + NecrosisSoulstoneButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\SoulstoneButton-0"..SoulstoneMode); + + -- Pierre de vie + ----------------------------------------------- + + -- Mode "j'en ai une" (2) / "j'en ai pas" (1) + if (HealthstoneOnHand) then + HealthstoneMode = 2; + else + HealthstoneMode = 1; + end + + -- Affichage de l'icone liée au mode + NecrosisHealthstoneButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\HealthstoneButton-0"..HealthstoneMode); + + -- Pierre de sort + ----------------------------------------------- + + -- Si la pierre est équipée, mode 3 + local rightHand = GetInventoryItemTexture("player", 17); + if (rightHand == "Interface\\Icons\\INV_Misc_Gem_Sapphire_01" and not SpellstoneOnHand) then + SpellstoneMode = 3; + else + -- Pierre dans l'inventaire, mode 2 + if (SpellstoneOnHand) then + SpellstoneMode = 2; + -- Pierre inexistante, mode 1 + else + SpellstoneMode = 1; + end + end + + -- Affichage de l'icone liée au mode + NecrosisSpellstoneButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\SpellstoneButton-0"..SpellstoneMode); + + -- Pierre de feu + ----------------------------------------------- + + -- Pierre équipée = mode 3 + if (rightHand == "Interface\\Icons\\INV_Misc_Gem_Bloodstone_02" and not FirestoneOnHand) then + FirestoneMode = 3; + -- Pierre dans l'inventaire = mode 2 + elseif (FirestoneOnHand) then + FirestoneMode = 2; + -- Pierre inexistante = mode 1 + else + FirestoneMode = 1; + end + + -- Affichage de l'icone liée au mode + NecrosisFirestoneButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\FirestoneButton-0"..FirestoneMode); + + + -- Bouton des démons + ----------------------------------------------- + local mana = UnitMana("player"); + + local ManaPet = {"1", "1", "1", "1", "1", "1"}; + + -- Si cooldown de domination corrompue on grise + if NECROSIS_SPELL_TABLE[15].ID and not DominationUp then + local start, duration = GetSpellCooldown(NECROSIS_SPELL_TABLE[15].ID, "spell"); + if start > 0 and duration > 0 then + NecrosisPetMenu1:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Domination-03"); + else + NecrosisPetMenu1:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Domination-01"); + end + end + + -- Si cooldown de gardien de l'ombre on grise + if NECROSIS_SPELL_TABLE[43].ID then + local start2, duration2 = GetSpellCooldown(NECROSIS_SPELL_TABLE[43].ID, "spell"); + if start2 > 0 and duration2 > 0 then + NecrosisBuffMenu8:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\ShadowWard-03"); + else + NecrosisBuffMenu8:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\ShadowWard-01"); + end + end + + -- Si cooldown de la malédiction amplifiée on grise + if NECROSIS_SPELL_TABLE[42].ID and not AmplifyUp then + local start3, duration3 = GetSpellCooldown(NECROSIS_SPELL_TABLE[42].ID, "spell"); + if start3 > 0 and duration3 > 0 then + NecrosisCurseMenu1:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Amplify-03"); + else + NecrosisCurseMenu1:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Amplify-01"); + end + end + + if mana ~= nil then + -- Coloration du bouton en grisé si pas assez de mana + if NECROSIS_SPELL_TABLE[3].ID then + if NECROSIS_SPELL_TABLE[3].Mana > mana then + for i = 1, 6, 1 do + ManaPet[i] = "3"; + end + elseif NECROSIS_SPELL_TABLE[4].ID then + if NECROSIS_SPELL_TABLE[4].Mana > mana then + for i = 2, 6, 1 do + ManaPet[i] = "3"; + end + elseif NECROSIS_SPELL_TABLE[8].ID then + if NECROSIS_SPELL_TABLE[8].Mana > mana then + for i = 5, 6, 1 do + ManaPet[i] = "3"; + end + elseif NECROSIS_SPELL_TABLE[30].ID then + if NECROSIS_SPELL_TABLE[30].Mana > mana then + ManaPet[6] = "3"; + end + end + end + end + end + end + + -- Coloration du bouton en grisé si pas de pierre pour l'invocation + if Soulshards == 0 then + for i = 2, 4, 1 do + ManaPet[i] = "3"; + end + end + if InfernalStone == 0 then + ManaPet[5] = "3"; + end + if DemoniacStone == 0 then + ManaPet[6] = "3"; + end + + -- Texturage des boutons de pet + if DemonType == NECROSIS_PET_LOCAL_NAME[1] then + NecrosisPetMenu2:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Imp-02"); + NecrosisPetMenu3:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Voidwalker-0"..ManaPet[2]); + NecrosisPetMenu4:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Succubus-0"..ManaPet[3]); + NecrosisPetMenu5:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Felhunter-0"..ManaPet[4]); + NecrosisPetMenu6:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Infernal-0"..ManaPet[5]); + NecrosisPetMenu7:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Doomguard-0"..ManaPet[6]); + elseif DemonType == NECROSIS_PET_LOCAL_NAME[2] then + NecrosisPetMenu2:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Imp-0"..ManaPet[1]); + NecrosisPetMenu3:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Voidwalker-02"); + NecrosisPetMenu4:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Succubus-0"..ManaPet[3]); + NecrosisPetMenu5:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Felhunter-0"..ManaPet[4]); + NecrosisPetMenu6:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Infernal-0"..ManaPet[5]); + NecrosisPetMenu7:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Doomguard-0"..ManaPet[6]); + elseif DemonType == NECROSIS_PET_LOCAL_NAME[3] then + NecrosisPetMenu2:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Imp-0"..ManaPet[1]); + NecrosisPetMenu3:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Voidwalker-0"..ManaPet[2]); + NecrosisPetMenu4:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Succubus-02"); + NecrosisPetMenu5:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Felhunter-0"..ManaPet[4]); + NecrosisPetMenu6:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Infernal-0"..ManaPet[5]); + NecrosisPetMenu7:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Doomguard-0"..ManaPet[6]); + elseif DemonType == NECROSIS_PET_LOCAL_NAME[4] then + NecrosisPetMenu2:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Imp-0"..ManaPet[1]); + NecrosisPetMenu3:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Voidwalker-0"..ManaPet[2]); + NecrosisPetMenu4:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Succubus-0"..ManaPet[3]); + NecrosisPetMenu5:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Felhunter-02"); + NecrosisPetMenu6:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Infernal-0"..ManaPet[5]); + NecrosisPetMenu7:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Doomguard-0"..ManaPet[6]); + elseif DemonType == NECROSIS_PET_LOCAL_NAME[5] then + NecrosisPetMenu2:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Imp-0"..ManaPet[1]); + NecrosisPetMenu3:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Voidwalker-0"..ManaPet[2]); + NecrosisPetMenu4:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Succubus-0"..ManaPet[3]); + NecrosisPetMenu5:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Felhunter-0"..ManaPet[4]) + NecrosisPetMenu6:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Infernal-02"); + NecrosisPetMenu7:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Doomguard-0"..ManaPet[6]); + elseif DemonType == NECROSIS_PET_LOCAL_NAME[6] then + NecrosisPetMenu2:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Imp-0"..ManaPet[1]); + NecrosisPetMenu3:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Voidwalker-0"..ManaPet[2]); + NecrosisPetMenu4:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Succubus-0"..ManaPet[3]); + NecrosisPetMenu5:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Felhunter-0"..ManaPet[4]) + NecrosisPetMenu6:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Infernal-0"..ManaPet[5]); + NecrosisPetMenu7:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Doomguard-02"); + else + NecrosisPetMenu2:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Imp-0"..ManaPet[1]); + NecrosisPetMenu3:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Voidwalker-0"..ManaPet[2]); + NecrosisPetMenu4:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Succubus-0"..ManaPet[3]); + NecrosisPetMenu5:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Felhunter-0"..ManaPet[4]) + NecrosisPetMenu6:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Infernal-0"..ManaPet[5]); + NecrosisPetMenu7:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\Doomguard-0"..ManaPet[6]); + end + + + -- Bouton des buffs + ----------------------------------------------- + + if mana ~= nil then + -- Coloration du bouton en grisé si pas assez de mana + if MountAvailable and not NecrosisMounted then + if NECROSIS_SPELL_TABLE[2].ID then + if NECROSIS_SPELL_TABLE[2].Mana > mana or PlayerCombat then + NecrosisMountButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\MountButton-03"); + else + NecrosisMountButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\MountButton-01"); + end + else + if NECROSIS_SPELL_TABLE[1].Mana > mana or PlayerCombat then + NecrosisMountButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\MountButton-03"); + else + NecrosisMountButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\MountButton-01"); + end + end + end + if NECROSIS_SPELL_TABLE[35].ID then + if NECROSIS_SPELL_TABLE[35].Mana > mana or Soulshards == 0 then + NecrosisPetMenu8:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Enslave-03"); + else + NecrosisPetMenu8:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Enslave-01"); + end + end + if NECROSIS_SPELL_TABLE[31].ID then + if NECROSIS_SPELL_TABLE[31].Mana > mana then + NecrosisBuffMenu1:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\ArmureDemo-03"); + else + NecrosisBuffMenu1:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\ArmureDemo-01"); + end + elseif NECROSIS_SPELL_TABLE[36].ID then + if NECROSIS_SPELL_TABLE[36].Mana > mana then + NecrosisBuffMenu1:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\ArmureDemo-03"); + else + NecrosisBuffMenu1:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\ArmureDemo-01"); + end + end + if NECROSIS_SPELL_TABLE[32].ID then + if NECROSIS_SPELL_TABLE[32].Mana > mana then + NecrosisBuffMenu2:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Aqua-03"); + else + NecrosisBuffMenu2:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Aqua-01"); + end + end + if NECROSIS_SPELL_TABLE[33].ID then + if NECROSIS_SPELL_TABLE[33].Mana > mana then + NecrosisBuffMenu3:SetNormalTexture("Interface\\AddOns\\Necrosis\\\UI\\Invisible-03"); + else + NecrosisBuffMenu3:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Invisible-01"); + end + end + if NECROSIS_SPELL_TABLE[34].ID then + if NECROSIS_SPELL_TABLE[34].Mana > mana then + NecrosisBuffMenu4:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Kilrogg-03"); + else + NecrosisBuffMenu4:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Kilrogg-01"); + end + end + if NECROSIS_SPELL_TABLE[37].ID then + if NECROSIS_SPELL_TABLE[37].Mana > mana or Soulshards == 0 then + NecrosisBuffMenu5:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\TPButton-05"); + else + NecrosisBuffMenu5:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\TPButton-01"); + end + end + if NECROSIS_SPELL_TABLE[38].ID then + if NECROSIS_SPELL_TABLE[38].Mana > mana then + NecrosisBuffMenu7:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Lien-03"); + else + NecrosisBuffMenu7:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Lien-01"); + end + end + if NECROSIS_SPELL_TABLE[43].ID then + if NECROSIS_SPELL_TABLE[43].Mana > mana then + NecrosisBuffMenu8:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\ShadowWard-03"); + else + NecrosisBuffMenu8:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\ShadowWard-01"); + end + end + if NECROSIS_SPELL_TABLE[9].ID then + if NECROSIS_SPELL_TABLE[9].Mana > mana then + NecrosisBuffMenu9:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Banish-03"); + else + NecrosisBuffMenu9:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Banish-01"); + end + end + if NECROSIS_SPELL_TABLE[44].ID then + if (NECROSIS_SPELL_TABLE[44].Mana > mana) or (not UnitExists("Pet")) then + NecrosisPetMenu9:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Sacrifice-03"); + else + NecrosisPetMenu9:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Sacrifice-01"); + end + end + + end + + -- Bouton des curses + ----------------------------------------------- + + if mana ~= nil then + -- Coloration du bouton en grisé si pas assez de mana + if NECROSIS_SPELL_TABLE[23].ID then + if NECROSIS_SPELL_TABLE[23].Mana > mana then + NecrosisCurseMenu2:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Weakness-03"); + else + NecrosisCurseMenu2:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Weakness-01"); + end + end + if NECROSIS_SPELL_TABLE[22].ID then + if NECROSIS_SPELL_TABLE[22].Mana > mana then + NecrosisCurseMenu3:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Agony-03"); + else + NecrosisCurseMenu3:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Agony-01"); + end + end + if NECROSIS_SPELL_TABLE[24].ID then + if NECROSIS_SPELL_TABLE[24].Mana > mana then + NecrosisCurseMenu4:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Reckless-03"); + else + NecrosisCurseMenu4:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Reckless-01"); + end + end + if NECROSIS_SPELL_TABLE[25].ID then + if NECROSIS_SPELL_TABLE[25].Mana > mana then + NecrosisCurseMenu5:SetNormalTexture("Interface\\AddOns\\Necrosis\\\UI\\Tongues-03"); + else + NecrosisCurseMenu5:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Tongues-01"); + end + end + if NECROSIS_SPELL_TABLE[40].ID then + if NECROSIS_SPELL_TABLE[40].Mana > mana then + NecrosisCurseMenu6:SetNormalTexture("Interface\\AddOns\\Necrosis\\\UI\\Exhaust-03"); + else + NecrosisCurseMenu6:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Exhaust-01"); + end + end + if NECROSIS_SPELL_TABLE[26].ID then + if NECROSIS_SPELL_TABLE[26].Mana > mana then + NecrosisCurseMenu7:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Elements-03"); + else + NecrosisCurseMenu7:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Elements-01"); + end + end + if NECROSIS_SPELL_TABLE[27].ID then + if NECROSIS_SPELL_TABLE[27].Mana > mana then + NecrosisCurseMenu8:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Shadow-03"); + else + NecrosisCurseMenu8:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Shadow-01"); + end + end + if NECROSIS_SPELL_TABLE[16].ID then + if NECROSIS_SPELL_TABLE[16].Mana > mana then + NecrosisCurseMenu9:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Doom-03"); + else + NecrosisCurseMenu9:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Doom-01"); + end + end + end + + + -- Bouton des Timers + ----------------------------------------------- + if HearthstoneLocation[1] then + local start, duration, enable = GetContainerItemCooldown(HearthstoneLocation[1], HearthstoneLocation[2]); + if duration > 20 and start > 0 then + NecrosisSpellTimerButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\SpellTimerButton-Cooldown"); + else + NecrosisSpellTimerButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\SpellTimerButton-Normal"); + end + end +end + +------------------------------------------------------------------------------------------------------ +-- FONCTIONS DES PIERRES ET DES FRAGMENTS +------------------------------------------------------------------------------------------------------ + + +-- T'AS QU'A SAVOIR OU T'AS MIS TES AFFAIRES ! +function Necrosis_SoulshardSetup() + SoulshardSlotID = 1; + for slot=1, table.getn(SoulshardSlot), 1 do + table.remove(SoulshardSlot, slot); + end + for slot=1, GetContainerNumSlots(NecrosisConfig.SoulshardContainer), 1 do + table.insert(SoulshardSlot, nil); + end +end + + +-- Fonction qui fait l'inventaire des éléments utilisés en démonologie : Pierres, Fragments, Composants d'invocation +function Necrosis_BagExplore() + local soulshards = Soulshards; + Soulshards = 0; + InfernalStone = 0; + DemoniacStone = 0; + SoulstoneOnHand = false; + HealthstoneOnHand = false; + FirestoneOnHand = false; + SpellstoneOnHand = false; + HearthstoneOnHand = false; + ItemOnHand = false; + -- Parcours des sacs + for container=0, 4, 1 do + -- Parcours des emplacements des sacs + for slot=1, GetContainerNumSlots(container), 1 do + Necrosis_MoneyToggle(); + NecrosisTooltip:SetBagItem(container, slot); + local itemName = tostring(NecrosisTooltipTextLeft1:GetText()); + local itemSwitch = tostring(NecrosisTooltipTextLeft3:GetText()); + local itemSwitch2 = tostring(NecrosisTooltipTextLeft4:GetText()); + -- Si le sac est le sac défini pour les fragments + -- hop la valeur du Tableau qui représente le slot du Sac = nil (pas de Shard) + if (container == NecrosisConfig.SoulshardContainer) then + if itemName ~= NECROSIS_ITEM.Soulshard then + SoulshardSlot[slot] = nil; + end + end + -- Dans le cas d'un emplacement non vide + if itemName then + -- On prend le nombre d'item en stack sur le slot + local _, ItemCount = GetContainerItemInfo(container, slot); + -- Si c'est un fragment ou une pierre infernale, alors on rajoute la qté au nombre de pierres + if itemName == NECROSIS_ITEM.Soulshard then Soulshards = Soulshards + 1; end + if itemName == NECROSIS_ITEM.InfernalStone then InfernalStone = InfernalStone + ItemCount; end + if itemName == NECROSIS_ITEM.DemoniacStone then DemoniacStone = DemoniacStone + ItemCount; end + -- Si c'est une pierre d'âme, on note son existence et son emplacement + if string.find(itemName, NECROSIS_ITEM.Soulstone) then + SoulstoneOnHand = true; + SoulstoneLocation = {container,slot}; + end + -- Même chose pour une pierre de soin + if string.find(itemName, NECROSIS_ITEM.Healthstone) then + HealthstoneOnHand = true; + HealthstoneLocation = {container,slot}; + end + -- Et encore pour la pierre de sort + if string.find(itemName, NECROSIS_ITEM.Spellstone) then + SpellstoneOnHand = true; + SpellstoneLocation = {container,slot}; + end + -- La pierre de feu maintenant + if string.find(itemName, NECROSIS_ITEM.Firestone) then + FirestoneOnHand = true; + FirestoneLocation = {container,slot}; + end + -- et enfin la pierre de foyer + if string.find(itemName, NECROSIS_ITEM.Hearthstone) then + HearthstoneOnHand = true; + HearthstoneLocation = {container,slot}; + end + + -- On note aussi la présence ou non des objets "main gauche" + -- Plus tard ce sera utilisé pour remplacer automatiquement une pierre absente + if itemSwitch == NECROSIS_ITEM.Offhand or itemSwitch2 == NECROSIS_ITEM.Offhand then + ItemOnHand = true; + ItemswitchLocation = {container, slot}; + end + end + end + end + + -- Affichage du bouton principal de Necrosis + if NecrosisConfig.Circle == 1 then + if (Soulshards <= 32) then + NecrosisButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\"..NecrosisConfig.NecrosisColor.."\\Shard"..Soulshards); + else + NecrosisButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\"..NecrosisConfig.NecrosisColor.."\\Shard32"); + end + elseif SoulstoneMode ==1 or SoulstoneMode == 2 then + if (Soulshards <= 32) then + NecrosisButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Bleu\\Shard"..Soulshards); + else + NecrosisButton:SetNormalTexture("Interface\\AddOns\\Necrosis\\UI\\Bleu\\Shard32"); + end + end + if NecrosisConfig.ShowCount then + if NecrosisConfig.CountType == 2 then + NecrosisShardCount:SetText(InfernalStone.." / "..DemoniacStone); + elseif NecrosisConfig.CountType == 1 then + if Soulshards < 10 then + NecrosisShardCount:SetText("0"..Soulshards); + else + NecrosisShardCount:SetText(Soulshards); + end + end + else + NecrosisShardCount:SetText(""); + end + -- Et on met le tout à jour ! + Necrosis_UpdateIcons(); + + -- S'il y a plus de fragment que d'emplacements dans le sac défini, on affiche un message d'avertissement + if (Soulshards > soulshards and Soulshards == GetContainerNumSlots(NecrosisConfig.SoulshardContainer)) then + if (SoulshardDestroy) then + Necrosis_Msg(NECROSIS_MESSAGE.Bag.FullPrefix..GetBagName(NecrosisConfig.SoulshardContainer)..NECROSIS_MESSAGE.Bag.FullDestroySuffix); + else + Necrosis_Msg(NECROSIS_MESSAGE.Bag.FullPrefix..GetBagName(NecrosisConfig.SoulshardContainer)..NECROSIS_MESSAGE.Bag.FullSuffix); + end + end +end + +-- Fonction qui permet de trouver / ranger les fragments dans les sacs +function Necrosis_SoulshardSwitch(type) + if (type == "CHECK") then + SoulshardMP = 0; + for container = 0, 4, 1 do + for i = 1, 3, 1 do + if GetBagName(container) == NECROSIS_ITEM.SoulPouch[i] then + BagIsSoulPouch[container + 1] = true; + break; + else + BagIsSoulPouch[container + 1] = false; + end + end + end + end + for container = 0, 4, 1 do + if BagIsSoulPouch[container+1] then break; end + if container ~= NecrosisConfig.SoulshardContainer then + for slot=1, GetContainerNumSlots(container), 1 do + Necrosis_MoneyToggle(); + NecrosisTooltip:SetBagItem(container, slot); + local itemInfo = tostring(NecrosisTooltipTextLeft1:GetText()); + if itemInfo == NECROSIS_ITEM.Soulshard then + if (type == "CHECK") then + SoulshardMP = SoulshardMP + 1; + elseif (type == "MOVE") then + Necrosis_FindSlot(container, slot); + SoulshardMP = SoulshardMP - 1; + end + end + end + end + end + -- Après avoir tout déplacer, il faut retrouver les emplacements des pierres, etc, etc... + Necrosis_BagExplore(); +end + +-- Pendant le déplacement des fragments, il faut trouver un nouvel emplacement aux objets déplacés :) +function Necrosis_FindSlot(shardIndex, shardSlot) + local full = true; + for slot=1, GetContainerNumSlots(NecrosisConfig.SoulshardContainer), 1 do + Necrosis_MoneyToggle(); + NecrosisTooltip:SetBagItem(NecrosisConfig.SoulshardContainer, slot); + local itemInfo = tostring(NecrosisTooltipTextLeft1:GetText()); + if string.find(itemInfo, NECROSIS_ITEM.Soulshard) == nil then + PickupContainerItem(shardIndex, shardSlot); + PickupContainerItem(NecrosisConfig.SoulshardContainer, slot); + SoulshardSlot[SoulshardSlotID] = slot; + SoulshardSlotID = SoulshardSlotID + 1 + if (CursorHasItem()) then + if shardIndex == 0 then + PutItemInBackpack(); + else + PutItemInBag(19 + shardIndex); + end + end + full = false; + break; + end + end + -- Destruction des fragments en sur-nombre si l'option est activée + if (full and NecrosisConfig.SoulshardDestroy) then + PickupContainerItem(shardIndex, shardSlot); + if (CursorHasItem()) then DeleteCursorItem(); end + end +end + +------------------------------------------------------------------------------------------------------ +-- FONCTIONS DES SORTS +------------------------------------------------------------------------------------------------------ + + + +-- Affiche ou masque les boutons de sort à chaque nouveau sort appris +function Necrosis_ButtonSetup() + if NecrosisConfig.NecrosisLockServ then + Necrosis_NoDrag(); + Necrosis_UpdateButtonsScale(); + else + HideUIPanel(NecrosisPetMenuButton); + HideUIPanel(NecrosisBuffMenuButton); + HideUIPanel(NecrosisCurseMenuButton); + HideUIPanel(NecrosisMountButton); + HideUIPanel(NecrosisFirestoneButton); + HideUIPanel(NecrosisSpellstoneButton); + HideUIPanel(NecrosisHealthstoneButton); + HideUIPanel(NecrosisSoulstoneButton); + if (NecrosisConfig.StonePosition[1]) and StoneIDInSpellTable[4] ~= 0 then + ShowUIPanel(NecrosisFirestoneButton); + end + if (NecrosisConfig.StonePosition[2]) and StoneIDInSpellTable[3] ~= 0 then + ShowUIPanel(NecrosisSpellstoneButton); + end + if (NecrosisConfig.StonePosition[3]) and StoneIDInSpellTable[2] ~= 0 then + ShowUIPanel(NecrosisHealthstoneButton); + end + if (NecrosisConfig.StonePosition[4]) and StoneIDInSpellTable[1] ~= 0 then + ShowUIPanel(NecrosisSoulstoneButton); + end + if (NecrosisConfig.StonePosition[5]) and BuffMenuCreate ~= {} then + ShowUIPanel(NecrosisBuffMenuButton); + end + if (NecrosisConfig.StonePosition[6]) and MountAvailable then + ShowUIPanel(NecrosisMountButton); + end + if (NecrosisConfig.StonePosition[7]) and PetMenuCreate ~= {} then + ShowUIPanel(NecrosisPetMenuButton); + end + if (NecrosisConfig.StonePosition[8]) and CurseMenuCreate ~= {} then + ShowUIPanel(NecrosisCurseMenuButton); + end + end +end + + + +-- Ma fonction préférée ! Elle fait la liste des sorts connus par le démo, et les classe par rang. +-- Pour les pierres, elle sélectionne le plus haut rang connu +function Necrosis_SpellSetup() + local StoneType = {NECROSIS_ITEM.Soulstone, NECROSIS_ITEM.Healthstone, NECROSIS_ITEM.Spellstone, NECROSIS_ITEM.Firestone}; + local StoneMaxRank = {0, 0, 0, 0}; + + local CurrentStone = { + ID = {}, + Name = {}, + subName = {} + }; + + local CurrentSpells = { + ID = {}, + Name = {}, + subName = {} + }; + + local spellID = 1; + local Invisible = 0; + local InvisibleID = 0; + + -- On va parcourir tous les sorts possedés par le Démoniste + while true do + local spellName, subSpellName = GetSpellName(spellID, BOOKTYPE_SPELL); + + if not spellName then + do break end + end + + -- Pour les sorts avec des rangs numérotés, on compare pour chaque sort les rangs 1 à 1 + -- Le rang supérieur est conservé + if (string.find(subSpellName, NECROSIS_TRANSLATION.Rank)) then + local found = false; + local rank = tonumber(strsub(subSpellName, 6, strlen(subSpellName))); + for index=1, table.getn(CurrentSpells.Name), 1 do + if (CurrentSpells.Name[index] == spellName) then + found = true; + if (CurrentSpells.subName[index] < rank) then + CurrentSpells.ID[index] = spellID; + CurrentSpells.subName[index] = rank; + end + break; + end + end + -- Les plus grands rangs de chacun des sorts à rang numérotés sont insérés dans la table + if (not found) then + table.insert(CurrentSpells.ID, spellID); + table.insert(CurrentSpells.Name, spellName); + table.insert(CurrentSpells.subName, rank); + end + end + + -- Test du Rang de la détection d'invisibilité + if spellName == NECROSIS_TRANSLATION.GreaterInvisible then + Invisible = 3; + InvisibleID = spellID; + elseif spellName == NECROSIS_TRANSLATION.Invisible and Invisible ~= 3 then + Invisible = 2; + InvisibleID = spellID; + elseif spellName == NECROSIS_TRANSLATION.LesserInvisible and Invisible ~= 3 and Invisible ~= 2 then + Invisible = 1; + InvisibleID = spellID; + end + + -- Les pierres n'ont pas de rang numéroté, l'attribut de rang fait partie du nom du sort + -- Pour chaque type de pierre, on va donc faire.... + for stoneID=1, table.getn(StoneType), 1 do + -- Si le sort étudié est bien une invocation de ce type de pierre et qu'on n'a pas + -- déjà assigné un rang maximum à cette dernière + if (string.find(spellName, StoneType[stoneID])) + and StoneMaxRank[stoneID] ~= table.getn(NECROSIS_STONE_RANK) + then + -- Récupération de la fin du nom de la pierre, contenant son rang + local stoneSuffix = string.sub(spellName, string.len(NECROSIS_CREATE[stoneID]) + 1); + -- Reste à trouver la correspondance de son rang + for rankID=1, table.getn(NECROSIS_STONE_RANK), 1 do + -- Si la fin du nom de la pierre correspond à une taille de pierre, on note le rang ! + if string.lower(stoneSuffix) == string.lower(NECROSIS_STONE_RANK[rankID]) then + -- On a une pierre, on a son rang, reste à vérifier si c'est la plus puissante, + -- et si oui, l'enregistrer + if rankID > StoneMaxRank[stoneID] then + StoneMaxRank[stoneID] = rankID; + CurrentStone.Name[stoneID] = spellName; + CurrentStone.subName[stoneID] = NECROSIS_STONE_RANK[rankID]; + CurrentStone.ID[stoneID] = spellID; + end + break + end + end + end + end + + spellID = spellID + 1; + end + + -- On insère dans la table les pierres avec le plus grand rang + for stoneID=1, table.getn(StoneType), 1 do + if StoneMaxRank[stoneID] ~= 0 then + table.insert(NECROSIS_SPELL_TABLE, { + ID = CurrentStone.ID[stoneID], + Name = CurrentStone.Name[stoneID], + Rank = 0, + CastTime = 0, + Length = 0, + Type = 0, + }); + StoneIDInSpellTable[stoneID] = table.getn(NECROSIS_SPELL_TABLE); + end + end + -- On met à jour la liste des sorts avec les nouveaux rangs + for spell=1, table.getn(NECROSIS_SPELL_TABLE), 1 do + for index = 1, table.getn(CurrentSpells.Name), 1 do + if (NECROSIS_SPELL_TABLE[spell].Name == CurrentSpells.Name[index]) + and NECROSIS_SPELL_TABLE[spell].ID ~= StoneIDInSpellTable[1] + and NECROSIS_SPELL_TABLE[spell].ID ~= StoneIDInSpellTable[2] + and NECROSIS_SPELL_TABLE[spell].ID ~= StoneIDInSpellTable[3] + and NECROSIS_SPELL_TABLE[spell].ID ~= StoneIDInSpellTable[4] + then + NECROSIS_SPELL_TABLE[spell].ID = CurrentSpells.ID[index]; + NECROSIS_SPELL_TABLE[spell].Rank = CurrentSpells.subName[index]; + end + end + end + + -- On met à jour la durée de chaque sort en fonction de son rang + for index=1, table.getn(NECROSIS_SPELL_TABLE), 1 do + if (index == 9) then -- si Bannish + if NECROSIS_SPELL_TABLE[index].ID ~= nil then + NECROSIS_SPELL_TABLE[index].Length = NECROSIS_SPELL_TABLE[index].Rank * 10 + 10; + end + end + if (index == 13) then -- si Fear + if NECROSIS_SPELL_TABLE[index].ID ~= nil then + NECROSIS_SPELL_TABLE[index].Length = NECROSIS_SPELL_TABLE[index].Rank * 5 + 5; + end + end + if (index == 14) then -- si Corruption + if NECROSIS_SPELL_TABLE[index].ID ~= nil and NECROSIS_SPELL_TABLE[index].Rank <= 2 then + NECROSIS_SPELL_TABLE[index].Length = NECROSIS_SPELL_TABLE[index].Rank * 3 + 9; + end + end + end + + for spellID=1, MAX_SPELLS, 1 do + local spellName, subSpellName = GetSpellName(spellID, "spell"); + if (spellName) then + for index=1, table.getn(NECROSIS_SPELL_TABLE), 1 do + if NECROSIS_SPELL_TABLE[index].Name == spellName then + Necrosis_MoneyToggle(); + NecrosisTooltip:SetSpell(spellID, 1); + local _, _, ManaCost = string.find(NecrosisTooltipTextLeft2:GetText(), "(%d+)"); + if not NECROSIS_SPELL_TABLE[index].ID then + NECROSIS_SPELL_TABLE[index].ID = spellID; + end + NECROSIS_SPELL_TABLE[index].Mana = tonumber(ManaCost); + end + end + end + end + if NECROSIS_SPELL_TABLE[1].ID or NECROSIS_SPELL_TABLE[2].ID then + MountAvailable = true; + else + MountAvailable = false; + end + + -- Insertion du plus haut rang de détection d'invisibilité connu + if Invisible >= 1 then + NECROSIS_SPELL_TABLE[33].ID = InvisibleID; + NECROSIS_SPELL_TABLE[33].Rank = 0; + NECROSIS_SPELL_TABLE[33].CastTime = 0; + NECROSIS_SPELL_TABLE[33].Length = 0; + Necrosis_MoneyToggle(); + NecrosisTooltip:SetSpell(InvisibleID, 1); + local _, _, ManaCost = string.find(NecrosisTooltipTextLeft2:GetText(), "(%d+)"); + NECROSIS_SPELL_TABLE[33].Mana = tonumber(ManaCost); + end +end + +-- Fonction d'extraction d'attribut de sort +-- F(type=string, string, int) -> Spell=table +function Necrosis_FindSpellAttribute(type, attribute, array) + for index=1, table.getn(NECROSIS_SPELL_TABLE), 1 do + if string.find(NECROSIS_SPELL_TABLE[index][type], attribute) then return NECROSIS_SPELL_TABLE[index][array]; end + end + return nil; +end + +-- Fonction pour caster un Eclat d'ombre depuis le bouton de la Transe de l'Ombre +-- L'éclat doit avoir le rang le plus haut +function Necrosis_CastShadowBolt() + local spellID = Necrosis_FindSpellAttribute("Name", NECROSIS_NIGHTFALL.BoltName, "ID"); + if (spellID) then + CastSpell(spellID, "spell"); + else + Necrosis_Msg(NECROSIS_NIGHTFALL_TEXT.NoBoltSpell, "USER"); + end +end + +------------------------------------------------------------------------------------------------------ +-- FONCTIONS DIVERSES +------------------------------------------------------------------------------------------------------ + +-- Fonction pour savoir si une unité subit un effet +-- F(string, string)->bool +function Necrosis_UnitHasEffect(unit, effect) + local index = 1; + while UnitDebuff(unit, index) do + Necrosis_MoneyToggle(); + NecrosisTooltip:SetUnitDebuff(unit, index); + local DebuffName = tostring(NecrosisTooltipTextLeft1:GetText()); + if (string.find(DebuffName, effect)) then + return true; + end + index = index+1; + end + return false; +end + +-- Function to check the presence of a buff on the unit. +-- Strictly identical to UnitHasEffect, but as WoW distinguishes Buff and DeBuff, so we have to. +function Necrosis_UnitHasBuff(unit, effect) + local index = 1; + while UnitBuff(unit, index) do + -- Here we'll cheat a little. checking a buff or debuff return the internal spell name, and not the name we give at start + -- So we use an API widget that will use the internal name to return the known name. + -- For example, the "Curse of Agony" spell is internaly known as "Spell_Shadow_CurseOfSargeras". Much easier to use the first one than the internal one. + Necrosis_MoneyToggle(); + NecrosisTooltip:SetUnitBuff(unit, index); + local BuffName = tostring(NecrosisTooltipTextLeft1:GetText()); + if (string.find(BuffName, effect)) then + return true; + end + index = index+1; + end + return false; +end + + +-- Permet de reconnaitre quand le joueur gagne Crépuscule / Transe de l'ombre +function Necrosis_UnitHasTrance() + local ID = -1; + for buffID = 0, 24, 1 do + local buffTexture = GetPlayerBuffTexture(buffID); + if buffTexture == nil then break end + if strfind(buffTexture, "Spell_Shadow_Twilight") then + ID = buffID; + break + end + end + ShadowTranceID = ID; +end + +-- Fonction pour gérer les actions effectuées par Necrosis au clic sur un bouton +function Necrosis_UseItem(type,button) + Necrosis_MoneyToggle(); + NecrosisTooltip:SetBagItem("player", 17); + local rightHand = tostring(NecrosisTooltipTextLeft1:GetText()); + + -- Fonction pour utiliser une pierre de foyer dans l'inventaire + -- s'il y en a une dans l'inventaire, et si c'était un click droit + if type == "Hearthstone" and button == "RightButton" then + if (HearthstoneOnHand) then + -- on l'utilise + UseContainerItem(HearthstoneLocation[1], HearthstoneLocation[2]); + -- soit il n'y en a pas dans l'inventaire, on affiche un message d'erreur + else + Necrosis_Msg(NECROSIS_MESSAGE.Error.NoHearthStone, "USER"); + end + end + + -- Si on clique sur le bouton de la pierre d'âme + -- On met à jour le bouton pour savoir quel est le mode + if (type == "Soulstone") then + Necrosis_UpdateIcons(); + -- Si le mode = 2 (une pierre dans l'inventaire, pas de pierre utilisée) + -- alors on l'utilise + if (SoulstoneMode == 2) then + -- Si un joueur est ciblé, sur le joueur (avec message d'alerte) + -- Si un joueur n'est pas ciblé, sur le Démoniste (sans message) + if UnitIsPlayer("target") then + SoulstoneUsedOnTarget = true; + else + SoulstoneUsedOnTarget = false; + TargetUnit("player"); + end + UseContainerItem(SoulstoneLocation[1], SoulstoneLocation[2]); + -- Maintenant que l'on crée un timer sur la session, nous ne sortons plus d'un RL + NecrosisRL = false; + -- Et hop, on remet à jour l'affichage des boutons :) + Necrosis_UpdateIcons(); + -- si il n'y a pas de pierre d'âme dans l'inventaire, alors on crée la pierre d'âme de rang le plus grand :) + elseif (SoulstoneMode == 1) or (SoulstoneMode == 3) then + if StoneIDInSpellTable[1] ~= 0 then + CastSpell(NECROSIS_SPELL_TABLE[StoneIDInSpellTable[1]].ID, "spell"); + else + Necrosis_Msg(NECROSIS_MESSAGE.Error.NoSoulStoneSpell, "USER"); + end + + end + -- Si on clique sur le bouton de la pierre de vie : + elseif (type == "Healthstone") then + -- soit il y en a une dans l'inventaire + if HealthstoneOnHand then + -- Dans ce cas si un pj allié est sélectionné, on lui donne la pierre + -- Sinon, on l'utilise + if NecrosisTradeRequest then + PickupContainerItem(HealthstoneLocation[1], HealthstoneLocation[2]); + ClickTradeButton(1); + NecrosisTradeRequest = false; + Trading = true; + TradingNow = 3; + return; + elseif (UnitExists("target") and UnitIsPlayer("target") and (not UnitCanAttack("player", "target")) and UnitName("target") ~= UnitName("player")) then + PickupContainerItem(HealthstoneLocation[1], HealthstoneLocation[2]); + if ( CursorHasItem() ) then + DropItemOnUnit("target"); + Trading = true; + TradingNow = 3; + end + return; + end + if (UnitHealth("player") == UnitHealthMax("player")) then + Necrosis_Msg(NECROSIS_MESSAGE.Error.FullHealth, "USER"); + else + SpellStopCasting(); + UseContainerItem(HealthstoneLocation[1], HealthstoneLocation[2]); + local HealthstoneInUse = false + if Necrosis_TimerExisteDeja(NECROSIS_COOLDOWN.Healthstone, SpellTimer) then + HealthstoneInUse = true; + end + if not HealthstoneInUse then + SpellGroup, SpellTimer, TimerTable = Necrosis_InsertTimerStone(type, nil, nil, SpellGroup, SpellTimer, TimerTable); + end + end + -- soit il n'y en a pas dans l'inventaire, et la pierre de plus haut rang est créée + else + if StoneIDInSpellTable[2] ~= 0 then + CastSpell(NECROSIS_SPELL_TABLE[StoneIDInSpellTable[2]].ID, "spell"); + else + Necrosis_Msg(NECROSIS_MESSAGE.Error.NoHealthStoneSpell, "USER"); + end + end + -- Au tour de la pierre de sort + elseif (type == "Spellstone") then + -- Si la pierre est équipée ou dans l'inventaire, un clic droit l'équipe / la déséquipe + if (SpellstoneMode ~= 1 and button == "RightButton") + -- Si la pierre n'est pas équipée, le raccourci clavier équipe la pierre + or (SpellstoneMode == 2 and button == "Binding") then + Necrosis_SwitchOffHand(type); + -- Si la pierre est équipée, un clic gauche utilise la pierre + elseif SpellstoneMode == 3 then + local start, duration, enable = GetInventoryItemCooldown("player", 17) ; + UseInventoryItem(17); + if duration == 0 or start == 0 then Necrosis_SwitchOffHand("Off-hand"); end + -- sinon on crée la pierre :) + elseif (SpellstoneMode == 1) then + if StoneIDInSpellTable[3] ~= 0 then + CastSpell(NECROSIS_SPELL_TABLE[StoneIDInSpellTable[3]].ID, "spell"); + else + Necrosis_Msg(NECROSIS_MESSAGE.Error.NoSpellStoneSpell, "USER"); + end + end + -- Meme chose pour la pierre de feu + elseif (type == "Firestone") then + -- Si la pierre n'existe pas, elle est créée + if (FirestoneMode == 1) then + if StoneIDInSpellTable[4] ~= 0 then + CastSpell(NECROSIS_SPELL_TABLE[StoneIDInSpellTable[4]].ID, "spell"); + else + Necrosis_Msg(NECROSIS_MESSAGE.Error.NoFireStoneSpell, "USER"); + end + -- Si la pierre existe, un clic droit l'équipe / la déséquiper + elseif button ~= "LeftButton" then + Necrosis_SwitchOffHand(type); + end + -- Si on clic sur le bouton de monture + elseif (type == "Mount") then + -- Soit c'est la monture épique + if NECROSIS_SPELL_TABLE[2].ID ~= nil then + CastSpell(NECROSIS_SPELL_TABLE[2].ID, "spell"); + Necrosis_OnUpdate(); + -- Soit c'est la monture classique + elseif NECROSIS_SPELL_TABLE[1].ID ~= nil then + CastSpell(NECROSIS_SPELL_TABLE[1].ID, "spell"); + Necrosis_OnUpdate(); + -- (Soit c'est rien :) ) + else + Necrosis_Msg(NECROSIS_MESSAGE.Error.NoRiding, "USER"); + end + end +end + +-- Fonction permettant de permutter un objet main-gauche équipé avec un objet main-gauche de l'inventaire +function Necrosis_SwitchOffHand(type) + if (type == "Spellstone") then + if SpellstoneMode == 3 then + if ItemOnHand then + Necrosis_Msg("Equipe "..GetContainerItemLink(ItemswitchLocation[1],ItemswitchLocation[2])..NECROSIS_MESSAGE.SwitchMessage..GetInventoryItemLink("player",17), "USER"); + PickupInventoryItem(17); + PickupContainerItem(ItemswitchLocation[1],ItemswitchLocation[2]); + end + return; + else + PickupContainerItem(SpellstoneLocation[1], SpellstoneLocation[2]); + PickupInventoryItem(17); + -- Le switch avec une pierre de sort implique un cooldown porté au timer + if Necrosis_TimerExisteDeja(NECROSIS_COOLDOWN.Spellstone, SpellTimer) then + SpellTimer, TimerTable = Necrosis_RetraitTimerParNom(NECROSIS_COOLDOWN.Spellstone, SpellTimer, TimerTable); + end + SpellGroup, SpellTimer, TimerTable = Necrosis_InsertTimerStone(type, nil, nil, SpellGroup, SpellTimer, TimerTable); + return; + end + elseif (type == "Firestone") then + if FirestoneMode == 3 then + if ItemOnHand then + PickupInventoryItem(17); + PickupContainerItem(ItemswitchLocation[1],ItemswitchLocation[2]); + Necrosis_Msg(NECROSIS_MESSAGE.EquipMessage..GetContainerItemLink(ItemswitchLocation[1],ItemswitchLocation[2])..NECROSIS_MESSAGE.SwitchMessage..GetInventoryItemLink("player",17), "USER"); + end + return; + else + PickupContainerItem(FirestoneLocation[1], FirestoneLocation[2]); + PickupInventoryItem(17); + return; + end + end + if (type == "OffHand") and UnitClass("player") == NECROSIS_UNIT_WARLOCK then + if ItemswitchLocation[1] ~= nil and ItemswitchLocation[2] ~= nil then + PickupContainerItem(ItemswitchLocation[1],ItemswitchLocation[2]); + PickupInventoryItem(17); + end + end +end + +function Necrosis_MoneyToggle() + for index=1, 10 do + local text = getglobal("NecrosisTooltipTextLeft"..index); + text:SetText(nil); + text = getglobal("NecrosisTooltipTextRight"..index); + text:SetText(nil); + end + NecrosisTooltip:Hide(); + NecrosisTooltip:SetOwner(WorldFrame, "ANCHOR_NONE"); +end + +function Necrosis_GameTooltip_ClearMoney() + -- Intentionally empty; don't clear money while we use hidden tooltips +end + + +-- Fonction pour placer les boutons autour de Necrosis (et pour grossir / retracir l'interface...) +function Necrosis_UpdateButtonsScale() + local NBRScale = (100 + (NecrosisConfig.NecrosisButtonScale - 85)) / 100; + if NecrosisConfig.NecrosisButtonScale <= 95 then + NBRScale = 1.1; + end + if NecrosisConfig.NecrosisLockServ then + Necrosis_ClearAllPoints(); + HideUIPanel(NecrosisPetMenuButton); + HideUIPanel(NecrosisBuffMenuButton); + HideUIPanel(NecrosisCurseMenuButton); + HideUIPanel(NecrosisMountButton); + HideUIPanel(NecrosisFirestoneButton); + HideUIPanel(NecrosisSpellstoneButton); + HideUIPanel(NecrosisHealthstoneButton); + HideUIPanel(NecrosisSoulstoneButton); + local indexScale = -36; + for index=1, 8, 1 do + if NecrosisConfig.StonePosition[index] then + if index == 1 and StoneIDInSpellTable[4] ~= 0 then + NecrosisFirestoneButton:SetPoint("CENTER", "NecrosisButton", "CENTER", ((40 * NBRScale) * cos(NecrosisConfig.NecrosisAngle-indexScale)), ((40 * NBRScale) * sin(NecrosisConfig.NecrosisAngle-indexScale))); + ShowUIPanel(NecrosisFirestoneButton); + indexScale = indexScale + 36; + end + if index == 2 and StoneIDInSpellTable[3] ~= 0 then + NecrosisSpellstoneButton:SetPoint("CENTER", "NecrosisButton", "CENTER", ((40 * NBRScale) * cos(NecrosisConfig.NecrosisAngle-indexScale)), ((40 * NBRScale) * sin(NecrosisConfig.NecrosisAngle-indexScale))); + ShowUIPanel(NecrosisSpellstoneButton); + indexScale = indexScale + 36; + end + if index == 3 and StoneIDInSpellTable[2] ~= 0 then + NecrosisHealthstoneButton:SetPoint("CENTER", "NecrosisButton", "CENTER", ((40 * NBRScale) * cos(NecrosisConfig.NecrosisAngle-indexScale)), ((40 * NBRScale) * sin(NecrosisConfig.NecrosisAngle-indexScale))); + ShowUIPanel(NecrosisHealthstoneButton); + indexScale = indexScale + 36; + end + if index == 4 and StoneIDInSpellTable[1] ~= 0 then + NecrosisSoulstoneButton:SetPoint("CENTER", "NecrosisButton", "CENTER", ((40 * NBRScale) * cos(NecrosisConfig.NecrosisAngle-indexScale)), ((40 * NBRScale) * sin(NecrosisConfig.NecrosisAngle-indexScale))); + ShowUIPanel(NecrosisSoulstoneButton); + indexScale = indexScale + 36; + end + if index == 5 and BuffMenuCreate ~= {} then + NecrosisBuffMenuButton:SetPoint("CENTER", "NecrosisButton", "CENTER", ((40 * NBRScale) * cos(NecrosisConfig.NecrosisAngle-indexScale)), ((40 * NBRScale) * sin(NecrosisConfig.NecrosisAngle-indexScale))); + ShowUIPanel(NecrosisBuffMenuButton); + indexScale = indexScale + 36; + end + if index == 6 and MountAvailable then + NecrosisMountButton:SetPoint("CENTER", "NecrosisButton", "CENTER", ((40 * NBRScale) * cos(NecrosisConfig.NecrosisAngle-indexScale)), ((40 * NBRScale) * sin(NecrosisConfig.NecrosisAngle-indexScale))); + ShowUIPanel(NecrosisMountButton); + indexScale = indexScale + 36; + end + if index == 7 and PetMenuCreate ~= {} then + NecrosisPetMenuButton:SetPoint("CENTER", "NecrosisButton", "CENTER", ((40 * NBRScale) * cos(NecrosisConfig.NecrosisAngle-indexScale)), ((40 * NBRScale) * sin(NecrosisConfig.NecrosisAngle-indexScale))); + ShowUIPanel(NecrosisPetMenuButton); + indexScale = indexScale + 36; + end + if index == 8 and CurseMenuCreate ~= {} then + NecrosisCurseMenuButton:SetPoint("CENTER", "NecrosisButton", "CENTER", ((40 * NBRScale) * cos(NecrosisConfig.NecrosisAngle-indexScale)), ((40 * NBRScale) * sin(NecrosisConfig.NecrosisAngle-indexScale))); + ShowUIPanel(NecrosisCurseMenuButton); + indexScale = indexScale + 36; + end + end + end + end +end + + + +-- Fonction (XML) pour rétablir les points d'attache par défaut des boutons +function Necrosis_ClearAllPoints() + NecrosisFirestoneButton:ClearAllPoints(); + NecrosisSpellstoneButton:ClearAllPoints(); + NecrosisHealthstoneButton:ClearAllPoints(); + NecrosisSoulstoneButton:ClearAllPoints(); + NecrosisMountButton:ClearAllPoints(); + NecrosisPetMenuButton:ClearAllPoints(); + NecrosisBuffMenuButton:ClearAllPoints(); + NecrosisCurseMenuButton:ClearAllPoints(); +end + +-- Fonction (XML) pour étendre la propriété NoDrag() du bouton principal de Necrosis sur tout ses boutons +function Necrosis_NoDrag() + NecrosisFirestoneButton:RegisterForDrag(""); + NecrosisSpellstoneButton:RegisterForDrag(""); + NecrosisHealthstoneButton:RegisterForDrag(""); + NecrosisSoulstoneButton:RegisterForDrag(""); + NecrosisMountButton:RegisterForDrag(""); + NecrosisPetMenuButton:RegisterForDrag(""); + NecrosisBuffMenuButton:RegisterForDrag(""); + NecrosisCurseMenuButton:RegisterForDrag(""); +end + +-- Fonction (XML) inverse de celle du dessus +function Necrosis_Drag() + NecrosisFirestoneButton:RegisterForDrag("LeftButton"); + NecrosisSpellstoneButton:RegisterForDrag("LeftButton"); + NecrosisHealthstoneButton:RegisterForDrag("LeftButton"); + NecrosisSoulstoneButton:RegisterForDrag("LeftButton"); + NecrosisMountButton:RegisterForDrag("LeftButton"); + NecrosisPetMenuButton:RegisterForDrag("LeftButton"); + NecrosisBuffMenuButton:RegisterForDrag("LeftButton"); + NecrosisCurseMenuButton:RegisterForDrag("LeftButton"); +end + +-- Ouverture du menu des buffs +function Necrosis_BuffMenu(button) + if button == "MiddleButton" and LastBuff ~= 0 then + Necrosis_BuffCast(LastBuff); + return; + end + BuffMenuShow = not BuffMenuShow; + if not BuffMenuShow then + BuffShow = false; + BuffVisible = false; + NecrosisBuffMenuButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\BuffMenuButton-01"); + BuffMenuCreate[1]:ClearAllPoints(); + BuffMenuCreate[1]:SetPoint("CENTER", "NecrosisBuffMenuButton", "CENTER", 3000, 3000); + AlphaBuffMenu = 1; + else + BuffShow = true; + NecrosisBuffMenuButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\BuffMenuButton-02"); + -- Si clic droit, le menu de buff reste ouvert + if button == "RightButton" then + BuffVisible = true; + end + -- S'il n'existe aucun buff on ne fait rien + if BuffMenuCreate == nil then + return; + end + -- Sinon on affiche les icones + NecrosisBuffMenu1:SetAlpha(1); + NecrosisBuffMenu2:SetAlpha(1); + NecrosisBuffMenu3:SetAlpha(1); + NecrosisBuffMenu4:SetAlpha(1); + NecrosisBuffMenu5:SetAlpha(1); + NecrosisBuffMenu6:SetAlpha(1); + NecrosisBuffMenu7:SetAlpha(1); + NecrosisBuffMenu8:SetAlpha(1); + NecrosisBuffMenu9:SetAlpha(1); + BuffMenuCreate[1]:ClearAllPoints(); + BuffMenuCreate[1]:SetPoint("CENTER", "NecrosisBuffMenuButton", "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31) , 26); + AlphaPetVar = GetTime() + 3; + AlphaBuffVar = GetTime() + 6; + AlphaCurseVar = GetTime() + 6; + end +end + +-- Ouverture du menu des curses +function Necrosis_CurseMenu(button) + if button == "MiddleButton" and LastCurse ~= 0 then + Necrosis_CurseCast(LastCurse, LastCurseClick); + return; + end + -- S'il n'existe aucune curse on ne fait rien + if CurseMenuCreate[1] == nil then + return; + end + CurseMenuShow = not CurseMenuShow; + if not CurseMenuShow then + CurseShow = false; + CurseVisible = false; + NecrosisCurseMenuButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\CurseMenuButton-01"); + CurseMenuCreate[1]:ClearAllPoints(); + CurseMenuCreate[1]:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + AlphaCurseMenu = 1; + else + CurseShow = true; + NecrosisCurseMenuButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\CurseMenuButton-02"); + -- Si clic droit, le menu de curse reste ouvert + if button == "RightButton" then + CurseVisible = true; + end + -- Sinon on affiche les icones + NecrosisCurseMenu1:SetAlpha(1); + NecrosisCurseMenu2:SetAlpha(1); + NecrosisCurseMenu3:SetAlpha(1); + NecrosisCurseMenu4:SetAlpha(1); + NecrosisCurseMenu5:SetAlpha(1); + NecrosisCurseMenu6:SetAlpha(1); + NecrosisCurseMenu7:SetAlpha(1); + NecrosisCurseMenu8:SetAlpha(1); + NecrosisCurseMenu9:SetAlpha(1); + CurseMenuCreate[1]:ClearAllPoints(); + CurseMenuCreate[1]:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31) , -26); + AlphaPetVar = GetTime() + 3; + AlphaBuffVar = GetTime() + 6; + AlphaCurseVar = GetTime() + 6; + end +end + +-- Ouverture du menu des démons +function Necrosis_PetMenu(button) + if button == "MiddleButton" and LastDemon ~= 0 then + Necrosis_PetCast(LastDemon); + return; + end + -- S'il n'existe aucun sort d'invocation on ne fait rien + if PetMenuCreate[1] == nil then + return; + end + PetMenuShow = not PetMenuShow; + if not PetMenuShow then + PetShow = false; + PetVisible = false; + NecrosisPetMenuButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\PetMenuButton-01"); + PetMenuCreate[1]:ClearAllPoints(); + PetMenuCreate[1]:SetPoint("CENTER", "NecrosisPetMenuButton", "CENTER", 3000, 3000); + AlphaPetMenu = 1; + else + PetShow = true; + NecrosisPetMenuButton:SetNormalTexture("Interface\\Addons\\Necrosis\\UI\\PetMenuButton-02"); + -- Si clic droit, le menu de pet reste ouvert + if button == "RightButton" then + PetVisible = true; + end + -- Sinon on affiche les icones (on les déplace sur l'écran) + NecrosisPetMenu1:SetAlpha(1); + NecrosisPetMenu2:SetAlpha(1); + NecrosisPetMenu3:SetAlpha(1); + NecrosisPetMenu4:SetAlpha(1); + NecrosisPetMenu5:SetAlpha(1); + NecrosisPetMenu6:SetAlpha(1); + NecrosisPetMenu7:SetAlpha(1); + NecrosisPetMenu8:SetAlpha(1); + NecrosisPetMenu9:SetAlpha(1); + PetMenuCreate[1]:ClearAllPoints(); + PetMenuCreate[1]:SetPoint("CENTER", "NecrosisPetMenuButton", "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31) , 26); + AlphaPetVar = GetTime() + 3; + end +end + +-- A chaque changement du livre des sorts, au démarrage du mod, ainsi qu'au changement de sens du menu on reconstruit les menus des sorts +function Necrosis_CreateMenu() + PetMenuCreate = {}; + CurseMenuCreate = {}; + BuffMenuCreate = {}; + local menuVariable = nil; + local PetButtonPosition = 0; + local BuffButtonPosition = 0; + local CurseButtonPosition = 0; + + -- On cache toutes les icones des démons + for i = 1, 9, 1 do + menuVariable = getglobal("NecrosisPetMenu"..i); + menuVariable:Hide(); + end + -- On cache toutes les icones des sorts + for i = 1, 9, 1 do + menuVariable = getglobal("NecrosisBuffMenu"..i); + menuVariable:Hide(); + end + -- On cache toutes les icones des curses + for i = 1, 9, 1 do + menuVariable = getglobal("NecrosisCurseMenu"..i); + menuVariable:Hide(); + end + + + -- Si le sort de Domination corrompue existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[15].ID then + menuVariable = getglobal("NecrosisPetMenu1"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisPetMenuButton", "CENTER", 3000, 3000); + PetButtonPosition = 1; + table.insert(PetMenuCreate, menuVariable); + end + -- Si l'invocation du Diablotin existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[3].ID then + menuVariable = getglobal("NecrosisPetMenu2"); + menuVariable:ClearAllPoints(); + if PetButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisPetMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisPetMenu"..PetButtonPosition, "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31), 0); + end + PetButtonPosition = 2; + table.insert(PetMenuCreate, menuVariable); + end + -- Si l'invocation du Marcheur existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[4].ID then + menuVariable = getglobal("NecrosisPetMenu3"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisPetMenu"..PetButtonPosition, "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31), 0); + PetButtonPosition = 3; + table.insert(PetMenuCreate, menuVariable); + end + -- Si l'invocation du Succube existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[5].ID then + menuVariable = getglobal("NecrosisPetMenu4"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisPetMenu"..PetButtonPosition, "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31), 0); + PetButtonPosition = 4; + table.insert(PetMenuCreate, menuVariable); + end + -- Si l'invocation du Felhunter existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[6].ID then + menuVariable = getglobal("NecrosisPetMenu5"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisPetMenu"..PetButtonPosition, "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31), 0); + PetButtonPosition = 5; + table.insert(PetMenuCreate, menuVariable); + end + -- Si l'invocation de l'Infernal existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[8].ID then + menuVariable = getglobal("NecrosisPetMenu6"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisPetMenu"..PetButtonPosition, "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31), 0); + PetButtonPosition = 6; + table.insert(PetMenuCreate, menuVariable); + end + -- Si l'invocation du Doomguard existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[30].ID then + menuVariable = getglobal("NecrosisPetMenu7"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisPetMenu"..PetButtonPosition, "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31), 0); + PetButtonPosition = 7; + table.insert(PetMenuCreate, menuVariable); + end + -- Si l'asservissement existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[35].ID then + menuVariable = getglobal("NecrosisPetMenu8"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisPetMenu"..PetButtonPosition, "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31), 0); + PetButtonPosition = 8; + table.insert(PetMenuCreate, menuVariable); + end + -- Si le sacrifice démoniaque existe, on affiche le bouton dans le menu des pets + if NECROSIS_SPELL_TABLE[44].ID then + menuVariable = getglobal("NecrosisPetMenu9"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisPetMenu"..PetButtonPosition, "CENTER", ((36 / NecrosisConfig.PetMenuPos) * 31), 0); + PetButtonPosition = 9; + table.insert(PetMenuCreate, menuVariable); + end + + + -- Maintenant que tous les boutons de pet sont placés les uns à côté des autres (hors de l'écran), on affiche les disponibles + for i = 1, table.getn(PetMenuCreate), 1 do + ShowUIPanel(PetMenuCreate[i]); + end + + -- Si l'Armure Démoniaque existe, on affiche le bouton dans le menu des buffs + if NECROSIS_SPELL_TABLE[31].ID or NECROSIS_SPELL_TABLE[36].ID then + menuVariable = getglobal("NecrosisBuffMenu1"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenuButton", "CENTER", 3000, 3000); + BuffButtonPosition = 1; + table.insert(BuffMenuCreate, menuVariable); + end + -- Si la respiration interminable existe, on affiche le bouton dans le menu des buffs + if NECROSIS_SPELL_TABLE[32].ID then + menuVariable = getglobal("NecrosisBuffMenu2"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenu"..BuffButtonPosition, "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31), 0); + BuffButtonPosition = 2; + table.insert(BuffMenuCreate, menuVariable); + end + -- Si la détection de l'invisibilité existe, on affiche le bouton dans le menu des buffs (au plus haut rang) + if NECROSIS_SPELL_TABLE[33].ID then + menuVariable = getglobal("NecrosisBuffMenu3"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenu"..BuffButtonPosition, "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31), 0); + BuffButtonPosition = 3; + table.insert(BuffMenuCreate, menuVariable); + end + -- Si la respiration interminable existe, on affiche le bouton dans le menu des buffs + if NECROSIS_SPELL_TABLE[34].ID then + menuVariable = getglobal("NecrosisBuffMenu4"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenu"..BuffButtonPosition, "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31), 0); + BuffButtonPosition = 4; + table.insert(BuffMenuCreate, menuVariable); + end + -- Si l'invocation de joueur existe, on affiche le bouton dans le menu des buffs + if NECROSIS_SPELL_TABLE[37].ID then + menuVariable = getglobal("NecrosisBuffMenu5"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenu"..BuffButtonPosition, "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31), 0); + BuffButtonPosition = 5; + table.insert(BuffMenuCreate, menuVariable); + end + -- Si le Radar à démon existe, on affiche le bouton dans le menu des buffs + if NECROSIS_SPELL_TABLE[39].ID then + menuVariable = getglobal("NecrosisBuffMenu6"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenu"..BuffButtonPosition, "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31), 0); + BuffButtonPosition = 6; + table.insert(BuffMenuCreate, menuVariable); + end + -- Si le Lien Spirituel existe, on affiche le bouton dans le menu des buffs + if NECROSIS_SPELL_TABLE[38].ID then + menuVariable = getglobal("NecrosisBuffMenu7"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenu"..BuffButtonPosition, "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31), 0); + BuffButtonPosition = 7; + table.insert(BuffMenuCreate, menuVariable); + end + -- Si la protection contre les ombres existe, on affiche le bouton dans le menu des buffs + if NECROSIS_SPELL_TABLE[43].ID then + menuVariable = getglobal("NecrosisBuffMenu8"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenu"..BuffButtonPosition, "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31), 0); + BuffButtonPosition = 8; + table.insert(BuffMenuCreate, menuVariable); + end + -- Si le banissement existe, on affiche le bouton dans le menu des buffs + if NECROSIS_SPELL_TABLE[9].ID then + menuVariable = getglobal("NecrosisBuffMenu9"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisBuffMenu"..BuffButtonPosition, "CENTER", ((36 / NecrosisConfig.BuffMenuPos) * 31), 0); + BuffButtonPosition = 9; + table.insert(BuffMenuCreate, menuVariable); + end + + -- Maintenant que tous les boutons de buff sont placés les uns à côté des autres (hors de l'écran), on affiche les disponibles + for i = 1, table.getn(BuffMenuCreate), 1 do + ShowUIPanel(BuffMenuCreate[i]); + end + + -- Si la Malédiction amplifiée existe, on affiche le bouton dans le menu des curses + if NECROSIS_SPELL_TABLE[42].ID then + menuVariable = getglobal("NecrosisCurseMenu1"); + menuVariable:ClearAllPoints(); + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + CurseButtonPosition = 1; + table.insert(CurseMenuCreate, menuVariable); + end + -- Si la Malédiction de faiblesse existe, on affiche le bouton dans le menu des curses + if NECROSIS_SPELL_TABLE[23].ID then + menuVariable = getglobal("NecrosisCurseMenu2"); + menuVariable:ClearAllPoints(); + if CurseButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisCurseMenu"..CurseButtonPosition, "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31), 0); + end + CurseButtonPosition = 2; + table.insert(CurseMenuCreate, menuVariable); + end + -- Si la Malédiction d'agonie existe, on affiche le bouton dans le menu des curses + if NECROSIS_SPELL_TABLE[22].ID then + menuVariable = getglobal("NecrosisCurseMenu3"); + menuVariable:ClearAllPoints(); + if CurseButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisCurseMenu"..CurseButtonPosition, "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31), 0); + end + CurseButtonPosition = 3; + table.insert(CurseMenuCreate, menuVariable); + end + -- Si la Malédiction de témérité existe, on affiche le bouton dans le menu des curses (au plus haut rang) + if NECROSIS_SPELL_TABLE[24].ID then + menuVariable = getglobal("NecrosisCurseMenu4"); + menuVariable:ClearAllPoints(); + if CurseButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisCurseMenu"..CurseButtonPosition, "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31), 0); + end + CurseButtonPosition = 4; + table.insert(CurseMenuCreate, menuVariable); + end + -- Si la Malédiction des languages existe, on affiche le bouton dans le menu des curses + if NECROSIS_SPELL_TABLE[25].ID then + menuVariable = getglobal("NecrosisCurseMenu5"); + menuVariable:ClearAllPoints(); + if CurseButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisCurseMenu"..CurseButtonPosition, "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31), 0); + end + CurseButtonPosition = 5; + table.insert(CurseMenuCreate, menuVariable); + end + -- Si la Malédiction de fatigue existe, on affiche le bouton dans le menu des curses + if NECROSIS_SPELL_TABLE[40].ID then + menuVariable = getglobal("NecrosisCurseMenu6"); + menuVariable:ClearAllPoints(); + if CurseButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisCurseMenu"..CurseButtonPosition, "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31), 0); + end + CurseButtonPosition = 6; + table.insert(CurseMenuCreate, menuVariable); + end + -- Si la Malédiction des éléments existe, on affiche le bouton dans le menu des curses + if NECROSIS_SPELL_TABLE[26].ID then + menuVariable = getglobal("NecrosisCurseMenu7"); + menuVariable:ClearAllPoints(); + if CurseButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisCurseMenu"..CurseButtonPosition, "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31), 0); + end + CurseButtonPosition = 7; + table.insert(CurseMenuCreate, menuVariable); + end + -- Si la Malédiction de l'ombre, on affiche le bouton dans le menu des curses + if NECROSIS_SPELL_TABLE[27].ID then + menuVariable = getglobal("NecrosisCurseMenu8"); + menuVariable:ClearAllPoints(); + if CurseButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisCurseMenu"..CurseButtonPosition, "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31), 0); + end + CurseButtonPosition = 8; + table.insert(CurseMenuCreate, menuVariable); + end + -- Si la Malédiction funeste existe, on affiche le bouton dans le menu des curses + if NECROSIS_SPELL_TABLE[16].ID then + menuVariable = getglobal("NecrosisCurseMenu9"); + menuVariable:ClearAllPoints(); + if CurseButtonPosition == 0 then + menuVariable:SetPoint("CENTER", "NecrosisCurseMenuButton", "CENTER", 3000, 3000); + else + menuVariable:SetPoint("CENTER", "NecrosisCurseMenu"..CurseButtonPosition, "CENTER", ((36 / NecrosisConfig.CurseMenuPos) * 31), 0); + end + CurseButtonPosition = 9; + table.insert(CurseMenuCreate, menuVariable); + end + + -- Maintenant que tous les boutons de curse sont placés les uns à côté des autres (hors de l'écran), on affiche les disponibles + for i = 1, table.getn(CurseMenuCreate), 1 do + ShowUIPanel(CurseMenuCreate[i]); + end +end + +-- Gestion des casts du menu des buffs +function Necrosis_BuffCast(type) + local TargetEnemy = false; + if UnitCanAttack("player","target") and type ~= 9 then + TargetUnit("player"); + TargetEnemy = true; + end + -- Si le Démoniste possède la peau de démon mais pas l'armure démoniaque + if not NECROSIS_SPELL_TABLE[type].ID then + CastSpell(NECROSIS_SPELL_TABLE[36].ID, "spell"); + else + if (type ~= 44) or (type == 44 and UnitExists("Pet")) then + CastSpell(NECROSIS_SPELL_TABLE[type].ID, "spell"); + end + end + LastBuff = type; + if TargetEnemy then TargetLastTarget(); end + AlphaBuffMenu = 1; + AlphaBuffVar = GetTime() + 3; +end + +-- Gestion des casts du menu des curses +function Necrosis_CurseCast(type, click) + if (UnitIsFriend("player","target")) and (not UnitCanAttack("player","target")) then + AssistUnit("target"); + end + if (UnitCanAttack("player","target")) and (UnitName("target") ~= nil) then + if (type == 23 or type == 22 or type == 40) then + if (click == "RightButton") and (NECROSIS_SPELL_TABLE[42].ID ~= nil) then + local start3, duration3 = GetSpellCooldown(NECROSIS_SPELL_TABLE[42].ID, "spell"); + if not (start3 > 0 and duration3 > 0) then + CastSpell(NECROSIS_SPELL_TABLE[42].ID, "spell"); + SpellStopCasting(NECROSIS_SPELL_TABLE[42].Name); + end + end + end + CastSpell(NECROSIS_SPELL_TABLE[type].ID, "spell"); + LastCurse = type; + LastCurseClick = click; + if (click == "MiddleButton") and (UnitExists("Pet")) then + PetAttack(); + end + end + AlphaCurseMenu = 1; + AlphaCurseVar = GetTime() + 3; +end + +-- Gestion des casts du menu des démons +function Necrosis_PetCast(type, click) + if type == 8 and InfernalStone == 0 then + Necrosis_Msg(NECROSIS_MESSAGE.Error.InfernalStoneNotPresent, "USER"); + return; + elseif type == 30 and DemoniacStone == 0 then + Necrosis_Msg(NECROSIS_MESSAGE.Error.DemoniacStoneNotPresent, "USER"); + return; + elseif type ~= 15 and type ~= 3 and type ~= 8 and type ~= 30 and Soulshards == 0 then + Necrosis_Msg(NECROSIS_MESSAGE.Error.SoulShardNotPresent, "USER"); + return; + end + if (type == 3 or type == 4 or type == 5 or type == 6) then + LastDemon = type; + if (click == "RightButton") and (NECROSIS_SPELL_TABLE[15].ID ~= nil) then + local start, duration = GetSpellCooldown(NECROSIS_SPELL_TABLE[15].ID, "spell"); + if not (start > 0 and duration > 0) then + CastSpell(NECROSIS_SPELL_TABLE[15].ID, "spell"); + SpellStopCasting(NECROSIS_SPELL_TABLE[15].Name); + end + end + if NecrosisConfig.DemonSummon and NecrosisConfig.ChatMsg and not NecrosisConfig.SM then + if NecrosisConfig.PetName[(type - 2)] == " " and NECROSIS_PET_MESSAGE[5] then + local tempnum = random(1, table.getn(NECROSIS_PET_MESSAGE[5])); + while tempnum == PetMess and table.getn(NECROSIS_PET_MESSAGE[5]) >= 2 do + tempnum = random(1, table.getn(NECROSIS_PET_MESSAGE[5])); + end + PetMess = tempnum; + for i = 1, table.getn(NECROSIS_PET_MESSAGE[5][tempnum]) do + Necrosis_Msg(Necrosis_MsgReplace(NECROSIS_PET_MESSAGE[5][tempnum][i]), "SAY"); + end + elseif NECROSIS_PET_MESSAGE[(type - 2)] then + local tempnum = random(1, table.getn(NECROSIS_PET_MESSAGE[(type - 2)])); + while tempnum == PetMess and table.getn(NECROSIS_PET_MESSAGE[(type - 2)]) >= 2 do + tempnum = random(1, table.getn(NECROSIS_PET_MESSAGE[(type - 2)])); + end + PetMess = tempnum; + for i = 1, table.getn(NECROSIS_PET_MESSAGE[(type - 2)][tempnum]) do + Necrosis_Msg(Necrosis_MsgReplace(NECROSIS_PET_MESSAGE[(type - 2)][tempnum][i], nil , type - 2), "SAY"); + end + end + end + end + CastSpell(NECROSIS_SPELL_TABLE[type].ID, "spell"); + AlphaPetMenu = 1; + AlphaPetVar = GetTime() + 3; +end + +-- Fonction permettant l'affichage des différentes pages du livre des configurations +function NecrosisGeneralTab_OnClick(id) + local TabName; + for index=1, 5, 1 do + TabName = getglobal("NecrosisGeneralTab"..index); + if index == id then + TabName:SetChecked(1); + else + TabName:SetChecked(nil); + end + end + if id == 1 then + ShowUIPanel(NecrosisShardMenu); + HideUIPanel(NecrosisMessageMenu); + HideUIPanel(NecrosisButtonMenu); + HideUIPanel(NecrosisTimerMenu); + HideUIPanel(NecrosisGraphOptionMenu); + NecrosisGeneralIcon:SetTexture("Interface\\QuestFrame\\UI-QuestLog-BookIcon"); + NecrosisGeneralPageText:SetText(NECROSIS_CONFIGURATION.Menu1); + elseif id == 2 then + HideUIPanel(NecrosisShardMenu); + ShowUIPanel(NecrosisMessageMenu); + HideUIPanel(NecrosisButtonMenu); + HideUIPanel(NecrosisTimerMenu); + HideUIPanel(NecrosisGraphOptionMenu); + NecrosisGeneralIcon:SetTexture("Interface\\QuestFrame\\UI-QuestLog-BookIcon"); + NecrosisGeneralPageText:SetText(NECROSIS_CONFIGURATION.Menu2); + elseif id == 3 then + HideUIPanel(NecrosisShardMenu); + HideUIPanel(NecrosisMessageMenu); + ShowUIPanel(NecrosisButtonMenu); + HideUIPanel(NecrosisTimerMenu); + HideUIPanel(NecrosisGraphOptionMenu); + NecrosisGeneralIcon:SetTexture("Interface\\QuestFrame\\UI-QuestLog-BookIcon"); + NecrosisGeneralPageText:SetText(NECROSIS_CONFIGURATION.Menu3); + elseif id == 4 then + HideUIPanel(NecrosisShardMenu); + HideUIPanel(NecrosisMessageMenu); + HideUIPanel(NecrosisButtonMenu); + ShowUIPanel(NecrosisTimerMenu); + HideUIPanel(NecrosisGraphOptionMenu); + NecrosisGeneralIcon:SetTexture("Interface\\QuestFrame\\UI-QuestLog-BookIcon"); + NecrosisGeneralPageText:SetText(NECROSIS_CONFIGURATION.Menu4); + elseif id == 5 then + HideUIPanel(NecrosisShardMenu); + HideUIPanel(NecrosisMessageMenu); + HideUIPanel(NecrosisButtonMenu); + HideUIPanel(NecrosisTimerMenu); + ShowUIPanel(NecrosisGraphOptionMenu); + NecrosisGeneralIcon:SetTexture("Interface\\QuestFrame\\UI-QuestLog-BookIcon"); + NecrosisGeneralPageText:SetText(NECROSIS_CONFIGURATION.Menu5); + end +end + + + +-- Bon, pour pouvoir utiliser le Timer sur les sorts instants, j'ai été obligé de m'inspirer de Cosmos +-- Comme je ne voulais pas rendre le mod dépendant de Sea, j'ai repris ses fonctions +-- Apparemment, la version Stand-Alone de ShardTracker a fait pareil :) :) +Necrosis_Hook = function (orig,new,type) + if(not type) then type = "before"; end + if(not Hx_Hooks) then Hx_Hooks = {}; end + if(not Hx_Hooks[orig]) then + Hx_Hooks[orig] = {}; Hx_Hooks[orig].before = {}; Hx_Hooks[orig].before.n = 0; Hx_Hooks[orig].after = {}; Hx_Hooks[orig].after.n = 0; Hx_Hooks[orig].hide = {}; Hx_Hooks[orig].hide.n = 0; Hx_Hooks[orig].replace = {}; Hx_Hooks[orig].replace.n = 0; Hx_Hooks[orig].orig = getglobal(orig); + else + for key,value in Hx_Hooks[orig][type] do if(value == getglobal(new)) then return; end end + end + Necrosis_Push(Hx_Hooks[orig][type],getglobal(new)); setglobal(orig,function(...) Necrosis_HookHandler(orig,arg); end); +end + +Necrosis_HookHandler = function (name,arg) + local called = false; local continue = true; local retval; + for key,value in Hx_Hooks[name].hide do + if(type(value) == "function") then if(not value(unpack(arg))) then continue = false; end called = true; end + end + if(not continue) then return; end + for key,value in Hx_Hooks[name].before do + if(type(value) == "function") then value(unpack(arg)); called = true; end + end + continue = false; + local replacedFunction = false; + for key,value in Hx_Hooks[name].replace do + if(type(value) == "function") then + replacedFunction = true; if(value(unpack(arg))) then continue = true; end called = true; + end + end + if(continue or (not replacedFunction)) then retval = Hx_Hooks[name].orig(unpack(arg)); end + for key,value in Hx_Hooks[name].after do + if(type(value) == "function") then value(unpack(arg)); called = true;end + end + if(not called) then setglobal(name,Hx_Hooks[name].orig); Hx_Hooks[name] = nil; end + return retval; +end + +function Necrosis_Push (table,val) + if(not table or not table.n) then return nil; end + table.n = table.n+1; + table[table.n] = val; +end + +function Necrosis_UseAction(id, number, onSelf) + Necrosis_MoneyToggle(); + NecrosisTooltip:SetAction(id); + local tip = tostring(NecrosisTooltipTextLeft1:GetText()); + if tip then + SpellCastName = tip; + SpellTargetName = UnitName("target"); + if not SpellTargetName then + SpellTargetName = ""; + end + SpellTargetLevel = UnitLevel("target"); + if not SpellTargetLevel then + SpellTargetLevel = ""; + end + end +end + +function Necrosis_CastSpell(spellId, spellbookTabNum) + local Name, Rank = GetSpellName(spellId, spellbookTabNum); + if Rank ~= nil then + local _, _, Rank2 = string.find(Rank, "(%d+)"); + SpellCastRank = tonumber(Rank2); + end + SpellCastName = Name; + + SpellTargetName = UnitName("target"); + if not SpellTargetName then + SpellTargetName = ""; + end + SpellTargetLevel = UnitLevel("target"); + if not SpellTargetLevel then + SpellTargetLevel = ""; + end +end + +function Necrosis_CastSpellByName(Spell) + local _, _, Name = string.find(Spell, "(.+)%("); + local _, _, Rank = string.find(Spell, "([%d]+)"); + + if Rank ~= nil then + local _, _, Rank2 = string.find(Rank, "(%d+)"); + SpellCastRank = tonumber(Rank2); + end + + if not Name then + _, _, Name = string.find(Spell, "(.+)"); + end + SpellCastName = Name; + + SpellTargetName = UnitName("target"); + if not SpellTargetName then + SpellTargetName = ""; + end + SpellTargetLevel = UnitLevel("target"); + if not SpellTargetLevel then + SpellTargetLevel = ""; + end +end + +function NecrosisTimer(nom, duree) + local Cible = UnitName("target"); + local Niveau = UnitLevel("target"); + local truc = 6; + if not Cible then + Cible = ""; + truc = 2; + end + if not Niveau then + Niveau = ""; + end + + SpellGroup, SpellTimer, TimerTable = NecrosisTimerX(nom, duree, truc, Cible, Niveau, SpellGroup, SpellTimer, TimerTable); +end + +function NecrosisSpellCast(name) + if string.find(name, "coa") then + SpellCastName = NECROSIS_SPELL_TABLE[22].Name; + SpellTargetName = UnitName("target"); + if not SpellTargetName then + SpellTargetName = ""; + end + SpellTargetLevel = UnitLevel("target"); + if not SpellTargetLevel then + SpellTargetLevel = ""; + end + CastSpell(NECROSIS_SPELL_TABLE[22].ID, "spell"); + end +end diff --git a/Necrosis.toc b/Necrosis.toc new file mode 100644 index 0000000..2b6548d --- /dev/null +++ b/Necrosis.toc @@ -0,0 +1,16 @@ +## Interface: 11200 +## Title: |CFFB700B7N|CFFFF00FFe|CFFFF50FFc|CFFFF99FFr|CFFFFC4FFo|CFFFFFFFFs|CFFFFC4FFi|CFFFF99FFs |CFFFF50FFL|CFFFF00FFd|CFFB700B7C +## Notes: Gestion graphique des shards. +## OptionalDeps: +## Dependencies: +## DefaultState: +## SavedVariables: +## SavedVariablesPerCharacter: NecrosisConfig +NecrosisGeneral.xml +Necrosis.xml +NecrosisTimer.xml +NecrosisShardMenu.xml +NecrosisMessageMenu.xml +NecrosisButtonMenu.xml +NecrosisTimerMenu.xml +NecrosisGraphOptionMenu.xml diff --git a/Necrosis.xml b/Necrosis.xml new file mode 100644 index 0000000..45b07d6 --- /dev/null +++ b/Necrosis.xml @@ -0,0 +1,1333 @@ + +