Worldedit
  Worldedit
Le site sur l'éditeur de warcraft 3 !
 
  FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres    Groupes d'utilisateursGroupes d'utilisateurs   medals.php?sid=cd644dccf0bc777e0392fefe3c3ef922Médailles   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 
  FAQFAQ World Editor   UploadUploader une map ou une image    UploadAjouter sa map à l'annuaire   UploadConsulter l'annuaire

Mon fabuleux DoT System [vJASS]

 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les sorts
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Ectelion
Membre reconnu


Inscrit le: 12 Nov 2011
Messages: 1062
Sujets: 107
Spécialité en worldedit: Inactif(Enfin presque)
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 23/07/15 19:36    Sujet du message: Mon fabuleux DoT System [vJASS] Citer

Je sais que ça fait longtemps que je n'ai pas upload un sort qui fasse passer les Frames de vos PC de 60 à 0 en un cast (sans multi-instancing donc) et ça va continuer.
Après des mois de recherches(ça a pris des mois parce que j'ai plus glandouillé que recherché.) j'ai finalement réussit à rendre totalement MUI(enfin j'espère) le système que j'avais fait pour m'entraîner au maniement du vJASS.
Etant par conséquent fou de joie, je me suis dit qu'il méritait d'être upload sur epicwar(ben ouais, le fofo n'héberge plus les maps et ce depuis un moment pour ceux qui ne s'en souviendraient pas) pour l’achèvement (ça se dit ?) qu'il représente.

Donc du coup voilà une petite library de dégâts sur la durée. Merci de ne pas la juger trop sévèrement, ce n'est pas sa faute si le mapmaker qui l'a créée est une tanche en WE.

Pour télécharger c'est ici.

Ah, j'allais oublier, le code:

Secret:

Jass:
library SimpleDoT

    globals
        private constant real Interval = 0.03
        private boolean testmode = FALSE
        private integer Count = -1
        private timer Time = CreateTimer(  )
        private DamageOverTime array Instance
    endglobals
   
     struct DamageOverTime
        real damage
        real interval
        real lasting
        real cinterval
        effect model
        unit target
        unit caster
       
        static method create takes unit t, unit c, real l, real i, real d, string m, string a returns DamageOverTime
            set Count = Count + 1
            set Instance[Count] = DamageOverTime.allocate()
            set Instance[Count].lasting = l
            set Instance[Count].caster = c
            set Instance[Count].damage = d
            set Instance[Count].interval = i
            set Instance[Count].cinterval = i
            set Instance[Count].target = t
            set Instance[Count].model = AddSpecialEffectTarget( m, t, a)
            if testmode == true then
                call BJDebugMsg("An Instance of Struct was created with the following parameters: |c00FF0000Target|r: " + GetUnitName(t) + " |c00FF0000Caster|r: " + GetUnitName(c) + " |c00FF0000Damage|r: " + R2S(d) + " |c00FF0000Duration|r: " + R2S(l) + " |c00FF0000Interval|r: " + R2S(i) )
            endif
            if Count == 0 then
                call TimerStart( Time, 0.03, TRUE, function DamageOverTime.Loop )
            endif
            return Instance[Count]
        endmethod
       
       private static method Loop takes nothing returns nothing
            local DamageOverTime i
            local integer c = Count
            loop
                exitwhen c == -1
                set i = Instance[c]
                call i.action()
                set c = c - 1
            endloop
        endmethod
       
        private method action takes nothing returns nothing
            if this.lasting >= 0.00 then
                set this.lasting = this.lasting - Interval
                set this.cinterval = this.cinterval - Interval
                if this.cinterval <= 0.00 then
                    call UnitDamageTarget( this.caster, this.target, this.damage, FALSE, TRUE, ATTACK_TYPE_HERO, DAMAGE_TYPE_UNKNOWN, WEAPON_TYPE_WHOKNOWS )
                    set this.cinterval = this.interval
                endif
            else
                set this = Instance[Count]
                call Instance[Count].deallocate()
                set Count = Count - 1
                if Count == -1 then
                    call PauseTimer( Time )
                    call BJDebugMsg("No more instance running")
                endif
            endif
        endmethod
       
    endstruct

endlibrary



Je sais, j'aurais pu mettre le Weapon Type, Damage Type et Attack Type customizable mais bon(lazyness quand tu nous tiens).

(pitié ne me frappez pas à cause de la tabulation)
_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 LightDragoon
Ptit Nouveau


Inscrit le: 01 Mai 2014
Messages: 35
Sujets: 5
Spécialité en worldedit: France


MessagePosté le: 24/07/15 16:47    Sujet du message: Citer

Petite suggestion : Plutôt que de demander à l'utilisateur de ta library les dégats par intervalle demande lui les dégats totaux et ensuite tu les divises par le nombre d'intervalle dans la durée, ça évite à certain flemmard (comme moi) de faire le calcul des dégats de chaque intervalle.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Adresse AIM
 Ectelion
Membre reconnu


Inscrit le: 12 Nov 2011
Messages: 1062
Sujets: 107
Spécialité en worldedit: Inactif(Enfin presque)
Médailles: 1 (En savoir plus...)
Créateur d'unité (Quantité : 1)

MessagePosté le: 24/07/15 18:19    Sujet du message: Citer

J'ai modifié le système pour qu'il fasse avec les dégâts totaux et non pas avec celles par intervalle.

J'ai rajouté différents la prise en compte de paramètres inhérents à UnitDamageTarget(si les dégâts sont comptés comme ceux d'un sort ou d'une attaque, si c'est considéré comme une attaque à distance et peut donc rater) et les trois types(Attaque,Dégâts et Arme).

Je ne met pas la nouvelle version en ligne car il semble que la réallocation dynamique fasse des siennes alors que c'était pas le cas avant(dégâts pas appliqués et effet qui subsiste).
_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les sorts Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com