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=eff6269e292c2b0a1702b6dd0185ffdaMé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

Concours de Sorts n°3
Aller à la page Précédente  1, 2, 3, 4  Suivante
 
Poster un nouveau sujet   Répondre au sujet    Worldedit Index du Forum -> Les concours -> Concours terminés
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
 Wareditor
The Master of Nothing


Inscrit le: 22 Déc 2008
Messages: 1638
Sujets: 88
Spécialité en worldedit: Effacer


MessagePosté le: 26/07/12 05:54    Sujet du message: Citer

Je ne pourrais pas rendre mon sort car je n'ai accès a Internet seulement quelques heures par semaines et que je suis relativement occupé ( en vacances ).
Et mon sort bien que finis montre les bugs les plus puissants de l'univers. D'ailleurs assez bizarre : Une unité avec un vampirisme ou juste la valeur % et le rayon d'action est modifié arrive a crée un fatal lors de sa sélection... Enfin sa doit surement venir de ma mauvaise utilisation des hash et de quelques erreurs de ma part.

Si jamais cela intéresse quelqu'un voici la map en question : Télécharger la map
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Crowolf
Animateur


Inscrit le: 21 Avr 2008
Messages: 1607
Sujets: 81
Spécialité en worldedit: Utiliser le travail des autres
Médailles: 3 (En savoir plus...)
Grand décorateur (Quantité : 2) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 26/07/12 09:09    Sujet du message: Citer

2-3h pour faire un sort Rolling Eyes
Même mes sorts pour le concours d'unité avec juste l'éditeur sans déclo m'avaient pris plus de temps. Alors en mode apprentissage du jass...
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 30/07/12 23:50    Sujet du message: Citer

Voilà mon entrée. J'ai eu du mal à trouver un sort pour ce thème ^^.

Nuage de Sang par Tirlititi [vJASS/MUI]

Secret:

Description du sort :Draine le sang et 10% de la vie des alliés dans une zone pour invoquer un nuage de sang. Le nuage ralentit la vitesse de déplacement et d'attaque des ennemis proches de 20% et leur inflige des dommages sur la durée. Le nuage soigne également les alliés proches lorsqu'il est détruit à hauteur de 20% du total de vie drainée initialement. La zone d'invocation augmente à chaque niveau.
niveau 1 - 15 dommages + 10% du total de vie drainée lors de l'invocation par seconde pendant 12 secondes.
niveau 2 - 20 dommages + 15% du total de vie drainée lors de l'invocation par seconde pendant 16 secondes.
niveau 3 - 25 dommages + 20% du total de vie drainée lors de l'invocation par seconde pendant 20 secondes.

Infos supp :

Le modèle est de moi, l'icône est de CRAZZYRUSSIAN.

Script :
Secret:

Jass:
scope BloodCloud initializer init
// recquires TimerUtils

//========================//
//                                                      //
//         CONFIGURATION BLOC           //
//                                                      //
//========================//

    globals
        private constant integer SPELL_ID        = 'A000'
        private constant integer CLOUD_ID        = 'n000'
        private constant integer BUFF_ID         = 'B000'
        private constant string DRAIN_SFX        = "Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAlbatross.mdl"
        private constant string HEAL_SFX         = "Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl"
        private constant real TIMEOUT            = 0.03

        private real array BaseDamageOverTime       // Base DoT for units affected by the rain
        private real array LifeDrainAmount          // Percentage of current life drained for summoning
        private real array BonusDamageOverTime      // Factor of life drained turned into DoT
        private real array HealFactor               // Factor of life drained occasionaly healed
        private real array LifeDrainRadius          // Radius of the spell
        private real array CloudDuration            // Duration of the invocation
    endglobals

    private function SetupDatas takes nothing returns nothing
        // Level 1
        set BaseDamageOverTime[1]=15*TIMEOUT     // = 15 damage per second
        set LifeDrainAmount[1]=0.1               // = 10% of current life drained
        set BonusDamageOverTime[1]=0.1*TIMEOUT   // = 10% of life drained dealt per second
        set HealFactor[1]=0.2
        set LifeDrainRadius[1]=150
        set CloudDuration[1]=12
        // Level 2
        set BaseDamageOverTime[2]=20*TIMEOUT
        set LifeDrainAmount[2]=0.1
        set BonusDamageOverTime[2]=0.15*TIMEOUT
        set HealFactor[2]=0.2
        set LifeDrainRadius[2]=250
        set CloudDuration[2]=16
        // Level 3
        set BaseDamageOverTime[3]=25*TIMEOUT
        set LifeDrainAmount[3]=0.1
        set BonusDamageOverTime[3]=0.2*TIMEOUT
        set HealFactor[3]=0.2
        set LifeDrainRadius[3]=350
        set CloudDuration[3]=20
    endfunction

    // Filter for units affected by the blood drain
    private function DrainFilter takes unit target,unit caster,integer lvl returns boolean
        return GetOwningPlayer(target)==GetOwningPlayer(caster) and /*
            */ not IsUnitType(target,UNIT_TYPE_DEAD) and /*
            */ not IsUnitType(target,UNIT_TYPE_MECHANICAL) and /*
            */ not IsUnitType(target,UNIT_TYPE_MAGIC_IMMUNE)
    endfunction

    // Filter for units affected by the heal on cloud's death
    private function HealFilter takes unit target,unit cloud,integer lvl returns boolean
        return IsUnitAlly(target,GetOwningPlayer(cloud)) and /*
            */ not IsUnitType(target,UNIT_TYPE_DEAD) and /*
            */ not IsUnitType(target,UNIT_TYPE_MECHANICAL)
    endfunction

