Author Topic: Ascenseur & Un Menu Pour Choisir L'étage  (Read 1052 times)

The-best

  • Tailleur de maps
  • Posts: 355
    • http://psycho-gamers.teamfr.com
Ascenseur & Un Menu Pour Choisir L'étage
« on: May 23, 2009, 09:27:03 PM »
Salut,
Pour les personnes que cela interresse , voici comment créer un ascenseur sur le nombre d'étages que l'on veut avec un menu pour choisir l'étage.

Niveau Mapping :
Pour 5 étages, j'ai en tout 6 trigger_use_touch nommé (targetname) comme ceci:
trig_ascenseur0 => trigger situé dans l'ascenseur
trig_ascenseur1 => trigger pour appelé l'ascenseur a l'étage 1
trig_ascenseur2 => trigger pour appelé l'ascenseur a l'étage 2
et anisi de suite

trig_ascenseur0 est relie au script_brushmodel qui sert de plateforme
trig_ascenseur1 a trig_ascenseur5 sont relié a un script_origin qui définira la position d'arrêt de la plateforme pour leur étage (la position doit être au milieu de la cabine , c-a-d si vous avez une plateforme de 60 unités de haut, vous devrez placez votre script_origin 30 unités au dessus du sol).

Pour les portes coulissantes qui s'ouvrent dés que l'ascenseur est au palier :
En faite, il y a 2 portes dans l'ascenseur, avec comme targetname
porte_ascenseur_droite0
porte_ascenseur_gauche0

et pour chaque etage, il y a 2 portes, avec comme targetname
Pour l'etage 1:
porte_ascenseur_droite1
porte_ascenseur_gauche1

Pour l'etage 2:
porte_ascenseur_droite2
porte_ascenseur_gauche2

Et ainsi de suite pour chaque étage...

Pour qu'un model monte avec l'ascenseur donner lui le targetname :
 bouge_avec_ascenseur

Préfab téléchargeable (cliquez)

Niveau scripting :

Le script nommé "ascenseur.gsc" situé dans le dossier raw/maps/mp
Code: [Select]
main(Nombre_etage,vitesse)
{
precacheMenu("ascenseur");
level.plateforme = 0;
level.etage = 1;
trig = getent("trig_ascenseur0","targetname");
plateforme = getent(trig.target,"targetname");
xmodel_ascenseur = getentarray("bouge_avec_ascenseur","targetname");
level.decalage_trig = trig.origin - plateforme.origin;
Nombre_etage += 1;
for(i=0;i<Nombre_etage;i++)
{
 trig_ascenseur[i] = getent("trig_ascenseur"+i,"targetname");
 level.trig_ascenseur[i] = trig_ascenseur[i];
 trig_ascenseur[i] thread gestion_trigger(plateforme,vitesse, xmodel_ascenseur, Nombre_etage);
 level.porte_gauche[i] = getent("porte_ascenseur_gauche"+i,"targetname");
 level.porte_droite[i] = getent("porte_ascenseur_droite"+i,"targetname");
}

ouverture_porte(level.porte_gauche[0], level.porte_droite[0], level.porte_gauche[level.etage], level.porte_droite[level.etage], 50);
}

gestion_trigger(plateforme, vitesse, xmodel_ascenseur, Nombre_etage)
{
while(1)
{
 self waittill( "trigger", player );

 if (self == level.trig_ascenseur[0] && level.plateforme == 0)
 {
  player openMenu( "ascenseur" );
  player waittill("menuresponse", menu, Numero_etage_demande );
  Numero_etage_demande = int(Numero_etage_demande);
  if (Numero_etage_demande != 0)
  {
   position_arriver = getent(level.trig_ascenseur[Numero_etage_demande].target,"targetname");
  }
  else
  {
   position_arriver = plateforme;
  }
 }
 else
 {
  position_arriver = getent(self.target,"targetname");
  Numero_etage_demande = 1;
  for(i=1;i<Nombre_etage;i++)
  {
   if (self == level.trig_ascenseur[i])
   {
    Numero_etage_demande = i;
   }
  }
 }
 distance = position_arriver.origin - plateforme.origin;
 if (distance[2]!=0 && level.plateforme == 0)
 {
  level.plateforme = 1;

  fermeture_porte(level.porte_gauche[0], level.porte_droite[0], level.porte_gauche[level.etage], level.porte_droite[level.etage], 50);

  self playsound ( "son_appel_OK" );
  plateforme bouge_ascenseur(distance[2],vitesse,xmodel_ascenseur, level.porte_gauche[0], level.porte_droite[0]);
 
  level.etage = Numero_etage_demande;
  ouverture_porte(level.porte_gauche[0], level.porte_droite[0], level.porte_gauche[level.etage], level.porte_droite[level.etage], 50);

  level.plateforme = 0;
 }
 else
 {
  self playsound ( "son_appel_non_OK" );
 }
}
}

