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=c78195f9dc7a62444b949487a969783bMé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 Précédente  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
 Ashtabatakete
Ptit Nouveau


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



MessagePosté le: 05/11/11 22:12    Sujet du message: Citer

Et pour toi le visuel c'est beaucoup d'effets speciaux ou juste que ca soit beau a voir ? Pck perso des fois je trouve que certains créateur de sorts mettent un peu trop d'effet et que le sort devient surchargé...
_________________
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 22:40    Sujet du message: Citer

Beau à voir. Car spam des effets spéciaux peut créer du lag et être gênant. Du moins, beaucoup d'effets spéciaux peuvent rendre ça beau à voir, si ils sont bien choisis.

Donc, pour moi il faut en mettre, sans en abuser. (ou alors mettre des effets supplémentaires en optionnel)

Sinon, j'ai fait une nouvelle version de ma charge avec des effets et un déplacement plus fluide. Et en plus fait en sorte que la map de test supporte des test multijoueurs.
_________________
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: 06/11/11 01:36    Sujet du message: Citer

euh ce qui peut faire lagger est une trop grosse quantité d'exécution dans une courte période (exemple type : boucle à plus d'un certain nombre d'exécution, ba ça lag et peu même crasher si abus)
les effets ne sont qu'un bonus de l'importance du lag, car en plus de la mémoire vive, la carte graphique aussi ne suit plus (reprenez moi si j'me trompe, chuis pas sur)

enfin bon, rassure toi ash, perso j'ai fait de grosses boucles avec beaucoup d'effet et aucun unleak, j'ai aucun problème de lag.
Comme votre sort va probablement être utilisé qu'une fois, juste pour voir comment c'est beau (ouwaaa) il est impossible que le leak occasionné soit suffisamment important pour être génant. En gros, ne vous faites pas <grossièreté> à unleak :p
(si c'est génant, c'est soit que s't'un cas à part d'un sort qui dure longtemps, ou soit qu'en même temps on a un gros lag car trop d'exécution en très peu de temps, donc encore une fois à changer tout ça ^^)

bref, j'vais bientôt poster mon déclos.



édit : j'viens de lire le barème, assez sympa mais j'trouve quand même un point de celui-ci useless :
en ce qui concerne le leak, imaginons un sort normal utilisé dans une partie qui dure 3h :
on va dire qu'il est utilisé en moyenne 4 fois par minutes, c'est à dire 180 en 3h.
on va dire 8 joueurs, et pas de leaver, toujours la même régularité dans l'utilisation du sort.
on va dire aller, 50 qui leakent dans ce sort (quand je dis point, ça représente toute forme de leak en faite, nos fatiguons pas), ça fait beaucoup pour 1 sort ! mais s't'un gros sort, un peu comme le miens.

on a 180*50*8 points qui leakent, c'est à dire 7200 points qui leakent.
je crois qu'on m'avait dit 8 octets pour un point ? ça je sais plus trop, mais imaginons ça :
8 * 7200 = 57600 octets = 57,6 ko (recompter on sait jamais j'ai fait tout les calculs de tête x))
notre mémoire vive aujourd'hui fait en moyenne 2Go c'est à dire 2 000 000 ko. le rapport entre les deux est de 10^4 !!!
euhhhh.... hm hm... j'ai envie de dire que c'est... négligeable...

arrêtez de vouloir tout unleaker comme ça, parfois c'est véritablement useless et perte de temps...
_________________
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: 06/11/11 12:11    Sujet du message: Citer

Heu, full.

On exagère peut-être parfois sur le leak, mais si on en parle autant, c'est que ça a un minimum d'importance quand même.

Les 2 Go de ta mémoire vive sont loin d'être monopolisées par Warcraft, de une.
La quantité de leak générée dans une boucle va très facilement au-dessus des 50, de deux (le reste de tes chiffre est un peu exagéré mais c'est sans doute intentionnel).
Et puis tous les objets ne génèrent pas le même leak. Je ne me souviens plus des chiffres, mais je les avais vu pour comparer les leaks des points, des effets spéciaux et des groupes d'unité : les effets spéciaux sont bien plus gourmands que ce qu'on pourrait attendre (les points font sans doute 8o, comme tu l'as dit, et les groupes d'unités sont plus gros lorsqu'ils contiennent plus d'unités)...

Après, il y a les "leaks d'handle", qui se produisent lorsque l'objet est détruit mais que les variables locales ne sont pas nullifiées. Là c'est le même leak pour tous les types (avec peut-être une exception pour les triggers parce qu'il y a aussi les actions/conditions/events).

Bref, sans doute que le leak ne sera pas important dans les maps de test, mais si quelqu'un veut pouvoir copier les sorts dans une vraie map, il faut les éviter un minimum.

Pour revenir au sujet, j'ai toujours aimé les sorts sobres et avec peu d'effets spéciaux délirants, mais il faut reconnaitre que ça ouvre à plus d'originalité.
C'est le forum qui juge et on est tous capable d'apprécier un sort sans que ça explose de tous les côtés.
_________________
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é
 DarK™
Membre actif


Inscrit le: 29 Aoû 2011
Messages: 197
Sujets: 15
Spécialité en worldedit: Système/Déclencheurs [GUI]


MessagePosté le: 06/11/11 14:46    Sujet du message: Citer

Sympas comme concours, je vais faire quelques compétences Smile
_________________
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: 08/11/11 17:38    Sujet du message: Citer

J'ai fini (entre parenthèses) mon second sort, il me suffit plus qu'à enlever quelques leaks d'handle oubliés ^^

Edit : Fait.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Ashtabatakete
Ptit Nouveau


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



MessagePosté le: 11/11/11 10:20    Sujet du message: Citer

Je sais pas en fait si je pourrais faire quelques sorts pck je suis occupé en ce moment et quand j'ai rien a faire je me co un peu sur Bnet.
_________________
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: 12/11/11 12:07    Sujet du message: Citer

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



Il est pas parfaitement optimisé mais j'avais pas envie de mettre des dépendances... Les modèles importés sont de moi, bien sûr.

EDIT : mis-à-jour au format demandé par Vlad. J'ai aussi un peu modifié le sort de façon à ce qu'on puisse choisir le rayon d'effet, mais le modèle devient moins beau s'il est trop gros ou trop petit. Si vous l'avez déjà testé, c'est pas vraiment la peine de le retester pour ça.

EDIT 2 : Il m'est arrivé de le mettre à jour sur THW.
_________________
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 11/04/12 13:45; édité 4 fois
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: 12/11/11 14:17    Sujet du message: Citer

dire que j'pensais mon sort balaise 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
 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: 12/11/11 14:49    Sujet du message: Citer

Choqué à vie Surprised

Rien à redire sur l'originalité du sort.
Sur l'esthétique, il y a de légères améliorations possibles, mais sinon c'est épique.
Les tooltips sont bonnes. J'aime pas vraiment l'icône, mais elle correspond assez bien au sort.
Le sort respecte le thème.
Le sort est complexe et mui.
Je verrais bien ce sort comme ulti, et non comme sort normal.


ça mets la barre haute ^^ j'ai 8jours pour faire quelque chose de bien. Et j'ai qu'une chose à dire : Le feu vaincra la glace.
_________________
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: 12/11/11 21:05    Sujet du message: Citer

Nécropacte par Lord_Demon_X MUI

Secret:

Description du sort:Le héros crée un vortex d'ombres qui convergent vers la cible,lorsqu'elles le touche, elles explosent en un nova d'énergies noires qui inflige 250x niveau du sort sur 300 AoE, ralentit les unités de 10x niveau du sort % et réduit l'armure de la cible de 1+1x niveau du sort



le sort est fait de deux parties: le cast et le loop

Secret:

Cast:
Gui:
Trigger:
Collapse Evénements
Unité - Une unité Initie l'effet d'une compétence
Collapse Conditions
(Compétence étant utilisée) Egal à  Nécropacte
Collapse Actions
Définir Shadow_Integer = (Shadow_Integer + 1)
Définir Caster[Shadow_Integer] = (Unité utilisant la capacité)
Définir Target[Shadow_Integer] = (Unité ciblée par la compétence)
Unité - Créer 1 Dummy : Vortex pour le (Propriétaire de (Unité utilisant la capacité)) au point ((Position de Target[Shadow_Integer]) décalé de 500.00 et orienté de 0.00 degrés) ; orientation = Orientation bâtiment par défaut degrés.
Définir Shadow_1[Shadow_Integer] = (Dernière unité créée)
Unité - Créer 1 Dummy : Vortex pour le (Propriétaire de (Unité utilisant la capacité)) au point ((Position de Target[Shadow_Integer]) décalé de 500.00 et orienté de 72.00 degrés) ; orientation = Orientation bâtiment par défaut degrés.
Définir Shadow_2[Shadow_Integer] = (Dernière unité créée)
Unité - Créer 1 Dummy : Vortex pour le (Propriétaire de (Unité utilisant la capacité)) au point ((Position de Target[Shadow_Integer]) décalé de 500.00 et orienté de 144.00 degrés) ; orientation = Orientation bâtiment par défaut degrés.
Définir Shadow_3[Shadow_Integer] = (Dernière unité créée)
Unité - Créer 1 Dummy : Vortex pour le (Propriétaire de (Unité utilisant la capacité)) au point ((Position de Target[Shadow_Integer]) décalé de 500.00 et orienté de 216.00 degrés) ; orientation = Orientation bâtiment par défaut degrés.
Définir Shadow_4[Shadow_Integer] = (Dernière unité créée)
Unité - Créer 1 Dummy : Vortex pour le (Propriétaire de (Unité utilisant la capacité)) au point ((Position de Target[Shadow_Integer]) décalé de 500.00 et orienté de 288.00 degrés) ; orientation = Orientation bâtiment par défaut degrés.
Définir Shadow_5[Shadow_Integer] = (Dernière unité créée)
Définir Angle_1[Shadow_Integer] = 0.00
Définir Angle_2[Shadow_Integer] = 72.00
Définir Angle_3[Shadow_Integer] = 144.00
Définir Angle_4[Shadow_Integer] = 216.00
Définir Angle_5[Shadow_Integer] = 288.00
Définir Distance[Shadow_Integer] = 500.00



Loop:
Secret:


Gui:
Trigger:
Collapse Evénements
Temps - Toutes les 0.03 secondes de temps de jeu.
Conditions
Collapse Actions
Pour chaque Entier A à  partir de 1 jusqu'à  Shadow_Integer, exécuter les actions de l'onglet Boucle - Actions.
Collapse Boucle - Actions
Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Collapse Si - Conditions
Distance[(Entier A)] Supérieur à  0.00
Collapse Alors - Actions
Définir Distance[(Entier A)] = (Distance[(Entier A)] - 10.00)
Définir Point_1a[(Entier A)] = (Position de Shadow_1[(Entier A)])
Définir Angle_1[(Entier A)] = (Angle_1[(Entier A)] + 2.00)
Définir Point_1b[(Entier A)] = ((Position de Target[(Entier A)]) décalé de Distance[(Entier A)] et orienté de Angle_1[(Entier A)] degrés)
Unité - Déplacer instantanément Shadow_1[(Entier A)] au point Point_1b[(Entier A)].
Définir Point_2a[(Entier A)] = (Position de Shadow_2[(Entier A)])
Définir Angle_2[(Entier A)] = (Angle_2[(Entier A)] + 2.00)
Définir Point_2b[(Entier A)] = ((Position de Target[(Entier A)]) décalé de Distance[(Entier A)] et orienté de Angle_2[(Entier A)] degrés)
Unité - Déplacer instantanément Shadow_2[(Entier A)] au point Point_2b[(Entier A)].
Définir Point_3a[(Entier A)] = (Position de Shadow_3[(Entier A)])
Définir Angle_3[(Entier A)] = (Angle_3[(Entier A)] + 2.00)
Définir Point_3b[(Entier A)] = ((Position de Target[(Entier A)]) décalé de Distance[(Entier A)] et orienté de Angle_3[(Entier A)] degrés)
Unité - Déplacer instantanément Shadow_3[(Entier A)] au point Point_3b[(Entier A)].
Définir Point_4a[(Entier A)] = (Position de Shadow_4[(Entier A)])
Définir Angle_4[(Entier A)] = (Angle_4[(Entier A)] + 2.00)
Définir Point_4b[(Entier A)] = ((Position de Target[(Entier A)]) décalé de Distance[(Entier A)] et orienté de Angle_4[(Entier A)] degrés)
Unité - Déplacer instantanément Shadow_4[(Entier A)] au point Point_4b[(Entier A)].
Définir Point_5a[(Entier A)] = (Position de Shadow_5[(Entier A)])
Définir Angle_5[(Entier A)] = (Angle_5[(Entier A)] + 2.00)
Définir Point_5b[(Entier A)] = ((Position de Target[(Entier A)]) décalé de Distance[(Entier A)] et orienté de Angle_5[(Entier A)] degrés)
Unité - Déplacer instantanément Shadow_5[(Entier A)] au point Point_5b[(Entier A)].
Texte personnalisé: call RemoveLocation(udg_Point_1a[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_1b[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_2a[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_2b[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_3a[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_3b[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_4a[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_4b[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_5a[GetForLoopIndexA()])
Texte personnalisé: call RemoveLocation(udg_Point_5b[GetForLoopIndexA()])
Collapse Sinon - Actions
Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Collapse Si - Conditions
Boolean[(Entier A)] Egal à  FAUX
Collapse Alors - Actions
Texte personnalisé: call RemoveUnit(udg_Shadow_1[GetForLoopIndexA()])
Texte personnalisé: call RemoveUnit(udg_Shadow_2[GetForLoopIndexA()])
Texte personnalisé: call RemoveUnit(udg_Shadow_3[GetForLoopIndexA()])
Texte personnalisé: call RemoveUnit(udg_Shadow_4[GetForLoopIndexA()])
Texte personnalisé: call RemoveUnit(udg_Shadow_5[GetForLoopIndexA()])
Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Collapse Si - Conditions
(Target[(Entier A)] est vivante) Egal à  VRAI
Collapse Alors - Actions
Unité - Créer 1 Dummy : Caster 1 pour le (Propriétaire de Shadow_1[(Entier A)]) au point (Position de Target[(Entier A)]) ; orientation = Orientation bâtiment par défaut degrés.
Unité - Régler le niveau de Effect : Armor  pour (Dernière unité créée) à  (Niveau de Nécropacte  pour Caster[(Entier A)]).
Définir Caster_1[(Entier A)] = (Dernière unité créée)
Unité - Ordonner à  Caster_1[(Entier A)] de/d' Druide-corbeau elfe de la nuit - Lucioles Target[(Entier A)].
Unité - Ajouter un temps de désinvocation de 1.00 secondes et de type Générique pour Caster_1[(Entier A)].
Unité - Créer 1 Dummy : Caster 2 pour le (Propriétaire de Shadow_1[(Entier A)]) au point (Position de Target[(Entier A)]) ; orientation = Orientation bâtiment par défaut degrés.
Unité - Régler le niveau de Effect : Speed  pour (Dernière unité créée) à  1.
Définir Caster_2[(Entier A)] = (Dernière unité créée)
Unité - Ordonner à  Caster_2[(Entier A)] de/d' Roi de la montagne humain - Coup de tonnerre.
Unité - Ajouter un temps de désinvocation de 1.00 secondes et de type Générique pour Caster_2[(Entier A)].
Pour chaque Entier B à  partir de1 jusqu'à  16, exécuter les actions de l'onglet Boucle - Actions.
Collapse Boucle - Actions
Effet spécial - Créer un effet spécial au point ((Position de Caster_2[(Entier A)]) décalé de 90.00 et orienté de (22.50 x (Réel((Entier B)))) degrés) ; utiliser le fichier modèle suivant : AbilitiesSpellsUndeadDeathCoilDeathCoilSpecialArt.mdl.
Pour chaque entier de C[(Entier A)] de 1 jusqu'à  32, exécuter les actions de l'onglet Boucle - Actions.
Collapse Boucle - Actions
Effet spécial - Créer un effet spécial au point ((Position de Caster_2[(Entier A)]) décalé de 180.00 et orienté de (11.25 x (Réel(C[(Entier A)]))) degrés) ; utiliser le fichier modèle suivant : AbilitiesSpellsUndeadDeathCoilDeathCoilSpecialArt.mdl.
Pour chaque entier de D[(Entier A)] de 1 jusqu'à  64, exécuter les actions de l'onglet Boucle - Actions.
Collapse Boucle - Actions
Effet spécial - Créer un effet spécial au point ((Position de Caster_2[(Entier A)]) décalé de 270.00 et orienté de (5.63 x (Réel(D[(Entier A)]))) degrés) ; utiliser le fichier modèle suivant : AbilitiesSpellsUndeadDeathCoilDeathCoilSpecialArt.mdl.
Groupe unité - Considérer toutes unités présentes dans (Unites présentes dans le cercle de rayon 300.00, de centre (Position de Caster_2[(Entier A)]) et respectant ((((Unité respectant la condition) est Un bâtiment) Egal à  FAUX) et ((((Unité respectant la condition) appartient à  un ennemi du (Propriétaire  et exécuter l'action : (Unité - Faire que Caster_2[(Entier A)] cause des dommages à  (Unités considérées), répartissant (250.00 x (Réel((Niveau de Nécropacte  pour Caster[(Entier A)])))) points de dégâts de type Sorts et dommages de type Normal.).
Définir Boolean[(Entier A)] = VRAI
Collapse Sinon - Actions
Si (conditions) sont vraies, alors exécuter (Actions) sinon (Actions)
Collapse Si - Conditions
(Target[(Entier A)] est vivante) Egal à  FAUX
Collapse Alors - Actions
Unité - Créer 1 Dummy : Caster 2 pour le (Propriétaire de Shadow_1[(Entier A)]) au point (Position de Target[(Entier A)]) ; orientation = Orientation bâtiment par défaut degrés.
Unité - Régler le niveau de Effect : Speed  pour (Dernière unité créée) à  1.
Définir Caster_2[(Entier A)] = (Dernière unité créée)
Unité - Ordonner à  Caster_2[(Entier A)] de/d' Roi de la montagne humain - Coup de tonnerre.
Unité - Ajouter un temps de désinvocation de 1.00 secondes et de type Générique pour Caster_2[(Entier A)].
Pour chaque Entier B à  partir de1 jusqu'à  16, exécuter les actions de l'onglet Boucle - Actions.
Collapse Boucle - Actions
Effet spécial - Créer un effet spécial au point ((Position de Caster_2[(Entier A)]) décalé de 90.00 et orienté de (22.50 x (Réel((Entier B)))) degrés) ; utiliser le fichier modèle suivant : AbilitiesSpellsUndeadDeathCoilDeathCoilSpecialArt.mdl.
Pour chaque entier de C[(Entier A)] de 1 jusqu'à  32, exécuter les actions de l'onglet Boucle - Actions.
Collapse Boucle - Actions
Effet spécial - Créer un effet spécial au point ((Position de Caster_2[(Entier A)]) décalé de 180.00 et orienté de (11.25 x (Réel(C[(Entier A)]))) degrés) ; utiliser le fichier modèle suivant : AbilitiesSpellsUndeadDeathCoilDeathCoilSpecialArt.mdl.
Pour chaque entier de D[(Entier A)] de 1 jusqu'à  64, exécuter les actions de l'onglet Boucle - Actions.
Collapse Boucle - Actions
Effet spécial - Créer un effet spécial au point ((Position de Caster_2[(Entier A)]) décalé de 270.00 et orienté de (5.63 x (Réel(D[(Entier A)]))) degrés) ; utiliser le fichier modèle suivant : AbilitiesSpellsUndeadDeathCoilDeathCoilSpecialArt.mdl.
Groupe unité - Considérer toutes unités présentes dans (Unites présentes dans le cercle de rayon 300.00, de centre (Position de Caster_2[(Entier A)]) et respectant ((((Unité respectant la condition) est Un bâtiment) Egal à  FAUX) et ((((Unité respectant la condition) appartient à  un ennemi du (Propriétaire  et exécuter l'action : (Unité - Faire que Caster_2[(Entier A)] cause des dommages à  (Unités considérées), répartissant (250.00 x (Réel((Niveau de Nécropacte  pour Caster[(Entier A)])))) points de dégâts de type Sorts et dommages de type Normal.).
Définir Boolean[(Entier A)] = VRAI
Sinon - Actions
Collapse Sinon - Actions



Voici trois screens qui présentent le sort:

Screen 1:
Secret:

Crying or Very sad désolé pour une raison inconnue je ne peux upload les screens.



Screen 2:
Secret:

Crying or Very sad désolé pour une raison inconnue je ne peux upload les screens.



Screen 3:
Secret:

Crying or Very sad désolé pour une raison inconnue je ne peux upload les screens.



Voici l'URL:[url=http://communots.free.fr/upload/Nécropactev0.0113213767.w3x]Télécharger la map]Nécropacte 0.01[/url]
_________________


Dernière édition par Ectelion le 15/11/11 18:11; édité 2 fois
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé
 Zaaap
Membre honoraire


Inscrit le: 19 Oct 2011
Messages: 382
Sujets: 32
Spécialité en worldedit: Il faut vraiment que je réponde ?


MessagePosté le: 13/11/11 10:09    Sujet du message: Concour F2J Citer

Boule d'énergie -- Zaaap -- MUI-GUI

Le lancement du sort:

Secret:

Gui:
Trigger:
Collapse Evénements
Unité - A unit Initie l'effet d'une compétence
Collapse Conditions
(Ability being cast) Egal à  Boule d'énergie
Collapse Actions
Set INTEGER_MUI = (INTEGER_MUI + 1)
Set BOOLEAN_NONAME[INTEGER_MUI] = TRUE
Set BOOLEAN_NN[INTEGER_MUI] = TRUE
Set LEAK_POINT[1] = (Position of (Casting unit))
Set LEAK_POINT[2] = (Target point of ability being cast)
Set UNIT_CASTER[INTEGER_MUI] = (Casting unit)
Set REAL_ANGLE_2[INTEGER_MUI] = REAL_ANGLE[INTEGER_MUI]
Set REAL_ANGLE[INTEGER_MUI] = (Angle from LEAK_POINT[1] to LEAK_POINT[2])
Unité - Create 1 Boule d'énergie (dummy) for (Owner of UNIT_CASTER[INTEGER_MUI]) at LEAK_POINT[1] facing REAL_ANGLE[INTEGER_MUI] degrees
Set UNIT_DUMMY[INTEGER_MUI] = (Last created unit)
Set REAL_DISTANCE[INTEGER_MUI] = 1000.00
Set REAL_DAMAGE[INTEGER_MUI] = 100.00
Set REAL_SPEED[INTEGER_MUI] = 25.00
Groupe unité - Add UNIT_DUMMY[INTEGER_MUI] to UNITGROUP_DUMMY
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
INTEGER_MUI Egal à  1
Collapse Alors - Actions
Déclencheur - Turn on LOOP SPIRIT BOLT <gen>
Collapse Sinon - Actions
Do nothing
Custom script:   call RemoveLocation(udg_LEAK_POINT[1])
Custom script:   call RemoveLocation(udg_LEAK_POINT[2])
Custom script:   call RemoveLocation(udg_LEAK_POINT[3])



Le "loop":
Secret:

Gui:
Trigger:
Collapse Evénements
Temps - Every 0.03 seconds of game time
Conditions
Collapse Actions
Collapse For each (Integer INTEGER) from 1 to INTEGER_MUI, do (Actions)
Collapse Boucle - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
(UNIT_DUMMY[INTEGER] is alive) Egal à  TRUE
Collapse Alors - Actions
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
And - All (Conditions) are true
Collapse Conditions
REAL_DISTANCE[INTEGER] Inférieur ou égal à  250.00
BOOLEAN_NONAME[INTEGER] Egal à  TRUE
Collapse Alors - Actions
Set REAL_ANGLE_2[INTEGER] = (REAL_ANGLE_2[INTEGER] + 5.00)
Set BOOLEAN_NN[INTEGER] = FALSE
Set LEAK_POINT[1] = (POINT_TURN[INTEGER] offset by 250.00 towards REAL_ANGLE_2[INTEGER] degrees)
Effet spécial - Create a special effect at LEAK_POINT[1] using AbilitiesWeaponsSpiritOfVengeanceMissileSpiritOfVengeanceMissile.mdl
Effet spécial - Destroy (Last created special effect)
Unité - Move UNIT_DUMMY[INTEGER] instantly to LEAK_POINT[1]
Set UNITGROUP[INTEGER] = (Units within 150.00 of LEAK_POINT[1] matching ((((Matching unit) is Un bâtiment) Egal à  FALSE) and ((((Matching unit) is visible to (Owner of UNIT_DUMMY[INTEGER])) Egal à  TRUE) and ((((Matching unit) is Insensible à  la magie) Egal à  FALSE) and ((((Match
Collapse Groupe unité - Pick every unit in UNITGROUP[INTEGER] and do (Actions)
Collapse Boucle - Actions
Effet spécial - Create a special effect attached to the origin of (Picked unit) using AbilitiesSpellsOtherStampedeStampedeMissileDeath.mdl
Effet spécial - Destroy (Last created special effect)
Unité - Cause UNIT_DUMMY[INTEGER] to damage (Picked unit), dealing (REAL_DAMAGE[INTEGER] / 33.33) damage of attack type Sorts and damage type Normal
Groupe unité - Add (Picked unit) to UNITGROUP_NOSTACK[INTEGER]
Custom script:   call RemoveLocation(udg_LEAK_POINT[1])
Custom script:   call DestroyGroup(udg_UNITGROUP[udg_INTEGER])
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
And - All (Conditions) are true
Collapse Conditions
REAL_ANGLE_2[INTEGER] Supérieur ou égal à  REAL_ANGLE_3[INTEGER]
BOOLEAN_NN[INTEGER] Egal à  FALSE
Collapse Alors - Actions
Set BOOLEAN_NONAME[INTEGER] = FALSE
Set REAL_DISTANCE[INTEGER] = 1000.00
Set REAL_ANGLE[INTEGER] = (REAL_ANGLE_3[INTEGER] + 45.00)
Set BOOLEAN_NN[INTEGER] = TRUE
Custom script:   call DestroyGroup(udg_UNITGROUP[udg_INTEGER])
Collapse Sinon - Actions
Do nothing
Collapse Sinon - Actions
Set LEAK_POINT[1] = (Position of UNIT_DUMMY[INTEGER])
Set LEAK_POINT[2] = (LEAK_POINT[1] offset by REAL_SPEED[INTEGER] towards REAL_ANGLE[INTEGER] degrees)
Unité - Move UNIT_DUMMY[INTEGER] instantly to LEAK_POINT[2]
Effet spécial - Create a special effect at LEAK_POINT[2] using AbilitiesWeaponsSpiritOfVengeanceMissileSpiritOfVengeanceMissile.mdl
Effet spécial - Destroy (Last created special effect)
Set REAL_DISTANCE[INTEGER] = (REAL_DISTANCE[INTEGER] - REAL_SPEED[INTEGER])
Set UNITGROUP[INTEGER] = (Units within 150.00 of LEAK_POINT[1] matching ((((Matching unit) is Un bâtiment) Egal à  FALSE) and ((((Matching unit) is visible to (Owner of UNIT_DUMMY[INTEGER])) Egal à  TRUE) and ((((Matching unit) is Insensible à  la magie) Egal à  FALSE) and ((((Match
Collapse Groupe unité - Pick every unit in UNITGROUP[INTEGER] and do (Actions)
Collapse Boucle - Actions
Effet spécial - Create a special effect attached to the origin of (Picked unit) using AbilitiesSpellsOtherStampedeStampedeMissileDeath.mdl
Effet spécial - Destroy (Last created special effect)
Unité - Cause UNIT_DUMMY[INTEGER] to damage (Picked unit), dealing (REAL_DAMAGE[INTEGER] / 33.33) damage of attack type Sorts and damage type Normal
Groupe unité - Add (Picked unit) to UNITGROUP_NOSTACK[INTEGER]
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
REAL_DISTANCE[INTEGER] Inférieur ou égal à  250.00
Collapse Alors - Actions
Set LEAK_POINT[3] = (Position of UNIT_DUMMY[INTEGER])
Set REAL_ANGLE_3[INTEGER] = (REAL_ANGLE_2[INTEGER] + 720.00)
Set POINT_TURN[INTEGER] = (LEAK_POINT[3] offset by 250.00 towards REAL_ANGLE_3[INTEGER] degrees)
Custom script:   call DestroyGroup(udg_UNITGROUP[udg_INTEGER])
Collapse Sinon - Actions
Do nothing
Custom script:   call RemoveLocation(udg_LEAK_POINT[1])
Custom script:   call RemoveLocation(udg_LEAK_POINT[2])
Custom script:   call RemoveLocation(udg_LEAK_POINT[2])
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
And - All (Conditions) are true
Collapse Conditions
BOOLEAN_NONAME[INTEGER] Egal à  FALSE
BOOLEAN_NN[INTEGER] Egal à  TRUE
Collapse Alors - Actions
Set LEAK_POINT[1] = (Position of UNIT_DUMMY[INTEGER])
Set LEAK_POINT[3] = (LEAK_POINT[1] offset by REAL_SPEED[INTEGER] towards REAL_ANGLE[INTEGER] degrees)
Unité - Move UNIT_DUMMY[INTEGER] instantly to LEAK_POINT[3]
Effet spécial - Create a special effect at LEAK_POINT[3] using AbilitiesWeaponsSpiritOfVengeanceMissileSpiritOfVengeanceMissile.mdl
Effet spécial - Destroy (Last created special effect)
Set UNITGROUP[INTEGER] = (Units within 150.00 of LEAK_POINT[1] matching ((((Matching unit) is Un bâtiment) Egal à  FALSE) and ((((Matching unit) is visible to (Owner of UNIT_DUMMY[INTEGER])) Egal à  TRUE) and ((((Matching unit) is Insensible à  la magie) Egal à  FALSE) and ((((Match
Set REAL_DISTANCE[INTEGER] = (REAL_DISTANCE[INTEGER] - REAL_SPEED[INTEGER])
Collapse Groupe unité - Pick every unit in UNITGROUP[INTEGER] and do (Actions)
Collapse Boucle - Actions
Effet spécial - Create a special effect attached to the origin of (Picked unit) using AbilitiesSpellsOtherStampedeStampedeMissileDeath.mdl
Effet spécial - Destroy (Last created special effect)
Unité - Cause UNIT_DUMMY[INTEGER] to damage (Picked unit), dealing (REAL_DAMAGE[INTEGER] / 33.33) damage of attack type Sorts and damage type Normal
Groupe unité - Add (Picked unit) to UNITGROUP_NOSTACK[INTEGER]
Custom script:   call RemoveLocation(udg_LEAK_POINT[1])
Custom script:   call RemoveLocation(udg_LEAK_POINT[3])
Collapse If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Collapse Si - Conditions
REAL_DISTANCE[INTEGER] Inférieur ou égal à  50.00
Collapse Alors - Actions
Unité - Add a 0.01 second Générique expiration timer to UNIT_DUMMY[INTEGER]
Groupe unité - Remove UNIT_DUMMY[INTEGER] from UNITGROUP_DUMMY
Custom script:   call RemoveLocation(udg_POINT_TURN[udg_INTEGER])
Custom script:   call DestroyGroup(udg_UNITGROUP[udg_INTEGER])
Collapse Sinon - Actions
Do nothing
Custom script:   call RemoveLocation(udg_LEAK_POINT[1])
Custom script:   call RemoveLocation(udg_LEAK_POINT[2])
Sinon - Actions
Collapse Sinon - Actions
Do nothing



Et pour fini la description du sort:
Secret:

"Lance une boule d'énergie qui part en ligne droite et quand il atteint le point visé, il décrit un cercle avant de continuer sa course dans sa direction première. Le glaive inflige 100 points de dégâts par touche."



(Et sinon comment je fais pour attacher la map ? Merci d'avance)
EDIT: L'URL de la map
Télécharger la map

EDIT2: Des screens:

Secret:



Celui ci montre les dégâts infligés par le sort.



Celui ci montre que le sort est bien MUI (Il y a 3 fois le sort)


EDIT 3: Formatage à la demande de Vladaam
(Merci à Hoth pour m'avoir dit où upload)
_________________


Dernière édition par Zaaap le 14/11/11 18:45; édité 4 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: 13/11/11 10:51    Sujet du message: Citer

Pour l'attacher tu peux l'uploader sur le forum( http://communots.free.fr/upload.php ) et coller le liens sur ton post.
_________________
Revenir en haut
Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger
 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: 13/11/11 11:21    Sujet du message: Citer

bon moi j'retire mon sort, j'ai plus rien à apprendre dessus, le reste n'est que répétition de ce que j'ai déjà fait.
j'vais p't'être me lancer sur un autre si j'trouve une idée intéressante, mais si trop répétitif encore une fois j'garanti pas de le finir Surprised (s'pas intéressant après)
_________________
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: 13/11/11 15:12    Sujet du message: Citer

Aux personnes ayant postés leur sort :

Cela serait possible de rédiger avec ce format :

Code:
[b][color=blue]NOMDUSORT[/color][/b] par [b]VOTREPSEUDO[/b] [color=red][vJASS-JASS-GUI/MUI-MPI-Rien][/color]

[spoiler][b]Description du sort :[/b] Le sort fait cela.

[b]Infos supp :[/b]

Quelques infos supplémentaires sur comment fonctionne le sort. (des détails n'étant pas forcément présents dans la description).

[b]Déclencheurs :[/b]
[spoiler]Les déclencheurs Ici.[/spoiler]

[b]Screenshots :[/b]

[spoiler]Les screenshots ici.[/spoiler]

[url=Lien de la Test Map]Télécharger la map[/url][/spoiler]


Car, je ne peut pas tout faire.
_________________
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  Suivante
Page 2 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