//==========================//
//                                                          //
//     END OF CONFIGURATION BLOC        //
//                                                          //
//==========================//

    private struct SpellData
        unit invoc
        integer lvl
        real lifedrained
    endstruct

    globals
        private group TmpGroup=CreateGroup()
        private real TmpRadius
    endglobals

    private function SpellLoop takes nothing returns nothing
        local SpellData data=GetTimerData(GetExpiredTimer())
        local unit target
        if IsUnitType(data.invoc,UNIT_TYPE_DEAD) or GetUnitTypeId(data.invoc)==0 then
            if GetUnitTypeId(data.invoc)!=0 then
                call GroupEnumUnitsInRange(TmpGroup,GetUnitX(data.invoc),GetUnitY(data.invoc),600,null)
                loop
                    set target=FirstOfGroup(TmpGroup)
                    exitwhen target==null
                    call GroupRemoveUnit(TmpGroup,target)
                    if HealFilter(target,data.invoc,data.lvl) and IsUnitInRangeXY(target,GetUnitX(data.invoc),GetUnitY(data.invoc),400) then
                        call SetWidgetLife(target,GetWidgetLife(target)+data.lifedrained*HealFactor[data.lvl])
                        call DestroyEffect(AddSpecialEffectTarget(HEAL_SFX,target,"chest"))
                    endif
                endloop
            endif
            call ReleaseTimer(GetExpiredTimer())
            call data.destroy()
        else
            call GroupEnumUnitsInRange(TmpGroup,GetUnitX(data.invoc),GetUnitY(data.invoc),300,null)
            loop
                set target=FirstOfGroup(TmpGroup)
                exitwhen target==null
                call GroupRemoveUnit(TmpGroup,target)
                if GetUnitAbilityLevel(target,BUFF_ID)>0 then
                    call UnitDamageTarget(data.invoc,target,BaseDamageOverTime[data.lvl]+BonusDamageOverTime[data.lvl]*data.lifedrained,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_UNIVERSAL,WEAPON_TYPE_WHOKNOWS)
                endif
            endloop
        endif
    endfunction

    private function SpellCast takes nothing returns nothing
        local real x=GetUnitX(GetSpellTargetUnit())
        local real y=GetUnitY(GetSpellTargetUnit())
        local unit caster=GetTriggerUnit()
        local unit invoc=CreateUnit(GetOwningPlayer(caster),CLOUD_ID,x,y,GetUnitFacing(caster))
        local unit tmp
        local integer lvl=GetUnitAbilityLevel(caster,SPELL_ID)
        local SpellData data=SpellData.create()
        local timer t=NewTimerEx(data)
        set data.invoc=invoc
        set data.lvl=lvl
        set data.lifedrained=0
        call GroupEnumUnitsInRange(TmpGroup,x,y,LifeDrainRadius[lvl]+200,null)
        loop
            set tmp=FirstOfGroup(TmpGroup)
            exitwhen tmp==null
            call GroupRemoveUnit(TmpGroup,tmp)
            if DrainFilter(tmp,caster,lvl) and IsUnitInRangeXY(tmp,x,y,LifeDrainRadius[lvl]) then
                set data.lifedrained=data.lifedrained+LifeDrainAmount[lvl]*GetWidgetLife(tmp)
                call SetWidgetLife(tmp,GetWidgetLife(tmp)*(1-LifeDrainAmount[lvl]))
                call DestroyEffect(AddSpecialEffectTarget(DRAIN_SFX,tmp,"chest"))
            endif
        endloop
        call UnitApplyTimedLife(invoc,'BTLF',CloudDuration[lvl])
        call SetUnitAnimation(invoc,"birth")
        call QueueUnitAnimation(invoc,"stand")
        call TimerStart(t,TIMEOUT,true,function SpellLoop)
        set caster=null
        set invoc=null
    endfunction

    private function SpellCondition takes nothing returns boolean
        if GetSpellAbilityId()==SPELL_ID then
            call SpellCast()
        endif
        return false
    endfunction

    private function init takes nothing returns nothing
        local trigger t=CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition(t,Condition(function SpellCondition))
        call SetupDatas()
    endfunction