bouge_ascenseur(distance,vitesse, xmodel_ascenseur, porte1, porte2)
{
level.trig_ascenseur[0].origin = (0.0, 0.0, -50000.0);

temps = distance / vitesse;
if (temps < 0)
{
 temps *= (-1);
}

if(isdefined(xmodel_ascenseur))
{
 for(i=0;i<xmodel_ascenseur.size;i++)
 {
  xmodel_ascenseur[i] moveZ( distance, temps, (temps / 4), (temps / 4));
 }
}
porte1 moveZ( distance, temps, (temps / 4), (temps / 4));
porte2 moveZ( distance, temps, (temps / 4), (temps / 4));

self moveZ( distance, temps, (temps / 4), (temps / 4));
self PlayLoopSound( "son_ascenseur" );
self waittill( "movedone" );
level.trig_ascenseur[0].origin = level.decalage_trig + self.origin;
self StopLoopSound();
self playsound( "son_bloquage_plateforme" );
}

ouverture_porte(porte1, porte2, porte3, porte4, distance)
{
porte1 moveX( 0-distance, 1, 0.1, 0.1);
porte2 moveX( distance, 1, 0.1, 0.1);
porte3 moveX( 0-distance, 1, 0.1, 0.1);
porte4 moveX( distance, 1, 0.1, 0.1);
porte1 playsound ( "son_ouverture_porte" );
porte4 waittill( "movedone" );
}

fermeture_porte(porte1, porte2, porte3, porte4, distance)
{
porte1 moveX( distance, 1, 0.1, 0.1);
porte2 moveX( 0-distance, 1, 0.1, 0.1);
porte3 moveX( distance, 1, 0.1, 0.1);
porte4 moveX( 0-distance, 1, 0.1, 0.1);
porte1 playsound ( "son_fermeture_porte" );
porte4 waittill( "movedone" );
}

Une menu du nom de "ascenseur.menu " dans le dossier "raw/ui_mp/scriptmenus"


Code: [Select]
#include "ui/menudef.h"


#define MenuName "ascenseur"
#define etage_text "A quel étage voulez-vous aller ?"
#define etage1 "étage 1"
#define etage2 "étage 2"
#define etage3 "étage 3"
#define etage4 "étage 4"
#define etage5 "étage 5"

