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=a224c5d1739c1efcbaf98ff21febba3fMé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 Création de Sort F2J #1
Aller à la page 1, 2, 3  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
 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: 30/10/11 17:23    Sujet du message: Concours de Création de Sort F2J #1 Citer

Secret:

Je sais que les derniers concours n'ont pas été des succès, ce pourquoi je propose un type de concours qui demandent moins de travail et ce avec un nouveau style de notation nommé F2J (Free To Judge).

But du Concours :

Lors de ce concours, vous devrez créer un ou plusieurs sorts respectant le thème (ci-dessous).
Chacun des sorts présentés lors de ce concours seront notés et la meilleure production remportera le concours.

Thème :

Le thème de ce concours est "Offensif"

En gros, vous devrez faire un (ou plusieurs) sort offensif

Ce thème est large et permet ainsi de laisser une grande part à la créativité.

Des sorts ayant des effets défensifs ou supportifs, mais qui restent offensifs en général sont acceptés.

Règlement :
    N'importe qui peut présenter un sort.
    On peut présenter autant de sorts que l'on veut (sans en poster trois cent) tant qu'ils respectent le thème.
    Tout sort présenté doit être une création de la personne l'ayant présenté.
    Tout sort présenté devra avoir un nom. (en anglais ou en français)
    Tout sort présenté devra être posté avec un lien valide pour accéder à la TestMap et des triggers.
    Tout sort présenté devra être posté avec une description du sort.
    Tout sort présenté peut être accompagné de screenshots du sort
    .
    N'importe qui peut juger n'importe quel sort tant que le sort jugé n'est pas une de ses créations.
    Tout jugement d'une création présentée doit respecter le barème.
    Tout jugement doit être neutre.
    Tout jugement doit être accompagné d'explications. (pas assez de ci, trop de ça, etc...)
    Tout sort présenté après la fin de la partie I du concours ne sera pas pris en compte pour le concours.
    Toute note présentée après la fin du concours ne sera pas prise en compte pour le concours.


Déroulement du Concours :

Le concours se déroule en deux parties :

Partie I : Présentation des sorts [30/10 - 20/11]

Partie II : Notation des sorts [21/11 - 31/11]

Barème :

Respect du Thème : /2 Si le sort est bien un sort offensif.
Originalité du Sort : /5 Si le sort est très original, pas très original ou vu et revu.
Effets Spéciaux : /3 Si le sort est beau graphiquement ou complètement moche.
Complexité du sort : /3 Si le sort est complexe ou pas. (sans pousser à l'extrême) En gros, si le sort n'utilise aucun déclencheur, vous aurez un gros 0 dans cette ligne.
Icône : /2 L'icône choisie doit correspondre au sort.
Descriptions du Sort : /3 Le sort doit être accompagné d'une description potable qui explique bien ce que fait le sort.
Instanciabilité : /2 0 : Rien / 1 : MPI / 2 : MUI

Rigueur du codage / Autres remarques : -2 / -1 / 0 / +1 / +2 (justification obligée) Des leaks ou des bugs peuvent être comptées comme malus. Un très bon codage peut être compté comme bonus.

Sorts présentés :

Charge par Vladadamm [GUI/MUI]

Secret:

Juste un simple sort de charge MUI et GUI.

Description du sort : Le héros charge vers la cible, l’assommant pendant 3/4/5 secondes et lui infligeant 80/160/240 dommages sur le choc de la collision.

Infos supp :

Lors de la charge, le héros peut traverser les autres unités.
La charge s'arrête si :
    Le héros meurt.
    La cible du sort meurt.
    La cible du sort devient invisible. (et que le joueur controllant le héros n'a pas de détection d'invisible)
    La cible du sort devient invulnérable/invulnérable à la magie.
    La cible du sort passe dans le brouillard de guerre.


Déclencheurs :
Secret:

Gui:
Trigger:
Charge init
Collapse Evénements
Map initialization
Conditions
Collapse Actions
Table de hachage - Create a hashtable
Set Charge_Hash = (Last created hashtable)
Gui:
Trigger:
Charge cast
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Charge
Collapse Actions
Groupe unité - Add (Triggering unit) to Charge_Casters
Table de hachage - Save Handle Of(Target unit of ability being cast) as 0 of (Key (Triggering unit)) in Charge_Hash
Unité - Turn collision for (Triggering unit) Off
Déclencheur - Turn on Charge loop <gen>
Déclencheur - Turn on Charge follow remove <gen>
Gui:
Trigger:
Charge loop
Collapse Evénements
Temps - Every 0.04 seconds of game time
Conditions
Collapse Actions
Collapse Groupe unité - Pick every unit in Charge_Casters and do (Actions)
Collapse Boucle - Actions
Set Charge_Point = (Position of (Picked unit))
Set Charge_Point2 = (Position of (Load 0 of (Key (Picked unit)) in Charge_Hash))
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Distance between Charge_Point and Charge_Point2) Supérieur à  75.00
Collapse Alors - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
((Load 0 of (Key (Picked unit)) in Charge_Hash) is Insensible à  la magie) Egal à  FALSE
((Load 0 of (Key (Picked unit)) in Charge_Hash) has buff Invulnérable) Egal à  FALSE
((Load 0 of (Key (Picked unit)) in Charge_Hash) is dead) Egal à  FALSE
((Picked unit) is dead) Egal à  FALSE
((Load 0 of (Key (Picked unit)) in Charge_Hash) is hidden) Egal à  FALSE
((Load 0 of (Key (Picked unit)) in Charge_Hash) is visible to (Owner of (Picked unit))) Egal à  TRUE
((Load 0 of (Key (Picked unit)) in Charge_Hash) is fogged to (Owner of (Picked unit))) Egal à  FALSE
((Load 0 of (Key (Picked unit)) in Charge_Hash) is masked to (Owner of (Picked unit))) Egal à  FALSE
Collapse Alors - Actions
Set Charge_Point3 = (Charge_Point offset by 18.00 towards (Angle from Charge_Point to Charge_Point2) degrees)
Unité - Move (Picked unit) instantly to Charge_Point3, facing Charge_Point2
Unité - Create 1 Charge Following for (Owner of (Picked unit)) at Charge_Point facing (Facing of (Picked unit)) degrees
Groupe unité - Add (Last created unit) to Charge_Following
Animation - Change (Last created unit) flying height to 0.00 at 1000.00
Unité - Add a 0.24 second Générique expiration timer to (Last created unit)
Custom script:   call RemoveLocation( udg_Charge_Point3 )
Collapse Sinon - Actions
Unité - Turn collision for (Picked unit) On
Groupe unité - Remove (Picked unit) from Charge_Casters
Table de hachage - Clear all child hashtables of child (Key (Picked unit)) in Charge_Hash
Collapse Sinon - Actions
Unité - Turn collision for (Picked unit) On
Groupe unité - Remove (Picked unit) from Charge_Casters
Unité - Create 1 Charge Dummy for (Owner of (Picked unit)) at Charge_Point2 facing Charge_Point2
Unité - Set level of Charge Stun + Damages  for (Last created unit) to (Level of Charge  for (Picked unit))
Unité - Order (Last created unit) to Roi de la montagne humain - Boule de foudre (Load 0 of (Key (Picked unit)) in Charge_Hash)
Unité - Add a 1.00 second Générique expiration timer to (Last created unit)
Unité - Order (Picked unit) to Attaquer (Load 0 of (Key (Picked unit)) in Charge_Hash)
Table de hachage - Clear all child hashtables of child (Key (Picked unit)) in Charge_Hash
Custom script:   call RemoveLocation( udg_Charge_Point )
Custom script:   call RemoveLocation( udg_Charge_Point2 )
Collapse Groupe unité - Pick every unit in Charge_Following and do (Actions)
Collapse Boucle - Actions
Unité - Set the custom value of (Picked unit) to ((Custom value of (Picked unit)) + 1)
Animation - Change (Picked unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with ((Real((Custom value of (Picked unit)))) x 16.66)% transparency

Gui:
Trigger:
Charge follow remove
Collapse Evénements
Unité - A unit Meurt
Collapse Conditions
(Unit-type of (Triggering unit)) Egal à  Charge Following
Collapse Actions
Groupe unité - Remove (Triggering unit) from Charge_Following
Unité - Remove (Triggering unit) from the game
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Charge_Following is empty) Egal à  TRUE
Collapse Alors - Actions
Déclencheur - Turn off (This trigger)
Déclencheur - Turn off Charge loop <gen>
Collapse Sinon - Actions