endscope



Télécharger la map


_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)


Dernière édition par Tirlititi le 31/07/12 12:54; édité 2 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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: 31/07/12 09:29    Sujet du message: Citer

J'ai testé ton sort Tir, j'ai pas regardé le code parce-que c'est du vjass, mais j'ai juste noté un problème: pour moi, il n'y a pas de nuage(enfin pas de modèle graphique)

EDIT: tu ne respecte pas la template.
_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 31/07/12 12:55    Sujet du message: Citer

C'est vrai, merci.
Pour le modèle, c'est bizarre. Même avec les options graphiques au minimum, il s'affiche bien pour moi.

Si quelqu'un d'autre test, il pourra me dire si ça s'affiche?
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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: 31/07/12 12:59    Sujet du message: Citer

Il est censé ressembler à quoi ? parce que moi même dans l'éditeur je ne peux pas le voir.
_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Tirlititi



Inscrit le: 21 Fév 2010
Messages: 1785
Sujets: 22
Spécialité en worldedit: La modestie
Médailles: 1 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1)

MessagePosté le: 31/07/12 13:11    Sujet du message: Citer

À un nuage de sang, en fait Razz .
Secret:



Tu as des problèmes avec d'autres modèles de W3?
_________________
Warcraft III, c'était mieux avant. Y'avait des purs chefs-d'oeuvres du mapping !
Road Of Glory (par moi)
Casse-briques (par moi)
Temple de Glace (par moi)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 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: 31/07/12 16:10    Sujet du message: Citer

Non uniquement avec ce modèle, je t'explique lorsque je lance le sort, ça fait un effet sur les unités alliés puis plus rien(les dégâts et le heal sont appliquées)
_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 tetronitte
Floodeur prématuré


Inscrit le: 08 Avr 2012
Messages: 551
Sujets: 33



MessagePosté le: 31/07/12 20:59    Sujet du message: Citer

Ton sorts marche très bien chez moi. Le seul bémol c'est qu'il ne draine pas la vie des ennemis, mais après c'est trop cheaté Twisted Evil

Jolie le nuage de sang au passage.
_________________
Un jour je finirai une map W3
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Vladadamm
Floodozaurus


Inscrit le: 11 Fév 2011
Messages: 2151
Sujets: 114
Spécialité en worldedit: Chasser le Dragon, puis l'exterminer proprement avec une petite cuillère et une poêle.


MessagePosté le: 15/08/12 12:02    Sujet du message: Citer

Bon, ça fait 2jours maintenant que le concours s'est terminé.

Que 2 productions ont été rendues, ce qui est bien dommage.

Peste Sanglante par Lord_Demon_X [GUI/MUI?]
Secret:

Description du sort :Le mage sanglant crée une peste de sang dans la zone visée, absorbant la vitesse et les dégâts des ennemis dans la zone, si il y a des héros, ils perdent des stats qui sont ajoutés au héros,lorsque la peste disparaît les stats sont récupérés.

Niveau 1: 2% de vitesse par seconde, dure 8 secondes, 1 stat par seconde, 3 dégâts par seconde.
Niveau 2: 3% de vitesse par seconde, dure 10 secondes, 2 stats par seconde, 4 dégâts par seconde.
Niveau 3: 4% de vitesse par seconde, dure 12 secondes, 3 stats par seconde, 5 dégâts par seconde.

Infos supp :
Le sort nécessite plusieurs compétences supplémentaires (les malus) pour fonctionner et son "script" ne supporte donc pas directement tout les niveaux.