{
MenuDef
{
 name MenuName
 fullscreen 0
 rect -200 -75 400 150 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER
 focusColor COLOR_FOCUSED
 style 1
 border   1
 bordersize  2
 bordercolor  0.95 0.9 0.9 0.7
 popup
 onESC
 {
  scriptMenuResponse "0";
  close  MenuName;
 }
 
 itemDef
 {
  style   WINDOW_STYLE_SHADER
  rect   0 0 396 146 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_CENTER
  background  "white"
  forecolor  0.2 0.2 0.22 0.5
  visible   1
  decoration
 }
 
   itemDef
 {
  name default
  text etage_text
  type ITEM_TYPE_TEXT
  style 0
  textstyle 6
  rect 40 35 150 14
  textalign ITEM_ALIGN_CENTER
  textfont UI_FONT_NORMAL
  textscale .4
  forecolor .9 .9 .95 1
  visible 1
  decoration
 }
 
 itemdef
 {
  text   etage1
  type   ITEM_TYPE_BUTTON
  textfont  UI_FONT_NORMAL
  textscale  0.4
  textstyle  ITEM_TEXTSTYLE_SHADOWED
  style   WINDOW_STYLE_FILLED
  rect   30 80 70 20
  textalign  ITEM_ALIGN_CENTER
  textaligny  11
  forecolor  .9 .9 .95 1
  visible   1
  border   1
  action
  {
   scriptMenuResponse "1";
   play  "mouse_click";
   close  MenuName;
  }  
 }
 itemdef
 {
  text   etage2
  type   ITEM_TYPE_BUTTON
  textfont  UI_FONT_NORMAL
  textscale  0.4
  textstyle  ITEM_TEXTSTYLE_SHADOWED
  style   WINDOW_STYLE_FILLED
  rect   100 80 70 20
  textalign  ITEM_ALIGN_CENTER
  textaligny  11
  forecolor  .9 .9 .95 1
  visible   1
  border   1
  action
  {
   scriptMenuResponse "2";
   play  "mouse_click";
   close  MenuName;
  }  
 }
 itemdef
 {
  text   etage3
  type   ITEM_TYPE_BUTTON
  textfont  UI_FONT_NORMAL
  textscale  0.4
  textstyle  ITEM_TEXTSTYLE_SHADOWED
  style   WINDOW_STYLE_FILLED
  rect   170 80 70 20
  textalign  ITEM_ALIGN_CENTER
  textaligny  11
  forecolor  .9 .9 .95 1
  visible   1
  border   1
  action
  {
   scriptMenuResponse "3";
   play  "mouse_click";
   close  MenuName;
  }
 }
 itemdef
 {
  text   etage4
  type   ITEM_TYPE_BUTTON
  textfont  UI_FONT_NORMAL
  textscale  0.4
  textstyle  ITEM_TEXTSTYLE_SHADOWED
  style   WINDOW_STYLE_FILLED
  rect   240 80 70 20
  textalign  ITEM_ALIGN_CENTER
  textaligny  11
  forecolor  .9 .9 .95 1
  visible   1
  border   1
  action
  {
   scriptMenuResponse "4";
   play  "mouse_click";
   close  MenuName;
  }
 }
 itemdef
 {
  text   etage5
  type   ITEM_TYPE_BUTTON
  textfont  UI_FONT_NORMAL
  textscale  0.4
  textstyle  ITEM_TEXTSTYLE_SHADOWED
  style   WINDOW_STYLE_FILLED
  rect   310 80 70 20
  textalign  ITEM_ALIGN_CENTER
  textaligny  11
  forecolor  .9 .9 .95 1
  visible   1
  border   1
  action
  {
   scriptMenuResponse "5";
   play  "mouse_click";
   close  MenuName;
  }
 }
}
}

Rajoutez cette ligne à votre mp_nomdelamap.gsc :
Code: [Select]
thread maps\mp\ascenseur::main(5,50);Les nombre qui sont dans la parenthèse après le main correspondent aux nombres d'étages et à la vitesse que met la cabine à monter chaque étage. main(nombre_étages,vitesse);

N'oubliez pas d'ajoutez tout cela à votre "Update Zone File"


Et enfin
Code: [Select]
menufile,ui_mp/scriptmenus/ascenseur.menu
rawfile,maps/mp/ascenseur.gsc



Le menu plus haut peut être personnalisé pour un autre nombre d'étages (ici, 5)

Et voilà, c'était pas si compliqué que ça!
« Last Edit: July 28, 2009, 03:59:30 PM by The-best »


"On ne juge pas un homme sur le nombre de fois qu'il tombe mais sur le nombre de fois qu'il se relève."Jigoro Kano

"La garde meurt mais ne se rend pas."Napoléon 1er

"Si tu pense que la violence ne résout rien, c'est que tu ne tape pas assez fort"

Florent

  • Legomaniaque
  • ****
  • Posts: 1468
    • http://www.florent-poujol.fr
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #1 on: June 05, 2009, 06:21:10 PM »
Tiens j'avais pas tilté, tu n'explique pas comment créé le .csv qu'il faut créé pour entendre les sons.

Le lien n'est plus valable. Si tu me file le fichier par mail, je peux le mettre sur mon hébergement, ce sera toujours plus pérenne que rapidshare ou autre sites assimilés.
« Last Edit: June 05, 2009, 06:23:22 PM by Florent »

The-best

  • Tailleur de maps
  • Posts: 355
    • http://psycho-gamers.teamfr.com
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #2 on: June 06, 2009, 06:12:05 PM »
C'est quoi ton adresse?