Télécharger la map




Attaque Mirroir par Vladadamm [GUI/MUI]

Secret:

Quelque chose de plus original que sa précedente création, et ce toujours en GUI et en MUI.

Description du sort : L'Illusionniste crée une illusion de lui-même qui reproduit son attaque. Cette illusion infliger 100% des dégâts du héros. Fonctionne tout les 8/6/4 attaques.

Infos supp :

Le héros-mirroir possède les mêmes caractéristiques et orbs effects que le héros normal.
Le héros-mirroir est crée à l'opposé du héros par rapport à la cible de l'attaque.

Déclencheurs :
Secret:


Gui:
Trigger:
Mirror Attack init
Collapse Evénements
Map initialization
Conditions
Collapse Actions
Table de hachage - Create a hashtable
Set MA_Hash = (Last created hashtable)

Gui:
Trigger:
Mirror Attack learn
Collapse Evénements
Unité - A unit Apprend une compétence
Collapse Conditions
(Learned Hero Skill) Egal à  Attaque Mirroir
Collapse Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Learned skill level) Egal à  1
Collapse Alors - Actions
Table de hachage - Save 0 as 0 of (Key (Triggering unit)) in MA_Hash
Groupe unité - Add (Triggering unit) to MA_UGroup
Collapse Sinon - Actions