Je met les crédits ici:
-Skin: Blood mage par Dentothor
-Icone: BTN_CR_SS par CRAZYRUSSIAN


Déclencheurs :
Secret:

Gui:
Trigger:
Lauch
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Peste sanglante
Collapse Actions
Set Effects_Type = ObjectsSpawnmodelsOrcOrcbloodBattrollBlood.mdl
Set Integer_1 = (Integer_1 + 1)
Set Caster[Integer_1] = (Casting unit)
Set Point_1[Integer_1] = (Target point of ability being cast)
Set Timer[Integer_1] = (6.00 + (2.00 x (Real((Level of Peste sanglante  for Caster[Integer_1])))))
-------- Les effets spéciaux --------
Collapse For each (Integer a) from 1 to 8, do (Actions)
Collapse Boucle - Actions
Set Effects_Integer[Integer_1] = (Effects_Integer[Integer_1] + 1)
Set Tmp_Point_2 = (Point_1[Integer_1] offset by 90.00 towards (45.00 x (Real(a))) degrees)
Effet spécial - Create a special effect at Tmp_Point_2 using Effects_Type
Set Effects[Effects_Integer[Integer_1]] = (Last created special effect)
Custom script:   call RemoveLocation(udg_Tmp_Point_2)
Collapse For each (Integer c) from 1 to 32, do (Actions)
Collapse Boucle - Actions
Set Effects_Integer[Integer_1] = (Effects_Integer[Integer_1] + 1)
Set Tmp_Point_4 = (Point_1[Integer_1] offset by 270.00 towards (11.25 x (Real(c))) degrees)
Effet spécial - Create a special effect at Tmp_Point_4 using Effects_Type
Set Effects[Effects_Integer[Integer_1]] = (Last created special effect)
Custom script:   call RemoveLocation(udg_Tmp_Point_4)
-------- Le malus de stats --------
Collapse Groupe unité - Pick every unit in (Units within 300.00 of Point_1[Integer_1] matching ((((Matching unit) belongs to an enemy of (Owner of Caster[Integer_1])) Egal à  TRUE) and (((Matching unit) is Un héros) Egal à  TRUE))) and do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Level of Peste sanglante  for Caster[Integer_1]) Egal à  1
Collapse Alors - Actions
Unité - Add Affaiblissemnt (niveau 1) (héros) to (Picked unit)
Set Ability_Heros[Integer_1] = Affaiblissemnt (niveau 1) (héros)
Collapse Sinon - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Level of Peste sanglante  for Caster[Integer_1]) Egal à  2
Collapse Alors - Actions
Unité - Add Affaiblissemnt (niveau 2) (héros) to (Picked unit)
Set Ability_Heros[Integer_1] = Affaiblissemnt (niveau 2) (héros)
Collapse Sinon - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Level of Peste sanglante  for Caster[Integer_1]) Egal à  3
Collapse Alors - Actions
Unité - Add Affaiblissemnt (niveau 3) (héros) to (Picked unit)
Set Ability_Heros[Integer_1] = Affaiblissemnt (niveau 3) (héros)
Sinon - Actions
Groupe unité - Add (Picked unit) to Heros_Group[Integer_1]
-------- Le malus de vitesse et de dégâts --------
Collapse Groupe unité - Pick every unit in (Units within 300.00 of Point_1[Integer_1] matching (((Matching unit) belongs to an enemy of (Owner of Caster[Integer_1])) Egal à  TRUE)) and do (Actions)
Collapse Boucle - Actions
Groupe unité - Add (Picked unit) to Units_Group[Integer_1]
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Level of Peste sanglante  for Caster[Integer_1]) Egal à  1
Collapse Alors - Actions
Joueur - Désactiver Affaiblissement (niveau 1) (vitesse) for (Owner of (Picked unit))
Joueur - Désactiver Affaiblissement (niveau 1) (dégâts) for (Owner of (Picked unit))
Unité - Add Affaiblissement (niveau 1) (vitesse) to (Picked unit)
Unité - Add Affaiblissement (niveau 1) (dégâts) to (Picked unit)
Set Ability_Speed[Integer_1] = Affaiblissement (niveau 1) (vitesse)
Set Ability_Damage[Integer_1] = Affaiblissement (niveau 1) (dégâts)
Collapse Sinon - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Level of Peste sanglante  for Caster[Integer_1]) Egal à  2
Collapse Alors - Actions
Joueur - Désactiver Affaiblissement (niveau 2) (vitesse) for (Owner of (Picked unit))
Joueur - Désactiver Affaiblissement (niveau 2) (dégâts) for (Owner of (Picked unit))
Unité - Add Affaiblissement (niveau 2) (vitesse) to (Picked unit)
Unité - Add Affaiblissement (niveau 2) (dégâts) to (Picked unit)
Set Ability_Speed[Integer_1] = Affaiblissement (niveau 2) (vitesse)
Set Ability_Damage[Integer_1] = Affaiblissement (niveau 2) (dégâts)
Collapse Sinon - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Level of Peste sanglante  for Caster[Integer_1]) Egal à  3
Collapse Alors - Actions
Joueur - Désactiver Affaiblissement (niveau 3) (vitesse) for (Owner of (Picked unit))
Joueur - Désactiver Affaiblissement (niveau 3) (dégâts) for (Owner of (Picked unit))
Unité - Add Affaiblissement (niveau 3) (vitesse) to (Picked unit)
Unité - Add Affaiblissement (niveau 3) (dégâts) to (Picked unit)
Set Ability_Speed[Integer_1] = Affaiblissement (niveau 3) (vitesse)
Set Ability_Damage[Integer_1] = Affaiblissement (niveau 3) (dégâts)
Collapse Sinon - Actions