"On ne juge pas un homme sur le nombre de fois qu'il tombe mais sur le nombre de fois qu'il se relève."Jigoro Kano

"La garde meurt mais ne se rend pas."Napoléon 1er

"Si tu pense que la violence ne résout rien, c'est que tu ne tape pas assez fort"

db99

  • Bleusaille
  • Posts: 47
    • http://www.cod4-stadium.fr
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #3 on: July 24, 2010, 01:57:26 AM »
Salut  :lol:

Très bon tuto, très simple a comprendre et a installé grace à ton travail (prefab + sript). Top !

Juste un petit sousci pour les sons de l'ascenseur...
Je ne les aient pas et donc petit message d'erreur, rien de grave.
Comment puis je me les procurés ?
Au pire je pourrais les créer mais comment les ajouter ?


Merci d'avance !
 :lol:
 

The-best

  • Tailleur de maps
  • Posts: 355
    • http://psycho-gamers.teamfr.com
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #4 on: July 24, 2010, 02:15:15 AM »
Salut !!!
Alors sa fait longtemps que j'y ai pas touché , mais cherche un peu sur google , j'avais trouvé 2, 3 bons sites pas mals qui avaient une bibliotèque de son , et fallait chercher par mots-clées...
Si tu trouve pas , prends des vidéos de pubs pour ascenseurs et extrait en le son...
Voilà , en esperant avoir put t'aider ;)
The-best


"On ne juge pas un homme sur le nombre de fois qu'il tombe mais sur le nombre de fois qu'il se relève."Jigoro Kano

"La garde meurt mais ne se rend pas."Napoléon 1er

"Si tu pense que la violence ne résout rien, c'est que tu ne tape pas assez fort"

db99

  • Bleusaille
  • Posts: 47
    • http://www.cod4-stadium.fr
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #5 on: July 24, 2010, 05:13:51 AM »
Je veux bien les recrer, no soucy, mais où dois-je les mettre ?
Comment dir a radiant d'utiliser tel ou tel son ?
Quel fichier gère sa ?

Merci  :rolleyes:  

The-best

  • Tailleur de maps
  • Posts: 355
    • http://psycho-gamers.teamfr.com
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #6 on: July 24, 2010, 01:39:38 PM »
Il faut faire un script général où tu met tout les sons de la map, mais alors comment il doit être fait et tout je peux pas t'aider  , j'ai jamais vraiment réussi.
Je crois que ya des tutos pour sa.
« Last Edit: March 02, 2011, 09:31:46 PM by The-best »


"On ne juge pas un homme sur le nombre de fois qu'il tombe mais sur le nombre de fois qu'il se relève."Jigoro Kano

"La garde meurt mais ne se rend pas."Napoléon 1er

"Si tu pense que la violence ne résout rien, c'est que tu ne tape pas assez fort"

db99

  • Bleusaille
  • Posts: 47
    • http://www.cod4-stadium.fr
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #7 on: July 25, 2010, 01:44:55 AM »
Si quelqu'un trouve un tuto de se genre pour les sons de l'ascenseur ou les sons en général qu'il m'envoi le lien par MP ou dans ce topic directement , MERCI A VOUS  :)

Merci "The_Best" en tout cas pour cet ascenseur!  :huh:
« Last Edit: July 26, 2010, 10:34:34 PM by db99 »

db99

  • Bleusaille
  • Posts: 47
    • http://www.cod4-stadium.fr
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #8 on: August 03, 2010, 12:43:02 AM »
J'ai trouvé la solution   B)

Si quelqu'un est intéraisser qu'il demande  :lol:  

The-best

  • Tailleur de maps
  • Posts: 355
    • http://psycho-gamers.teamfr.com
Ascenseur & Un Menu Pour Choisir L'étage
« Reply #9 on: October 16, 2010, 06:10:13 PM »
Donne, comme ça on complète mon tuto et puis il aidera du monde ! :)


"On ne juge pas un homme sur le nombre de fois qu'il tombe mais sur le nombre de fois qu'il se relève."Jigoro Kano

"La garde meurt mais ne se rend pas."Napoléon 1er

"Si tu pense que la violence ne résout rien, c'est que tu ne tape pas assez fort"