Gui:
Trigger:
Mirror Attack loop
Collapse Evénements
Unité - A unit Est attaqué
Collapse Conditions
((Attacking unit) is in MA_UGroup) Egal à  TRUE
Collapse Actions
Table de hachage - Save ((Load 0 of (Key (Attacking unit)) from MA_Hash) + 1) as 0 of (Key (Attacking unit)) in MA_Hash
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Load 0 of (Key (Attacking unit)) from MA_Hash) Supérieur ou égal à  (10 - (2 x (Level of Attaque Mirroir  for (Attacking unit))))
Collapse Alors - Actions
Table de hachage - Save 0 as 0 of (Key (Attacking unit)) in MA_Hash
Set MA_Point = (Position of (Attacking unit))
Set MA_Point2 = (Position of (Triggering unit))
Set MA_Point3 = (MA_Point2 offset by (Distance between MA_Point and MA_Point2) towards (Angle from MA_Point to MA_Point2) degrees)
Unité - Create 1 Estinnoisulli ( MA Dummy ) for (Owner of (Attacking unit)) at MA_Point3 facing MA_Point2
Set MA_Dummy = (Last created unit)
Table de hachage - Save (Key (Attacking unit)) as 0 of (Key (Last created unit)) in MA_Hash
Unité - Move MA_Dummy instantly to MA_Point3, facing MA_Point2
Animation - Change MA_Dummy flying height to 0.00 at 1000.00
Animation - Change MA_Dummy's vertex coloring to (100.00%, 100.00%, 100.00%) with 30.00% transparency
Héros - Set MA_Dummy Hero-level to (Hero level of (Attacking unit)), Masquer level-up graphics
Unité - Set the custom value of MA_Dummy to 0
Collapse For each (Integer A) from 1 to 6, do (Actions)
Collapse Boucle - Actions
Héros - Create (Item-type of (Item carried by (Attacking unit) in slot (Integer A))) and give it to MA_Dummy
Unité - Order MA_Dummy to Attaque une fois (Triggering unit)
Unité - Add a 3.00 second Générique expiration timer to MA_Dummy
Collapse Sinon - Actions
Gui:
Trigger:
Mirror Attack dummy remove
Collapse Evénements
Unité - A unit Est attaqué
Collapse Conditions
(Unit-type of (Attacking unit)) Egal à  Estinnoisulli ( MA Dummy )
Collapse Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(Custom value of (Attacking unit)) Egal à  0
Collapse Alors - Actions
Unité - Set the custom value of (Attacking unit) to 1
Collapse Sinon - Actions
Héros - Add (Hero experience of (Attacking unit)) experience to (Load 0 of (Key (Attacking unit)) in MA_Hash), Montrer level-up graphics
Table de hachage - Clear all child hashtables of child (Key (Attacking unit)) in MA_Hash
Unité - Remove (Attacking unit) from the game
Gui:
Trigger:
Mirror Attack dummy remove 2
Collapse Evénements
Unité - A unit Meurt
Collapse Conditions
(Unit-type of (Triggering unit)) Egal à  Estinnoisulli ( MA Dummy )
Collapse Actions
Héros - Add (Hero experience of (Triggering unit)) experience to (Load 0 of (Key (Triggering unit)) in MA_Hash), Montrer level-up graphics
Table de hachage - Clear all child hashtables of child (Key (Triggering unit)) in MA_Hash
Unité - Remove (Triggering unit) from the game



Télécharger la map



Ice Temple par Tirlititi [vJASS/MUI]

Secret:

Description du sort : Invoque un Temple de Glace qui gèle les unités ennemies devant le héros et leur inflige des dommages. À la fin du sort, le héros relâche une nova de glace qui détruit le temple tout en infligeant d'autres dégâts. Les unités affectées restent ralenties pendant quelques secondes. La zone d'effet augmente avec les niveaux. |n|n|cffffcc00niveau 1|r - 20 dommages par secondes pendant 1.5 seconde maximum et 80 dommages finaux. |n|cffffcc00niveau 2|r - 25 dommages par secondes pendant 2.5 secondes maximum et 120 dommages finaux.|n|cffffcc00niveau 3|r - 30 dommages par secondes pendant 3 secondes maximum et 180 dommages finaux.

Infos supp : Le lanceur est invulnérable et incontrôlable pendant toute la durée du sort.
Le sort prend en compte le dénivelé du terrain et possède une hauteur maximale au-dessus de laquelle les unités ne sont pas affectées (certaines unités volantes, par exemple).
À la fin du sort, le lanceur se retrouve au milieu du temple et des ennemis touchés.

Script :
Secret:

Jass:
scope IceTemple initializer Init

// This spell assume that the spell "Raven form" ('Amrf') and the destructable "Large pathing blocker both" ('YTfc')
// are not modified too much.
// It may be asynchronous as far as GetLocationZ is. However, a slight difference will unlikely trigger a real problem.

globals

    private constant integer SPELL_ID        = 'A000' // The castable spell
    private constant integer NOVA_ID         = 'A001' // A Frost Nova for dummy, dealing the ending damages ; it should have as many levels as the main spell
    private constant integer DUMMY_TEMPLE_ID = 'n000' // The Id of the Temple dummy
    private constant integer DUMMY_ID        = 'n001' // A dummy Id for casting Frost Novas
    private constant integer DUMMY_DROP_ID   = 'n002' // The Id of the Drop dummy

    private constant real TIMEOUT            = 0.04
    private constant real MAXHEIGHT          = 175    // The height doesn't depend on the model's scale
    private constant real MODELSCALEFACTOR   = 1.18   // ModelScale = SpellRadius * MODELSCALEFACTOR / 450
    private constant real NOVARADIUSFACTOR   = 1.3    // NovaRadius = SpellRadius * NOVARADIUSFACTOR
    private location LOCZ                    = Location ( 0, 0 )
    private hashtable THEHASH

    sound SubmergeSound

    private real array FrozenDamages     // Over-time damages when frozen
    private real array ExtraDuration     // Time spent to freeze units
    private real array FreezeTimeout     // Delay between 2 freezing
    private real array SpellRadius       // Freeze radius ; the spell looks bad if this value is too far from 380

endglobals

function GetPointZ takes real x, real y returns real
    call MoveLocation(LOCZ,x,y)
    return GetLocationZ(LOCZ)
endfunction