Secret:

Gui:
Trigger:
Collapse Evénements
Temps - Every 1.00 seconds of game time
Conditions
Collapse Actions
Collapse For each (Integer f) from 1 to Integer_1, do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
Timer[f] Supérieur à  0.00
Collapse Alors - Actions
Set Timer[f] = (Timer[f] - 1.00)
-------- Détruire les effets spéciaux --------
Collapse For each (Integer a) from 1 to Effects_Integer[f], do (Actions)
Collapse Boucle - Actions
Effet spécial - Destroy Effects[Effects_Integer[f]]
Set Effects_Integer[f] = 0
-------- Les recréer --------
Collapse For each (Integer a) from 1 to 8, do (Actions)
Collapse Boucle - Actions
Set Effects_Integer[f] = (Effects_Integer[f] + 1)
Set Tmp_Point_2 = (Point_1[f] offset by 90.00 towards (45.00 x (Real(a))) degrees)
Effet spécial - Create a special effect at Tmp_Point_2 using Effects_Type
Set Effects[Effects_Integer[f]] = (Last created special effect)
Custom script:   call RemoveLocation(udg_Tmp_Point_2)
Collapse For each (Integer c) from 1 to 32, do (Actions)
Collapse Boucle - Actions
Set Effects_Integer[f] = (Effects_Integer[f] + 1)
Set Tmp_Point_4 = (Point_1[f] offset by 270.00 towards (11.25 x (Real(c))) degrees)
Effet spécial - Create a special effect at Tmp_Point_4 using Effects_Type
Set Effects[Effects_Integer[f]] = (Last created special effect)
Custom script:   call RemoveLocation(udg_Tmp_Point_4)
-------- retirer des stats/dégâts/vitesse --------
Collapse Groupe unité - Pick every unit in Heros_Group[f] and do (Actions)
Collapse Boucle - Actions
Unité - Increase level of Ability_Heros[f] for (Picked unit)
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
Ability_Heros[f] Egal à  Affaiblissemnt (niveau 1) (héros)
Collapse Alors - Actions
Héros - Modify Force of Caster[f]: Ajouter (Number of units in Heros_Group[f])
Héros - Modify Agilité of Caster[f]: Ajouter (Number of units in Heros_Group[f])
Héros - Modify Intelligence of Caster[f]: Ajouter (Number of units in Heros_Group[f])
Set Agi_Bonus[f] = (Agi_Bonus[f] + (Number of units in Heros_Group[f]))
Set Int_Bonus[f] = (Int_Bonus[f] + (Number of units in Heros_Group[f]))
Set Str_Bonus[f] = (Str_Bonus[f] + (Number of units in Heros_Group[f]))
Collapse Sinon - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
Ability_Heros[f] Egal à  Affaiblissemnt (niveau 2) (héros)
Collapse Alors - Actions
Héros - Modify Force of Caster[f]: Ajouter (2 x (Number of units in Heros_Group[f]))
Héros - Modify Agilité of Caster[f]: Ajouter (2 x (Number of units in Heros_Group[f]))
Héros - Modify Intelligence of Caster[f]: Ajouter (2 x (Number of units in Heros_Group[f]))
Set Agi_Bonus[f] = (Agi_Bonus[f] + (2 x (Number of units in Heros_Group[f])))
Set Int_Bonus[f] = (Int_Bonus[f] + (2 x (Number of units in Heros_Group[f])))
Set Str_Bonus[f] = (Str_Bonus[f] + (2 x (Number of units in Heros_Group[f])))
Collapse Sinon - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
Ability_Heros[f] Egal à  Affaiblissemnt (niveau 3) (héros)
Collapse Alors - Actions
Héros - Modify Force of Caster[f]: Ajouter (3 x (Number of units in Heros_Group[f]))
Héros - Modify Agilité of Caster[f]: Ajouter (3 x (Number of units in Heros_Group[f]))
Héros - Modify Intelligence of Caster[f]: Ajouter (3 x (Number of units in Heros_Group[f]))
Set Agi_Bonus[f] = (Agi_Bonus[f] + (3 x (Number of units in Heros_Group[f])))
Set Int_Bonus[f] = (Int_Bonus[f] + (3 x (Number of units in Heros_Group[f])))
Set Str_Bonus[f] = (Str_Bonus[f] + (3 x (Number of units in Heros_Group[f])))
Sinon - Actions
Collapse Groupe unité - Pick every unit in Units_Group[f] and do (Actions)
Collapse Boucle - Actions
Unité - Increase level of Ability_Damage[f] for (Picked unit)
Unité - Increase level of Ability_Speed[f] for (Picked unit)
Collapse Sinon - Actions
Collapse For each (Integer a) from 1 to Effects_Integer[f], do (Actions)
Collapse Boucle - Actions
Effet spécial - Destroy Effects[Effects_Integer[f]]
Collapse Groupe unité - Pick every unit in Units_Group[f] and do (Actions)
Collapse Boucle - Actions
Unité - Remove Ability_Damage[f] from (Picked unit)
Unité - Remove Ability_Heros[f] from (Picked unit)
Unité - Remove Ability_Speed[f] from (Picked unit)
Groupe unité - Remove all units of Heros_Group[f] from Heros_Group[f]
Groupe unité - Remove all units of Units_Group[f] from Units_Group[f]
Héros - Modify Force of Caster[f]: Soustraire Str_Bonus[f]
Héros - Modify Agilité of Caster[f]: Soustraire Agi_Bonus[f]
Héros - Modify Intelligence of Caster[f]: Soustraire Int_Bonus[f]
Set Caster[f] = Pas d'unité
Set Agi_Bonus[f] = 0
Set Int_Bonus[f] = 0
Set Str_Bonus[f] = 0
Custom script:   call RemoveLocation(udg_Point_1[udg_f])
Set Integer_1 = (Integer_1 - 1)



