Inscrit le: 25 Aoû 2007 Messages: 69 Sujets: 12 Spécialité en worldedit: Vulgarisateur de connaissance Médailles: 1 (En savoir plus...)
Posté le: 08/09/07 12:00 Sujet du message: Comment faire un escape ?
Je m'attaque a un sujet de taille alors j'espère que je serai à la hauteur .
Tout d'abord qu'est-ce qu'un Escape ?
C'est l'évolution du maze,c'est-à-dire qu'un "pure" maze est composé principalement de patrol et parfois de mortier qui tire sur une zone.Un escape,par définition, est une prison,une île,une forêt où il faut s'échapper.Il est donc plus harmonieux,le gameplay est plus agréable et les déclo plus poussés.
I)Un peu d'histoire.
Le premier maze a avoir vu le jour est Maze of Death de DEMANUFACTURE sur le serveur East, ce fut presque une révolution à l'époque , tout le monde y joué et c'est pourquoi un jour,un certain tylerbelan supplia DEMANUFACTURE de lui apprendre comment fabriquer un maze.C'est a ce moment qu'est né la génération des escape maker les plus connus:tylerbelan,LimiteR et OOwizkid et la compétition a été très forte a ce moment car c'était a celui cré le meilleur maze ou escape.Revenons à Tylerbelan ,il est devenu un maître dans cet art avec la série MoS... (il a à son actif une trentaine de maze/escape),sa dernière map est un escape rpg sublime: "Nothrend island" où on reconnait la patte du maître.Le fameux LimiteR, créateur de la saga Polar escape , indémodable qui a beaucoup marqué les esprits par son originalité.Et pour finir OOwizkid moins connus mais c'est a lui qu'on doit le très célèbre système du run kitty avec les cercles.Ils ont tous fini par aller sur WoW à part tyler qui a changé de pseudo par: Sp[i]nner.
II)Les bases..
Il y a beaucoup de triggers différents pour le terrain killer, la collision,ect...C'est pourquoi,je vais donner les plus simples pour l'instant.
a)Terrain killer.
Lorsque que l'unité sort du chemin,elle alors doit mourrir.On peut faire beaucoup de régions ou comme ca:
Gui:
Trigger:
Terrain killer
Evénements
Temps - Every 0.01 seconds of game time
Conditions
Actions
Groupe unité - Pick every unit in (Units of type Chasseur de démon) and do (Actions)
Boucle - Actions
If ((Terrain type at (Position of (Picked unit))) Egal à Northrend - Neige) then do (Unité - Kill (Picked unit)) else do (Do nothing)
Un autre exemple plus compliqué ou il faut 2 variables:
Gui:
Trigger:
Terrain killer bis
Evénements
Temps - Every 0.10 seconds of game time
Conditions
Actions
Set tempGroup = (Units of type Chasseur de démon)
Groupe unité - Pick every unit in tempGroup and do (Actions)
Boucle - Actions
Set temPoint = (Position of (Picked unit))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Si - Conditions
((Picked unit) is alive) Egal à TRUE Or - Any (Conditions) are true
Conditions
(Terrain type at (Position of (Picked unit))) Egal à Eté de Lordaeron - Terre
Je conseille celui-ci par rapport à l'autre.N'oubliez pas de rajoutez des terrain si vous en avez plusieurs différents.
b)Rendre une unité inselectionnable .
On ne peut pas donc cliquer sur l'unité qui a la capacité:Infestation(locust).Pour plus d'information,je vous invite à aller visiter la FAQ.
c)La collision.
Il faut aller dans l'éditeur d'objet (F6) dans l'onglet compétence puis dans le dossier Spécial "immolation permanente" par exemple.Suivez les intructions de l'image:
Pour finir rajouter la capacité Immolation à la créature que vous souhaité qu'elle tue si on la touche.
d)Check point.
Gui:
Trigger:
Check point
Evénements
Unité - A unit enters Checkpoint 2 <gen>
Conditions
(Unit-type of (Triggering unit)) Egal à Chasseur de démon
Actions
Déclencheur - Turn off (This trigger) Groupe unité - Pick every unit in (Units of type Chasseur de démon) and do (Unité - Move (Picked unit) instantly to (Random point in Checkpoint 2 <gen>)) Groupe unité - Pick every unit in (Units of type Chasseur de démon) and do (Héros - Instantly revive (Picked unit) at (Random point in Checkpoint 2 <gen>), Masquer revival graphics)
For each (Integer A) from 1 to 11, do (Actions)
Boucle - Actions
Caméra - Pan camera for (Player((Integer A))) to (Center of Checkpoint 2 <gen>) over 0.00 seconds
e)La vision.
Il faut que le brouillard soit opaque initialement, aller dans scénario "Option carte" et décochez la case " Zones masqués sont patielement visibles".Puis avec ce déclo:
Gui:
Trigger:
Visibilite
Evénements
Map initialization
Conditions
Actions
Groupe joueur - Pick every player in (All players) and do (Visibilité - Create an initially Activé visibility modifier for (Picked player) emitting Visibilité across LVL 1 <gen>)
Set lost = TRUE Groupe unité - Pick every unit in (Units of type |cFF00FFFFCaptain Mazer|r) and do (If (((Picked unit) is alive) Egal à TRUE) then do (Set lost = FALSE) else do (Do nothing))
If (lost Egal à TRUE) then do (Déclencheur - Run defaite <gen> (ignoring conditions)) else do (Do nothing)
avec un compte à rebour :
Gui:
Trigger:
defaite Evénements Conditions
Actions
Déclencheur - Turn off turn on defaite <gen> Compte à rebours - Start timerlost as a Un coup timer that will expire in 8.00 seconds Compte à rebours - Create a timer window for timerlost with title |cff0000ffTime to t... Compte à rebours - Montrer (Last created timer window) Wait 8.00 seconds
Groupe joueur - Pick every player in (All players) and do (Partie - Defeat (Picked player) with the message: |cff0000ffGAME OVER...)
Sachant que la variable lost est booléen , false .
g)Systeme de kick.
Pour kiker les noobs, les chieurs ou les players AFK:
Gui:
Trigger:
kick blue
Evénements
Joueur - Joueur 1 (Rouge) types a chat message containing -kick blue as Résultat équivalent
Conditions
Actions
Partie - Defeat Joueur 2 (Bleu) with the message: Owned by the Host! ...
h)Remove players.
Remove les slots inactifs:
Gui:
Trigger:
Evénements
Temps - Every 0.01 seconds of game time
Conditions
(Joueur 1 (Rouge) slot status) Egal à N'est pas utilisé
Actions
Unité - Remove |cFF00FFFFCaptain Mazer|r 0040 <gen> from the game
II)La slide..
Alors pour ce trigger il y énormément de possibités.J'ai fais mon prope système en JASS qui me parait,ma fois correct :
Gui:
Trigger:
Sliding System
Evénements
Map initialization
Conditions
Actions
Set Hero = Chasseur de démon Set Speed = 8.00 Set H = (Units of type Hero) Set P[0] = P[1]
Jass:
function Trig_Sliding_System_tuto takes nothing returns boolean
if(not(GetTerrainTypeBJ(udg_P[0])=='Nice'))then
return false
endif
return true
endfunction
function Trig_Sliding_System_by_tuto takes nothing returns nothing
set udg_P[0]=GetUnitLoc(GetEnumUnit())
if(Trig_Sliding_System_tuto())then
set udg_P[1]=PolarProjectionBJ(udg_P[0],udg_Speed,GetUnitFacing(GetEnumUnit()))
call SetUnitPositionLoc( GetEnumUnit(),udg_P[1] )
call RemoveLocation(udg_P[1])
else
endif
call RemoveLocation(udg_P[0])
endfunction
function Trig_Sliding_System_tuto_Actions takes nothing returns nothing
call ForGroupBJ(udg_H,function Trig_Sliding_System_tuto)
endfunction
function InitTrig_Sliding_System_tuto takes nothing returns nothing
set gg_trg_Sliding_System_tuto=CreateTrigger()
call TriggerRegisterTimerEventPeriodic(gg_trg_Sliding_System_tuto,0.02)
call TriggerAddAction(gg_trg_Sliding_System_tuto,function Trig_Sliding_System_tuto_Actions)
endfunction
et:
Jass:
function Trig_Steering_System_tuto takes nothing returns boolean
if(not(GetTerrainTypeBJ(udg_P[2])=='Nice'))then
return false
endif
return true
endfunction
function Trig_Steering_System_tuto_Actions takes nothing returns nothing
set udg_P[2]=GetUnitLoc(GetTriggerUnit())
if(Trig_Steering_System_tuto())then
set udg_P[3]=GetOrderPointLoc()
call SetUnitPositionLocFacingLocBJ(GetTriggerUnit(),udg_P[2],udg_P[3])
call RemoveLocation(udg_P[3])
else
endif
call RemoveLocation(udg_P[2])
endfunction
function InitTrig_Steering_System_tuto takes nothing returns nothing
set gg_trg_Steering_System_tuto=CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_Steering_System_tuto,EVENT_PLAYER_UNIT_ISSUED_POINT_ORDER)
call TriggerAddAction(gg_trg_Steering_System_tuto,function Trig_Steering_System_tuto_Actions)
endfunction
ou en plus simple :
Gui:
Trigger:
Slide
Evénements
Temps - Every 0.03 seconds of game time
Conditions
Actions
Groupe unité - Pick every unit in (Units of type Chasseur de démon) and do (Actions)
Boucle - Actions
If ((Terrain type at (Position of (Picked unit))) Egal à Northrend - Glace) then do (Unité - Move (Picked unit) instantly to ((Position of (Picked unit)) offset by 11.00 towards (Facing of (Picked unit)) degrees)) else do (Do nothing)
et à faire pour chaque joueurs:
Gui:
Trigger:
Evénements
Unité - A unit owned by Joueur 1 (Rouge) Reçoit un ordre avec point pour cible
Conditions
Actions
Unité - Make Chasseur de démon 0000 <gen> face (Target point of issued order) over 0.00 seconds
Voila,j'aurais pu continuer lontemps dans ce tuto lol mais ce ne sont que des bases.
Bye. _________________
Quand tu es poursuivi, l'important n'est pas de courir plus vite que tes poursuivants, mais plus vite que tes potes. (proverbe gobelin)
Dernière édition par FitZ le 09/09/07 17:44; édité 4 fois
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 08/09/07 12:09 Sujet du message:
les if sont inutiles quand tu veux retourner un booleen.
les else sont inutiles si tu n'utilses pas d'actions aprés celui ci
enfin tu utilises trop de parenthèses
Jass:
return GetTerrainTypeBJ(udg_P[0])=='Nice'
Indente ton code.
sinon ca me fait bien rire la petite histoire de gloire ^^
a part cela le tuto est plutôt bien fait mais l'utilisation du jass plutôt inutile, étant donné que tu gardes tout de même les fonctions du gui.
Tu as d'ailleurs oublié quelques leaks (en gui)
PS : Je supposes que tu possédes un des pseudos nommés en début du tuto _________________
Le violet, c'est moche.
Dernière édition par Troll-Brain le 08/09/07 12:21; édité 5 fois
Inscrit le: 21 Aoû 2007 Messages: 915 Sujets: 47 Spécialité en worldedit: Faire des maps avec 500 déclos en GUI alors que 2 en JASS suffisent Médailles: 1 (En savoir plus...)
Posté le: 08/09/07 12:47 Sujet du message:
Voici un truc qui te permet d'utiliser le kick avec un seul déclo :
Troll-Brain a écrit:
Personnellement je préfères les numéros des joueurs c'est plus facile et rapide.
Gui:
Trigger:
kick
Evénements
Joueur - Joueur 1 (Rouge) types a chat message containing -kick as Une sous-chaîne
Conditions
Actions
Partie - Defeat (Player((Integer((Substring((Entered chat string), 7, 8)))))) with the message: Défaite !
Pour kick tu fait donc "-kick kapoka" par exemple
Sinon pour l'immolation, c'est la technique la plus simple mais il y a parfois des défaillences, il faudrais utiliser un petit déclo pour que ca marche a tout les coups
Sinon il faudrais trouver un truc pour que l'unité partouille du point "a" au point "c" en passant par le point "b" sur cette image avec un seul déclo. Car sinon ca fait énormément de déclos ^^
Ca sert beacoups dans les escapes de faire patrouiller des unités (souvent avec immolation d'ailleurs)
Inscrit le: 05 Sep 2007 Messages: 155 Sujets: 16 Spécialité en worldedit: le bouletisme...
Posté le: 08/09/07 12:55 Sujet du message:
kapoka, ton déclo de kick ne marchera pas,
cr il prendra que la premiere lettre du pseudo pour comparrer ...
faut mettre un des trucs qui regarde jusqu'a la derniere lettre,
a la place du 8 (c'ets marqué dans le fofo des déclos, par Zileiv ^^' )
Inscrit le: 23 Aoû 2007 Messages: 7143 Sujets: 147 Spécialité en worldedit: le troll, le flood, la vulgarité, mon coeur balance Médailles: 2 (En savoir plus...)
Posté le: 08/09/07 13:06 Sujet du message:
Mais nan déjà ce que j'ai posté demande juste le numéro du joueur et pas son nom, et ca prend du caractère 7 à 8.
1)"-"
2)"k"
3)"i"
4)"c"
5)"k"
6)" "
7)"1"
8 )"0"
Voilà l'exemple pour le joueur 10.
J'ai volontairement choisis 2 caractères seulement, car il n'y a que 12 joueurs maximum de tooute façon
Et c'est vraiment pas bien grave si on prend le 8 ème caractère inutilement (numéro de joueur inférieur à 10 )
Inscrit le: 21 Aoû 2007 Messages: 2072 Sujets: 51 Spécialité en worldedit: Harceller vos maps de critiques !! ';..;' Médailles: 1 (En savoir plus...)
Posté le: 08/09/07 13:44 Sujet du message: Re: Comment faire un escape ?
Il est bien fait ce tuto mais il aurait été bien de continuer par autre chose que les bases (chaîne d'unités qui se déplace [version angle unité/version déplaçement groupe avec for loop integrer], système jump [sort/jumper] et autres). J'ai aussi un tuto pour faire la même chose que miror escape.
Pour les bases sa n'est pas vraimment necessaire quand on connaît mais pour les nouveaux ou pour les maze/escape avec des cas où les zones ne tuent pas mettre l'explication du kill par region ou la condition que l'unité ne se trouve pas dans la region. On peut parler aussi d'un logiciel sur hiveworkshop qui gêres les regions.
Pour l'immolation elle peut être défaillante si la portée est inférieure à 75 (ou un truc comme sa)et il vaut mieux la mettre à 0.01 secondes de délai au moins on est sûr que sa tue instantanément. Pour l'immolation il faut préciser à changer le buff pour mettre aucun effet. Par contre j'ai pas comprit pourquoi tu as rajouté vitesse de projectille et portée du sort. _________________
Inscrit le: 21 Aoû 2007 Messages: 1257 Sujets: 34 Spécialité en worldedit: Spécialité en worldedit:
Posté le: 08/09/07 14:02 Sujet du message:
Un logiciel de koga73 qui fait les declos pour les units qui rentrent dans les regions suffit juste de metre l'intervalle du nombre de region. _________________
Signature:
Ceci est un bloc de texte qui peut être ajouté aux messages que vous postez. Il y a une limite de 700 caractères
Inscrit le: 25 Aoû 2007 Messages: 69 Sujets: 12 Spécialité en worldedit: Vulgarisateur de connaissance Médailles: 1 (En savoir plus...)
Posté le: 08/09/07 14:08 Sujet du message:
-Troll-brain, j'arrive pas a me faire a ce nom, je pense toujours à hébus avec ton avatar,uh .Bref, je vois que tu est a un stade beaucoup plus élevé que moi au niveau du JASS .Merci de tes corrections :d
-GaaH, moi padawan ? ...( c'est pas le contraire? )
-Blueblood,pour faire court,le 2ème remove le lagg (memory leak)
-Super mouton , je t'en prie , poste ton tuto pour faire un escape avancé ou si tu veux compléter celui la.
Bye _________________
Quand tu es poursuivi, l'important n'est pas de courir plus vite que tes poursuivants, mais plus vite que tes potes. (proverbe gobelin)
Inscrit le: 21 Aoû 2007 Messages: 2072 Sujets: 51 Spécialité en worldedit: Harceller vos maps de critiques !! ';..;' Médailles: 1 (En savoir plus...)
Posté le: 08/09/07 14:20 Sujet du message:
Pour le reste des avancés je vais devoir le faire moi même mais voici le copier/coller du tuto par moi pour l'effet de miror escape (je précise qu'il y a du leak avec l'utilisation de point T) :
Monde parallèle d'un côté (Miror Escape) :
Première étape (le terrain) : créez votre terrain et votre terrain parrallèle comme dans mirror escape avec au bout un endroit où les clones se rejoignent.
Deuxième étape (appliquer unités et régions parallèles) : maintenant plaçez un héros dans le terrain normal pour le joueur et un autre pour le neutre passif dans le terrain parallèle. Mettez une region dans le terrain normal au début et mettez la même dans le terrain parallèle (notez que il y a inversement de position dans parallèle). Plaçez une region de repaire là où se trouve le point de recontre des 2 clones.
//Rien de bien compliquer jusque là et sa resterat juste un peu moins facile pour le reste. Désormais tout le reste se passerat en déclencheur.
Troisième étape (déclencheur d'introduction) : pour que l'effet parallèle ne sois pas en retard il vaut mieux que les héros clones et réels soient au même stade. Vous allez enlever toutes les actions du déclencheur d'initialisation et appliquez ceci :
//=>
Unité - Move Unit And Face Angle (Instantly) : Move L'unité instantly to Region_De_L'unité <gen>, facing Vers le chemin à suivre (45-90-135-180-225-270-315-360/0.00 degrees
Il aussi conseiller de changer la couleur du clone par rapport à son héros réspectif, vous pouvez faire un set point "Base" le centre de la region repaire. Cela permettrat d'éviter de faire "of center of region", de plus "Base" serat dans l'explication et il éviterat du memory leak supplémentaire. Si vous voulez évitez le leak dans vos déclencheurs c'est une autre histoire, et c'est pas ici que je vous donnerais la solution .
Etape suprême : là sa consiste à faire que le clone face les mêmes actions que vous. Pour cela il vous faudrat de multiples déclencheurs qui s'applique aux différents ordres : patrol, move, smart, attack, holdposition, stop. Toujours est-il que si il s'applique à un point il devrat faire la même chose par rapport au calcul suivant ou une modification de celui-ci.
On va s'attaque au déplaçement normal. Vous allez faire ce déclencheur exactement comme il est en sachant qu'il s'applique comme sa :
Au dessut c'est le déclencheur, en dessous c'est un explicatif du mouvement. La valeur X est la valeur qui correspond où se localise un point par rapport de Gauche à Droite et Y de Haut en Bas. Ce déclencheur s'applique de façon à ce que le clône soit en bas, les mouvements des deux personnages se font sur une même valeur X, en revanche pour que l'effet mirroir sois bien ms en place ils ne sont pas à la même hauteur, mais ils sont chacuns à la même distance de la droite qui les sépare. Cette droite imaginaire qui les sépare est issue de la variable "Base" ou le point de rencontre.
Quand le vrai reçoit un ordre, le clone reçoit le même ordre de l'autre côté de la droite. Etrange fait on pourrait dire avec le changement de valeur négatives/positives/0 on aurait besoin de if/then/else et de d'autres calculs. Pas besoin . Il existe le calcul magique qui marche pour tout, vous serrez tous étonnez .
B = Base, et T = Target point of issue order
((Y de Base - Y de T)+(Y de Base)
Avec ce calcul vous êtes sûr que cela marcherat, dans notre cas il faut compter les parties rouges de ce calcul et les appliquer pour Y. Il faut appliquer ce calcul à X/Y en mettant/ne mettant pas les parties rouges du calcul celon comment est votre mirroir et la position de votre héros/clone par rapport à ce mirroir (valeur négative ou positive par rapport au point de base). Et voilà vous avez terminez il ne vosureste plus qu'à continuer votre escape, et appliquer le reste des actions à votre mirroir. Vous pouvez téléchargez ce système ici :
Ce système est applicable sur un autre côté, sur les 2 façades de la droite qui sépare les 2 personnages, voir sur les 2 côtés .
Pour cela il faut appliquer ce calcul à X et/ou Y, et si votre héros se trouve à une valeur inférieur de X/Y il faut mettre les parties rouges de ce calcul. _________________
Dessine moi un Bizzardbizzare !
Dernière édition par super_mouton le 08/09/07 14:22; édité 1 fois
Toutes les heures sont au format GMT + 1 Heure Aller à la page 1, 2, 3, 4, 5, 6, 7, 8, 9, 10Suivante
Page 1 sur 10
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