function RemoveUnitAfterWaitCallback takes nothing returns nothing
    local timer t=GetExpiredTimer()
    call RemoveUnit(LoadUnitHandle(THEHASH,GetHandleId(t),0))
    call FlushChildHashtable(THEHASH,GetHandleId(t))
    call DestroyTimer(t)
    set t=null
endfunction

function RemoveUnitAfterWait takes unit whichUnit, real wait returns nothing
    local timer t=CreateTimer()
    call SaveUnitHandle(THEHASH,GetHandleId(t),0,whichUnit)
    call TimerStart(t,wait,false,function RemoveUnitAfterWaitCallback)
    set t=null
endfunction

private function PauseUnitSafeCallback takes nothing returns nothing
    local timer t=GetExpiredTimer()
    local unit u=LoadUnitHandle(THEHASH,GetHandleId(t),0)
    call PauseUnit(u,true)
    call SetUnitX(u,LoadReal(THEHASH,GetHandleId(t),1))
    call SetUnitY(u,LoadReal(THEHASH,GetHandleId(t),2))
    call SetUnitAnimation(u,"stand victory")
    call QueueUnitAnimation(u,"stand victory")
    call FlushChildHashtable(THEHASH,GetHandleId(t))
    call DestroyTimer(t)
    set t=null
    set u=null
endfunction

private function PauseUnitSafe takes unit whichUnit returns nothing
    local timer t=CreateTimer()
    call SaveUnitHandle(THEHASH,GetHandleId(t),0,whichUnit)
    call SaveReal(THEHASH,GetHandleId(t),1,GetUnitX(whichUnit))
    call SaveReal(THEHASH,GetHandleId(t),2,GetUnitY(whichUnit))
    call TimerStart(t,0,false,function PauseUnitSafeCallback)
    set t=null
endfunction

private function TrapFilter takes nothing returns boolean
    local unit u=GetFilterUnit()
    local boolean b=IsUnitEnemy(bj_lastCreatedUnit,GetOwningPlayer(u)) /*
             */ and GetUnitState(u,UNIT_STATE_LIFE)>0.405 /*
             */ and GetPointZ(GetUnitX(u),GetUnitY(u))+GetUnitFlyHeight(u)<=bj_lastTransmissionDuration /*
             */ and not(IsUnitInGroup(u,bj_lastCreatedGroup)) /*
             */ and not(IsUnitType(u,UNIT_TYPE_STRUCTURE)) /*
             */ and not(IsUnitType(u,UNIT_TYPE_MAGIC_IMMUNE))
    set u=null
    return b
endfunction

private function FinalDamagesFilter takes nothing returns boolean
    local unit u=GetFilterUnit()
    local boolean b=IsUnitEnemy(bj_lastCreatedUnit,GetOwningPlayer(u)) /*
             */ and GetUnitState(u,UNIT_STATE_LIFE)>0.405 /*
             */ and GetPointZ(GetUnitX(u),GetUnitY(u))+GetUnitFlyHeight(u)<=bj_lastTransmissionDuration /*
             */ and not(IsUnitInGroup(u,bj_randomSubGroupGroup)) /*
             */ and not(IsUnitType(u,UNIT_TYPE_STRUCTURE)) /*
             */ and not(IsUnitType(u,UNIT_TYPE_MAGIC_IMMUNE))
    set u=null
    return b
endfunction

private function ClearMainDatas takes timer t returns nothing
    local integer Id=GetHandleId(t)
    call RemoveUnitAfterWait(LoadUnitHandle(THEHASH,Id,2),2)
    call DestroyGroup(LoadGroupHandle(THEHASH,Id,5))
    call DestroyGroup(LoadGroupHandle(THEHASH,Id,6))
    call RemoveDestructable(LoadDestructableHandle(THEHASH,Id,10))
    call RemoveDestructable(LoadDestructableHandle(THEHASH,Id,11))
    call RemoveDestructable(LoadDestructableHandle(THEHASH,Id,12))
    call RemoveDestructable(LoadDestructableHandle(THEHASH,Id,13))
    call FlushChildHashtable(THEHASH,Id)
    call DestroyTimer(t)
endfunction

private function FinalDamagesEnum takes nothing returns nothing
    local unit target=GetEnumUnit()
    local unit dummy=CreateUnit(GetOwningPlayer(LoadUnitHandle(THEHASH,GetHandleId(GetExpiredTimer()),0)),DUMMY_ID,GetUnitX(target),GetUnitY(target),0)
    local timer t
    if (IsUnitInGroup(target,bj_lastCreatedGroup)) then
        set t=LoadTimerHandle(THEHASH,GetHandleId(GetExpiredTimer()),GetHandleId(target))
        call PauseUnit(target,false)
        call SetUnitTimeScale(target,1)
        call GroupRemoveUnit(bj_lastCreatedGroup,target)
        call RemoveUnit(LoadUnitHandle(THEHASH,GetHandleId(t),2))
        call DestroyEffect(LoadEffectHandle(THEHASH,GetHandleId(t),4))
        call FlushChildHashtable(THEHASH,GetHandleId(t))
        call DestroyTimer(t)
        set t=null
    endif
    call UnitAddAbility(dummy,NOVA_ID)
    call IssueTargetOrder(dummy,"frostnova",target)
    call RemoveUnitAfterWait(dummy,1)
    call GroupAddUnit(bj_randomSubGroupGroup,target)
    set target=null
    set dummy=null
endfunction