Screenshots:
Secret:

Free a écrit:
Erreur 500 - Internal Error



Lien de la map: Télécharger la map


Nuage de Sang par Tirlititi [vJASS/MUI]

Secret:

Description du sort :Draine le sang et 10% de la vie des alliés dans une zone pour invoquer un nuage de sang. Le nuage ralentit la vitesse de déplacement et d'attaque des ennemis proches de 20% et leur inflige des dommages sur la durée. Le nuage soigne également les alliés proches lorsqu'il est détruit à hauteur de 20% du total de vie drainée initialement. La zone d'invocation augmente à chaque niveau.
niveau 1 - 15 dommages + 10% du total de vie drainée lors de l'invocation par seconde pendant 12 secondes.
niveau 2 - 20 dommages + 15% du total de vie drainée lors de l'invocation par seconde pendant 16 secondes.
niveau 3 - 25 dommages + 20% du total de vie drainée lors de l'invocation par seconde pendant 20 secondes.

Infos supp :

Le modèle est de moi, l'icône est de CRAZZYRUSSIAN.

Script :
Secret:

Jass:
scope BloodCloud initializer init
// recquires TimerUtils

//========================//
//                                                      //
//         CONFIGURATION BLOC           //
//                                                      //
//========================//

    globals
        private constant integer SPELL_ID        = 'A000'
        private constant integer CLOUD_ID        = 'n000'
        private constant integer BUFF_ID         = 'B000'
        private constant string DRAIN_SFX        = "Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAlbatross.mdl"
        private constant string HEAL_SFX         = "Abilities\\Spells\\Undead\\VampiricAura\\VampiricAuraTarget.mdl"
        private constant real TIMEOUT            = 0.03

        private real array BaseDamageOverTime       // Base DoT for units affected by the rain
        private real array LifeDrainAmount          // Percentage of current life drained for summoning
        private real array BonusDamageOverTime      // Factor of life drained turned into DoT
        private real array HealFactor               // Factor of life drained occasionaly healed
        private real array LifeDrainRadius          // Radius of the spell
        private real array CloudDuration            // Duration of the invocation
    endglobals

    private function SetupDatas takes nothing returns nothing
        // Level 1
        set BaseDamageOverTime[1]=15*TIMEOUT     // = 15 damage per second
        set LifeDrainAmount[1]=0.1               // = 10% of current life drained
        set BonusDamageOverTime[1]=0.1*TIMEOUT   // = 10% of life drained dealt per second
        set HealFactor[1]=0.2
        set LifeDrainRadius[1]=150
        set CloudDuration[1]=12
        // Level 2
        set BaseDamageOverTime[2]=20*TIMEOUT
        set LifeDrainAmount[2]=0.1
        set BonusDamageOverTime[2]=0.15*TIMEOUT
        set HealFactor[2]=0.2
        set LifeDrainRadius[2]=250
        set CloudDuration[2]=16
        // Level 3
        set BaseDamageOverTime[3]=25*TIMEOUT
        set LifeDrainAmount[3]=0.1
        set BonusDamageOverTime[3]=0.2*TIMEOUT
        set HealFactor[3]=0.2
        set LifeDrainRadius[3]=350
        set CloudDuration[3]=20
    endfunction

    // Filter for units affected by the blood drain
    private function DrainFilter takes unit target,unit caster,integer lvl returns boolean
        return GetOwningPlayer(target)==GetOwningPlayer(caster) and /*
            */ not IsUnitType(target,UNIT_TYPE_DEAD) and /*
            */ not IsUnitType(target,UNIT_TYPE_MECHANICAL) and /*
            */ not IsUnitType(target,UNIT_TYPE_MAGIC_IMMUNE)
    endfunction

    // Filter for units affected by the heal on cloud's death
    private function HealFilter takes unit target,unit cloud,integer lvl returns boolean
        return IsUnitAlly(target,GetOwningPlayer(cloud)) and /*
            */ not IsUnitType(target,UNIT_TYPE_DEAD) and /*
            */ not IsUnitType(target,UNIT_TYPE_MECHANICAL)
    endfunction

