Inscrit le: 12 Nov 2011 Messages: 1062 Sujets: 107 Spécialité en worldedit: Inactif(Enfin presque) Médailles: 1 (En savoir plus...)
Posté le: 23/07/15 19:36 Sujet du message: Mon fabuleux DoT System [vJASS]
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.
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) _________________
Inscrit le: 01 Mai 2014 Messages: 35 Sujets: 5 Spécialité en worldedit: France
Posté le: 24/07/15 16:47 Sujet du message:
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. _________________
Inscrit le: 12 Nov 2011 Messages: 1062 Sujets: 107 Spécialité en worldedit: Inactif(Enfin presque) Médailles: 1 (En savoir plus...)
Posté le: 24/07/15 18:19 Sujet du message:
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). _________________
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