private function FinalDamages takes nothing returns nothing
    local integer Id=GetHandleId(GetExpiredTimer())
    local real timeleft=LoadReal(THEHASH,Id,4)-TIMEOUT
    local group g=CreateGroup()
    call SaveReal(THEHASH,Id,4,timeleft)
    set bj_randomSubGroupGroup=LoadGroupHandle(THEHASH,Id,6)
    set bj_lastCreatedGroup=LoadGroupHandle(THEHASH,Id,5)
    set bj_lastTransmissionDuration=LoadReal(THEHASH,Id,3)+MAXHEIGHT
    set bj_lastCreatedUnit=LoadUnitHandle(THEHASH,Id,0)
    call GroupEnumUnitsInRange(g,GetUnitX(LoadUnitHandle(THEHASH,Id,2)),GetUnitY(LoadUnitHandle(THEHASH,Id,2)),(1-timeleft/1.4)*SpellRadius[LoadInteger(THEHASH,Id,1)]*NOVARADIUSFACTOR,Filter(function FinalDamagesFilter))
    call ForGroup(g,function FinalDamagesEnum)
    call DestroyGroup(g)
    set g=null
    if (timeleft<=0) then
        call ForGroup(bj_lastCreatedGroup,function FinalDamagesEnum)
        call ClearMainDatas(GetExpiredTimer())
    endif
endfunction

private function FinalMove takes nothing returns nothing
    local integer Id=GetHandleId(GetExpiredTimer())
    local unit caster=LoadUnitHandle(THEHASH,Id,0)
    local real x=GetUnitX(caster)
    local real y=GetUnitY(caster)
    local real facing=GetUnitFacing(caster)
    local real speedfactor=SpellRadius[LoadInteger(THEHASH,Id,1)]*MODELSCALEFACTOR/450
    local real timeleft=LoadReal(THEHASH,Id,4)-TIMEOUT
    call SaveReal(THEHASH,Id,4,timeleft)
    if (timeleft>=0.78) then
        if (timeleft>=2) then
            call SaveReal(THEHASH,Id,4,1.04)
            call TimerStart(GetExpiredTimer(),TIMEOUT,true,function FinalMove)
            return
        endif
        call SetUnitX(caster,x+770*speedfactor*TIMEOUT*CosBJ(facing))
        call SetUnitY(caster,y+770*speedfactor*TIMEOUT*SinBJ(facing))
        call SetUnitFlyHeight(caster,280+LoadReal(THEHASH,Id,3)-GetPointZ(x,y)+(1.04-timeleft)*231*speedfactor,0)
    elseif (timeleft>=0.52) then
        call SetUnitTimeScale(caster,1)
        call SetUnitX(caster,x+461*speedfactor*TIMEOUT*CosBJ(facing))
        call SetUnitY(caster,y+461*speedfactor*TIMEOUT*SinBJ(facing))
        call SetUnitFlyHeight(caster,280+LoadReal(THEHASH,Id,3)-GetPointZ(x,y)+(240-timeleft*231)*speedfactor,0)
    elseif (timeleft>=0.26) then
        call SetUnitX(caster,x+309*speedfactor*TIMEOUT*CosBJ(facing))
        call SetUnitY(caster,y+309*speedfactor*TIMEOUT*SinBJ(facing))
        call SetUnitFlyHeight(caster,280+LoadReal(THEHASH,Id,3)-GetPointZ(x,y)+(timeleft*77+80)*speedfactor,0)
    elseif (timeleft>=0) then
        call SetUnitX(caster,x+193*speedfactor*TIMEOUT*CosBJ(facing))
        call SetUnitY(caster,y+193*speedfactor*TIMEOUT*SinBJ(facing))
        call SetUnitFlyHeight(caster,280+LoadReal(THEHASH,Id,3)-GetPointZ(x,y)+(timeleft*461-20)*speedfactor,0)
    elseif (timeleft>-0.4) then
        call SetUnitFlyHeight(caster,280+LoadReal(THEHASH,Id,3)-GetPointZ(x,y)+timeleft*650,0)
    else
        call SetUnitFlyHeight(caster,0,0)
        call PauseUnit(caster,false)
        call SetUnitInvulnerable(caster,false)
        call SetUnitPosition(caster,x,y)
        call SaveReal(THEHASH,Id,4,1.4)
        call SaveGroupHandle(THEHASH,Id,6,CreateGroup())
        call TimerStart(GetExpiredTimer(),TIMEOUT,true,function FinalDamages)
    endif
    set caster=null
endfunction

private function StartFinal takes nothing returns nothing
    local integer Id=GetHandleId(GetExpiredTimer())
    local unit caster=LoadUnitHandle(THEHASH,Id,0)
    call SetUnitAnimation(caster,"attack")
    call QueueUnitAnimation(caster,"stand")
    call SetUnitTimeScale(caster,0.5)
    call SetUnitAnimation(LoadUnitHandle(THEHASH,Id,2),"death")
    call FlushChildHashtable(THEHASH,GetHandleId(LoadTimerHandle(THEHASH,Id,6)))
    call DestroyTimer(LoadTimerHandle(THEHASH,Id,6))
    call SaveReal(THEHASH,Id,4,3)
    call TimerStart(GetExpiredTimer(),1.26,false,function FinalMove)
endfunction