//==========================//
//                                                          //
//     END OF CONFIGURATION BLOC        //
//                                                          //
//==========================//

    private struct SpellData
        unit invoc
        integer lvl
        real lifedrained
    endstruct

    globals
        private group TmpGroup=CreateGroup()
        private real TmpRadius
    endglobals

    private function SpellLoop takes nothing returns nothing
        local SpellData data=GetTimerData(GetExpiredTimer())
        local unit target
        if IsUnitType(data.invoc,UNIT_TYPE_DEAD) or GetUnitTypeId(data.invoc)==0 then
            if GetUnitTypeId(data.invoc)!=0 then
                call GroupEnumUnitsInRange(TmpGroup,GetUnitX(data.invoc),GetUnitY(data.invoc),600,null)
                loop
                    set target=FirstOfGroup(TmpGroup)
                    exitwhen target==null
                    call GroupRemoveUnit(TmpGroup,target)
                    if HealFilter(target,data.invoc,data.lvl) and IsUnitInRangeXY(target,GetUnitX(data.invoc),GetUnitY(data.invoc),400) then
                        call SetWidgetLife(target,GetWidgetLife(target)+data.lifedrained*HealFactor[data.lvl])
                        call DestroyEffect(AddSpecialEffectTarget(HEAL_SFX,target,"chest"))
                    endif
                endloop
            endif
            call ReleaseTimer(GetExpiredTimer())
            call data.destroy()
        else
            call GroupEnumUnitsInRange(TmpGroup,GetUnitX(data.invoc),GetUnitY(data.invoc),300,null)
            loop
                set target=FirstOfGroup(TmpGroup)
                exitwhen target==null
                call GroupRemoveUnit(TmpGroup,target)
                if GetUnitAbilityLevel(target,BUFF_ID)>0 then
                    call UnitDamageTarget(data.invoc,target,BaseDamageOverTime[data.lvl]+BonusDamageOverTime[data.lvl]*data.lifedrained,true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_UNIVERSAL,WEAPON_TYPE_WHOKNOWS)
                endif
            endloop
        endif
    endfunction

    private function SpellCast takes nothing returns nothing
        local real x=GetUnitX(GetSpellTargetUnit())
        local real y=GetUnitY(GetSpellTargetUnit())
        local unit caster=GetTriggerUnit()
        local unit invoc=CreateUnit(GetOwningPlayer(caster),CLOUD_ID,x,y,GetUnitFacing(caster))
        local unit tmp
        local integer lvl=GetUnitAbilityLevel(caster,SPELL_ID)
        local SpellData data=SpellData.create()
        local timer t=NewTimerEx(data)
        set data.invoc=invoc
        set data.lvl=lvl
        set data.lifedrained=0
        call GroupEnumUnitsInRange(TmpGroup,x,y,LifeDrainRadius[lvl]+200,null)
        loop
            set tmp=FirstOfGroup(TmpGroup)
            exitwhen tmp==null
            call GroupRemoveUnit(TmpGroup,tmp)
            if DrainFilter(tmp,caster,lvl) and IsUnitInRangeXY(tmp,x,y,LifeDrainRadius[lvl]) then
                set data.lifedrained=data.lifedrained+LifeDrainAmount[lvl]*GetWidgetLife(tmp)
                call SetWidgetLife(tmp,GetWidgetLife(tmp)*(1-LifeDrainAmount[lvl]))
                call DestroyEffect(AddSpecialEffectTarget(DRAIN_SFX,tmp,"chest"))
            endif
        endloop
        call UnitApplyTimedLife(invoc,'BTLF',CloudDuration[lvl])
        call SetUnitAnimation(invoc,"birth")
        call QueueUnitAnimation(invoc,"stand")
        call TimerStart(t,TIMEOUT,true,function SpellLoop)
        set caster=null
        set invoc=null
    endfunction

    private function SpellCondition takes nothing returns boolean
        if GetSpellAbilityId()==SPELL_ID then
            call SpellCast()
        endif
        return false
    endfunction

    private function init takes nothing returns nothing
        local trigger t=CreateTrigger()
        call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
        call TriggerAddCondition(t,Condition(function SpellCondition))
        call SetupDatas()
    endfunction