private function TrapUnitLoop takes nothing returns nothing
    local integer Id=GetHandleId(GetExpiredTimer())
    local integer Idm=LoadInteger(THEHASH,Id,0)
    local unit target=LoadUnitHandle(THEHASH,Id,1)
    local real x
    local real y
    if (LoadBoolean(THEHASH,Id,3)) then
        set x=GetUnitX(LoadUnitHandle(THEHASH,Id,2))-GetUnitX(target)
        set y=GetUnitY(LoadUnitHandle(THEHASH,Id,2))-GetUnitY(target)
        if (x*x+y*y<=90000) then
            call SaveBoolean(THEHASH,Id,3,false)
            call PauseUnit(target,true)
            call SetUnitTimeScale(target,0)
            call TimerStart(GetExpiredTimer(),TIMEOUT,true,function TrapUnitLoop)
        else
            call DestroyEffect(LoadEffectHandle(THEHASH,Id,4))
            call RemoveUnit(LoadUnitHandle(THEHASH,Id,2))
            call GroupRemoveUnit(LoadGroupHandle(THEHASH,Idm,5),target)
            call FlushChildHashtable(THEHASH,Id)
            call DestroyTimer(GetExpiredTimer())
        endif
    elseif (GetUnitState(target,UNIT_STATE_LIFE)>FrozenDamages[LoadInteger(THEHASH,Idm,1)]*2) then
        call UnitDamageTarget(LoadUnitHandle(THEHASH,Idm,0),target,FrozenDamages[LoadInteger(THEHASH,Idm,1)],true,false,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_UNIVERSAL,WEAPON_TYPE_WHOKNOWS)
    endif
    set target=null
endfunction

private function TrapUnit2 takes nothing returns nothing
    call SaveEffectHandle(THEHASH,GetHandleId(GetExpiredTimer()),4,AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathTargetArt.mdx",LoadUnitHandle(THEHASH,GetHandleId(GetExpiredTimer()),1),"origin"))
    call TimerStart(GetExpiredTimer(),0.3,false,function TrapUnitLoop)
endfunction

private function TrapUnit takes nothing returns nothing
    local integer Id=LoadInteger(THEHASH,GetHandleId(GetExpiredTimer()),0)
    local group g=CreateGroup()
    local unit target
    local real x
    local real y
    local unit drop
    local timer t
    set bj_lastCreatedGroup=LoadGroupHandle(THEHASH,Id,5)
    set bj_lastTransmissionDuration=LoadReal(THEHASH,Id,3)+MAXHEIGHT
    set bj_lastCreatedUnit=LoadUnitHandle(THEHASH,Id,0)
    call GroupEnumUnitsInRange(g,GetUnitX(LoadUnitHandle(THEHASH,Id,2)),GetUnitY(LoadUnitHandle(THEHASH,Id,2)),SpellRadius[LoadInteger(THEHASH,Id,1)],Filter(function TrapFilter))
    set target=FirstOfGroup(g)
    if (target!=null) then
        set x=GetUnitX(target)
        set y=GetUnitY(target)
        call GroupAddUnit(bj_lastCreatedGroup,target)
        call SetSoundPosition(SubmergeSound,x,y,200)
        call StartSound(SubmergeSound)
        set drop=CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),DUMMY_DROP_ID,x,y,0)
        call UnitAddAbility(drop,'Amrf')
        call UnitRemoveAbility(drop,'Amrf')
        call SetUnitX(drop,x)
        call SetUnitY(drop,y)
        call SetUnitFlyHeight(drop,bj_lastTransmissionDuration-MAXHEIGHT-GetPointZ(x,y),0)
        call SetUnitAnimation(drop,"death")
        set t=CreateTimer()
        call SaveInteger(THEHASH,GetHandleId(t),0,Id)
        call SaveUnitHandle(THEHASH,GetHandleId(t),1,target)
        call SaveUnitHandle(THEHASH,GetHandleId(t),2,drop)
        call SaveBoolean(THEHASH,GetHandleId(t),3,true)
        call SaveTimerHandle(THEHASH,Id,GetHandleId(target),t)
        call TimerStart(t,0.4,false,function TrapUnit2)
        set t=null
        set drop=null
        set target=null
    endif
    call DestroyGroup(g)
    set g=null
endfunction

private function StartFreezing takes nothing returns nothing
    local timer t=CreateTimer()
    local integer Id=GetHandleId(GetExpiredTimer())
    local integer level=LoadInteger(THEHASH,Id,1)
    call SaveGroupHandle(THEHASH,Id,5,CreateGroup())
    call SaveTimerHandle(THEHASH,Id,6,t)
    call SaveInteger(THEHASH,GetHandleId(t),0,Id)
    call TimerStart(t,FreezeTimeout[level],true,function TrapUnit)
    call TimerStart(GetExpiredTimer(),ExtraDuration[level],false,function StartFinal)
    set t=null
endfunction

private function MoveHeroTop takes nothing returns nothing
    local integer Id=GetHandleId(GetExpiredTimer())
    local unit caster=LoadUnitHandle(THEHASH,Id,0)
    local real factor=SpellRadius[LoadInteger(THEHASH,Id,1)]*MODELSCALEFACTOR/450
    local real timeleft=LoadReal(THEHASH,Id,4)-TIMEOUT
    call SetUnitFlyHeight(caster,RMaxBJ(0,280+LoadReal(THEHASH,Id,3)-GetPointZ(GetUnitX(caster),GetUnitY(caster))-timeleft*200*factor),0)
    if (timeleft>0) then
        call SaveReal(THEHASH,Id,4,timeleft)
    else
        call SetUnitAnimation(caster,"spell")
        call QueueUnitAnimation(caster,"spell")
        call QueueUnitAnimation(caster,"spell")
        call TimerStart(GetExpiredTimer(),1.8,false,function StartFreezing)
    endif
    set caster=null