endscope



Télécharger la map



Hoth, tu peut juger maintenant
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Hoth
Floodeur prématuré


Inscrit le: 26 Mai 2010
Messages: 655
Sujets: 14
Spécialité en worldedit: Aucune


MessagePosté le: 15/08/12 17:16    Sujet du message: Citer

Bon ba les résultats pour bientôt du coup, dommage que peu de gens tiennent leurs promesses de participation...
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 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: 02/09/12 15:56    Sujet du message: Citer

J'actualise parceque après 16 jours on n'a toujours pas les résultats (ce qui fait quand même beaucoup)
_________________
Inactif(Enfn presque)
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Cho'gall
Floodeur prématuré


Inscrit le: 05 Nov 2010
Messages: 696
Sujets: 56
Spécialité en worldedit: Cartes Melee


MessagePosté le: 02/09/12 18:47    Sujet du message: Citer

Lord_Demon_X a écrit:
J'actualise parceque après 16 jours on n'a toujours pas les résultats (ce qui fait quand même beaucoup)


Les cours vont reprendre donc patience ... Laughing
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Hoth
Floodeur prématuré


Inscrit le: 26 Mai 2010
Messages: 655
Sujets: 14
Spécialité en worldedit: Aucune


MessagePosté le: 02/09/12 21:32    Sujet du message: Citer

Désolé ça m'était sortit de la tête, j'ai juger le sort de tirli mais pas encore le tient. Je post ça demain si possible.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 Troll-Brain
Ri1kamoua


Inscrit le: 23 Aoû 2007
Messages: 7143
Sujets: 147
Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance
Médailles: 2 (En savoir plus...)
Grand mage créateur de sort (Quantité : 1) Rédacteur de tuto #3 (Quantité : 1)

MessagePosté le: 02/09/12 23:20    Sujet du message: Citer

J'ai lu le code de Tirlititi et je ne vois pas de vérification si une unité est ennemie du caster ou non?
J'ai peut être mal lu mais à priori la description des effets du spell ne serait pas valide ?
_________________
Le violet, c'est moche.
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 concours -> Concours terminés Toutes les heures sont au format GMT + 1 Heure
Aller à la page Précédente  1, 2, 3, 4  Suivante
Page 3 sur 4

 
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