endfunction

private function CreateTemple takes unit caster, integer level returns nothing
    local timer t=CreateTimer()
    local integer Id=GetHandleId(t)
    local real angle=GetUnitFacing(caster)
    local real ux=GetUnitX(caster)
    local real uy=GetUnitY(caster)
    local real radius=SpellRadius[level]*MODELSCALEFACTOR
    local real x=ux+radius*CosBJ(angle)
    local real y=uy+radius*SinBJ(angle)
    local unit temple=CreateUnit(GetOwningPlayer(caster),DUMMY_TEMPLE_ID,x,y,angle+180)
    call UnitAddAbility(temple,'Amrf')
    call UnitRemoveAbility(temple,'Amrf')
    call SetUnitX(temple,x)
    call SetUnitY(temple,y)
    call SetUnitFlyHeight(temple,260,0)
    call SetUnitScale(temple,radius/450,1,1)
    call SetUnitAnimation(temple,"birth")
    call SetUnitInvulnerable(caster,true)
    call PauseUnitSafe(caster)
    call UnitAddAbility(caster,'Amrf')
    call UnitRemoveAbility(caster,'Amrf')
    call SaveUnitHandle(THEHASH,Id,0,caster)
    call SaveInteger(THEHASH,Id,1,level)
    call SaveUnitHandle(THEHASH,Id,2,temple)
    call SaveReal(THEHASH,Id,3,GetPointZ(x,y))
    call SaveReal(THEHASH,Id,4,2)
    call SaveDestructableHandle(THEHASH,Id,10,CreateDestructable('YTfc',ux,uy,0,1,0))
    call SaveDestructableHandle(THEHASH,Id,11,CreateDestructable('YTfc',x+radius*CosBJ(angle),y+radius*SinBJ(angle),0,1,0))
    call SaveDestructableHandle(THEHASH,Id,12,CreateDestructable('YTfc',x+radius*CosBJ(angle+90),y+radius*SinBJ(angle+90),0,1,0))
    call SaveDestructableHandle(THEHASH,Id,13,CreateDestructable('YTfc',x+radius*CosBJ(angle-90),y+radius*SinBJ(angle-90),0,1,0))
    call TimerStart(t,TIMEOUT,true,function MoveHeroTop)
    set temple=null
    set t=null
endfunction

private function CastingFilter takes nothing returns boolean
    if GetSpellAbilityId()==SPELL_ID then
        call CreateTemple(GetTriggerUnit(),GetUnitAbilityLevel(GetTriggerUnit(),SPELL_ID))
    endif
    return false
endfunction

private function Init takes nothing returns nothing
    local trigger spellTrigger = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( spellTrigger, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( spellTrigger, Condition (function CastingFilter) )
    set SubmergeSound = CreateSound( "Abilities\\Spells\\Other\\Submerge\\Submerge1.wav", false, true, true, 10, 10, "" )
    call SetSoundParamsFromLabel( SubmergeSound, "SubmergeSound" )

    // You can use a custom hashtable here instead of creating a new one. The spell doesn't use unit's Ids.
    set THEHASH = InitHashtable()

    // Set the datas. Final damages and slow are supposed to be in the "NOVA_ID" spell.
    set FrozenDamages[1] = TIMEOUT * 20
    set ExtraDuration[1] = 1.5
    set FreezeTimeout[1] = 0.25
    set SpellRadius[1] = 300

    set FrozenDamages[2] = TIMEOUT * 25
    set ExtraDuration[2] = 2.5
    set FreezeTimeout[2] = 0.25
    set SpellRadius[2] = 380

    set FrozenDamages[3] = TIMEOUT * 30
    set ExtraDuration[3] = 3
    set FreezeTimeout[3] = 0.25
    set SpellRadius[3] = 460
endfunction

endscope



Map de test - Temple de Glace




Résultats du Concours :

1. Temple de Glace par Tirlititi avec 20,75/20 [1note]

2. Attaque Mirroir par Vladadamm avec 19/20 [1note]

3. Boule d'énergie par Zaaap avec 14,375/20 [2notes]

4. Nécropacte par Lord_Demon_X avec 13/20 [1note]

5. Serpent de Feu par fulldragon avec 8,5/20 [1note]

Non noté. Charge par Vladadamm.
_________________


Dernière édition par Vladadamm le 01/12/11 18:54; édité 14 fois
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: 30/10/11 20:18    Sujet du message: Citer

Je participerais peut être si un idée de sort me viens.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 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: 30/10/11 20:59    Sujet du message: Citer

Pour ma part, je suis déjà parti sur une chaîne de poison. Me manque plus qu'à faire quelques améliorations sur l'utilisation des hashtables, et ça sera fini avec ma première création ^^

Je pense que j'en ferai plusieurs.
_________________
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: 01/11/11 21:43    Sujet du message: Citer

Bon, j'ai fini mon premier sort : Charge.

Un simple sort de charge en GUI et MUI.

J'ai renoncé à ma chaîne de poison car j'ai dû la recommencer 2/3fois suite à des crashs PC et/ou WE. (et donc flemme de tout refaire)

Aussi, je tiens à dire pour les membres récents qui hésitent à participer que ce concours n'est pas vraiment un concours qui favorise le niveau dans l'éditeur, mais plutôt les idées et la persévérance pour mettre en œuvre cette idée.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Brainlessbob
Membre honoraire


Inscrit le: 11 Mar 2011
Messages: 245
Sujets: 9
Spécialité en worldedit: rien... j'apprends


MessagePosté le: 02/11/11 17:27    Sujet du message: Citer

Je ne vais pas participer a ce concours sauf cas exceptionnelle ... Car j'attends le concours héros ( pour moi identique mais avec des ajouts donc mieux ).
_________________
Gniark gniark
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: 02/11/11 21:20    Sujet du message: Citer

Brainlessbob a écrit:
Je ne vais pas participer a ce concours sauf cas exceptionnelle ... Car j'attends le concours héros ( pour moi identique mais avec des ajouts donc mieux ).
Je pense pas qu'il y en aura. Ce concours sera sûrement le dernier. War3 meurt et le forum en même-temps.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Wareditor
The Master of Nothing


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


MessagePosté le: 02/11/11 22:33    Sujet du message: Citer

Non, Warcraft sera toujours la...
On est toujours 50 milles sur Northrend ( ou sur tout le B.Net ? )

Je sais que sa peut paraitre un peu con de dire ca après tant de temps mais moi j'aime ce jeu et je ne vais pas l'oublier si vite même si defois je prend des pauses.

Et c'est pas en parlant comme ca que les choses s'amélioront :/
La preuve : les anciens disaient que le fofo serait mort en 2010 Very Happy

Warcraft a encore des choses a nous offrir, ne le laissons pas tomber
_________________
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: 03/11/11 13:03    Sujet du message: Citer

Wareditor a écrit:
Non, Warcraft sera toujours la...
On est toujours 50 milles sur Northrend ( ou sur tout le B.Net ? )

Je sais que sa peut paraitre un peu con de dire ca après tant de temps mais moi j'aime ce jeu et je ne vais pas l'oublier si vite même si defois je prend des pauses.

Et c'est pas en parlant comme ca que les choses s'amélioront :/
La preuve : les anciens disaient que le fofo serait mort en 2010 Very Happy

Warcraft a encore des choses a nous offrir, ne le laissons pas tomber

Et 250 000sur les plateformes passant par réseau local ^^

Mais déjà, regarde comment se sont passés le dernier concours, 2participants dont un n'a pas fini sa carte.

Je suis d'accord que war3 va rester, mais le forum est quand même bien moins actif qu'avant. Ce pour quoi je favoriserai les concours qui ne nécessiteront pas beaucoup de travail (contrairement au concours de mini-map).

War3 a déjà tenu 8ans et peut bien tenir 2ans de plus ^^

Sinon, revenons sur le sujet du concours.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 03/11/11 16:15    Sujet du message: Citer

ba aujourd'hui ceux qui font que l'on joue encore à war3, se sont nous, les mappers !
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 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: 05/11/11 15:26    Sujet du message: Citer

5jours que le concours a commencé et toujours aucun autre sort que ma charge.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 05/11/11 15:29    Sujet du message: Citer

je crois que tu vas gagner vlad (mais je suis pas sur)
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 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: 05/11/11 16:13    Sujet du message: Citer

Je ferais un sort ou deux Smile .
_________________
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é
 kungfu-sheep
Anomalie floodiforme


Inscrit le: 14 Avr 2011
Messages: 1846
Sujets: 119
Spécialité en worldedit: fonctions paramétriques, équation de mouvement.


MessagePosté le: 05/11/11 17:16    Sujet du message: Citer

je crois que tu vas perdre vlad x)
_________________
22:27:43<Seiraw> Bah y a deux genre de personnes
22:27:57<Seiraw> les soumis et les soumises
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé Envoyer l'e-mail
 Ashtabatakete
Ptit Nouveau


Inscrit le: 04 Nov 2011
Messages: 25
Sujets: 2



MessagePosté le: 05/11/11 17:16    Sujet du message: Concours Citer

Bah moi je vais m'inscrire au concours mais j'aimerais savoir si on peut mettre les sorts sur des unités simples (pas des heros) ? Pck la je viens d'avoir quelques idées mais des idées pour des unités non-héros...

Ah oui et Vlad tu penses ca vaut le coup que je mettes le sort que je t'ai dja montré ?
_________________
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: 05/11/11 19:22    Sujet du message: Re: Concours Citer

Ashtabatakete a écrit:
Bah moi je vais m'inscrire au concours mais j'aimerais savoir si on peut mettre les sorts sur des unités simples (pas des heros) ? Pck la je viens d'avoir quelques idées mais des idées pour des unités non-héros...

Ah oui et Vlad tu penses ca vaut le coup que je mettes le sort que je t'ai dja montré ?

Hmm, oui.

Âprès, que ce soit sur un héros ou une unité normale, c'est pareil. Aussi, ton sort était bien et ça peut valoir la peine de le poster ici.

Pas sûr que je perde, vu que c'est non le codage qui compte, mais l'idée et tout ce qui est visuel.
Au mieux, Tir prendra les 2points de rigueur du codage que j'aurais pas forcément comme on fait du MUI tout les deux.

Et c'est bien que ashta participe, ça fait un adversaire d'un niveau correct supp ^^

Edit : Sinon, j'ai amélioré mon sort de charge au niveau graphique.
_________________
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 1, 2, 3  Suivante
Page 1 sur 3

 
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