Aller au contenu


Un Script De Piège


  • Veuillez vous connecter pour répondre
13 réponses à ce sujet

#1 mamoula

mamoula

Posté 25 septembre 2006 - 13:57

Bonjour à vous amis et néanmoins collègues Wiwilandais.
Je m'adresse a vous solennellement pour vous poser une question bénigne:
Quelqu'un aurait-il l'amabilité de m'expliquer de manière claire ( je suis pas doué en script )
comment faire en sorte que deux murs plein de pointes se rapprochent jusqu'au moment fatidique, le tout après qu'un malheureux PNJ ai prit un objet dans un contenant ( ou autre version: "ai appuyé sur un levier" ==> le con!! )
vous remerciant a l'avance
votre serviteur Mamoula,
Âme errante des Limbes .
La vie est une Chose , la mort est un Fait.

#2 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 25 septembre 2006 - 17:58

Déja, pour les murs plein de pointes ca ne vas pas tre possible, parce que morro ne gère pas les collisions verticales. Mais pour un plafond plein de pointes qui s'abaissent, c'est possible.

je part du principe que le piege est fatal, c'est a dire que le PJ meure à tous les coups ( qui qui permet d'éviter l'emplois d'un timer )

Sur le container, il faut mettre ce script: (tribunal requi)

 if ( getItemCount "nom de ton objet" == 0 )
;pour detecter si l'objet à été volé

set state to 1

endif

If ( state == 1 )

"nom de ton plafond mouvant"->Move Z xxx
;le plafond s'abaisse, xxx étant la distance parcourue en une seconde (valeur négative)
  
if ( "nom de ton plafond"->GetCollidingPC == 1 )
; detecte si le PJ est en contact avec les pointes

 "nom de ton plafond" -> HurtCollidingActor, 999999
; le PJ est tué instantanément.

endif
endif

end

Tu peut aussi ajouter des sons grace à la fonction "Playsound"

EDIT: ne pas oublier de déclarer les variables

Modifié par Von Zeeple, 25 septembre 2006 - 18:01.

Le Steampunk, c'est bon, mangez en  !

#3 mamoula

mamoula

Posté 26 septembre 2006 - 16:01

exactement ce que je cherchait ! merci a toi...
tu es certain qu'en prenant par exemple le meshes de tribunal ( piege de pointes vu dans Sotha sil), en le combinant avec un bloc carré quelconque, le tout bougeant sur un axe horizontale de valeur commune, ca ne marcherait pas? car c'était l'une de mes prévision....
en tout cas merci quand même!  :green:
La vie est une Chose , la mort est un Fait.

#4 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 26 septembre 2006 - 16:41

Pas de probleme, il suffit d'ajouter "ID_des_piques"->Move z xxx
Le Steampunk, c'est bon, mangez en  !

#5 mamoula

mamoula

Posté 26 septembre 2006 - 16:59

parfait! merci encore cher Von Zeeple...
La vie est une Chose , la mort est un Fait.

#6 Vardac

Vardac

Posté 26 octobre 2006 - 12:53

Begin PT_dale_piège_01

if ( GetStandingActor == 1 )
	"PT_pieu001"->MoveWorld z -1000
	"PT_pieu002"->MoveWorld z -1000
	"PT_pieu003"->MoveWorld z -1000
	"PT_pieu004"->MoveWorld z -1000
	"PT_pieu005"->MoveWorld z -1000
	"PT_pieu006"->MoveWorld z -1000
	"PT_pieu007"->MoveWorld z -1000
	"PT_pieu008"->MoveWorld z -1000
	"PT_pieu009"->MoveWorld z -1000
	"PT_pieu0010"->MoveWorld z -1000
	"PT_pieu0011"->MoveWorld z -1000
	"PT_pieu0012"->MoveWorld z -1000
	"PT_pieu0013"->MoveWorld z -1000
	"PT_pieu0014"->MoveWorld z -1000
	"PT_pieu0015"->MoveWorld z -1000
	"PT_pieu0016"->MoveWorld z -1000
	"PT_pieu0017"->MoveWorld z -1000
	"PT_pieu0018"->MoveWorld z -1000
	"PT_pieu0019"->MoveWorld z -1000
	"PT_pieu0020"->MoveWorld z -1000
	"PT_pieu0022"->MoveWorld z -1000
	"PT_pieu0023"->MoveWorld z -1000
	"PT_pieu0024"->MoveWorld z -1000
	"PT_pieu0025"->MoveWorld z -1000
	"PT_pieu0026"->MoveWorld z -1000
	"PT_pieu0027"->MoveWorld z -1000
	"PT_pieu0028"->MoveWorld z -1000
	"PT_pieu0028"->MoveWorld z -1000
	"PT_pieu0029"->MoveWorld z -1000
	"PT_pieu0030"->MoveWorld z -1000
	"PT_pieu0031"->MoveWorld z -1000
	"PT_pieu0033"->MoveWorld z -1000
	"PT_pieu0034"->MoveWorld z -1000
	"PT_pieu0035"->MoveWorld z -1000
	"PT_pieu0036"->MoveWorld z -1000
	"PT_pieu0037"->MoveWorld z -1000
	"PT_pieu0038"->MoveWorld z -1000
	"PT_pieu0039"->MoveWorld z -1000
	"PT_pieu0040"->MoveWorld z -1000
	"PT_pieu0041"->MoveWorld z -1000
	"PT_pieu0042"->MoveWorld z -1000
	"PT_pieu0043"->MoveWorld z -1000
	"PT_pieu0044"->MoveWorld z -1000
	"PT_pieu0046"->MoveWorld z -1000
	"PT_pieu0047"->MoveWorld z -1000
	"PT_pieu0048"->MoveWorld z -1000
	"PT_pieu0049"->MoveWorld z -1000
	"PT_pieu0050"->MoveWorld z -1000
	"PT_pieu0051"->MoveWorld z -1000
	"PT_pieu0052"->MoveWorld z -1000
	"PT_pieu0053"->MoveWorld z -1000
	"PT_pieu0055"->MoveWorld z -1000
	"PT_pieu0056"->MoveWorld z -1000
	"PT_pieu0057"->MoveWorld z -1000
	"PT_pieu0058"->MoveWorld z -1000
	"PT_pieu0059"->MoveWorld z -1000
	"PT_pieu0060"->MoveWorld z -1000
	"PT_pieu0061"->MoveWorld z -1000
	"PT_pieu0062"->MoveWorld z -1000
	"PT_pieu0063"->MoveWorld z -1000
	"PT_pieu0064"->MoveWorld z -1000
	"PT_pieu0065"->MoveWorld z -1000
	"PT_mur_daedric01"->MoveWorld z -1000
	"PT_mur_daedric03"->MoveWorld z -1000
	"PT_mur_daedric04"->MoveWorld z -1000
	"PT_mur_daedric05"->MoveWorld z -1000
	"PT_dale_piège"->playsound, "rock and roll"
  endif
endif

end

Voilà mon script il marche mais les pique décente de 1000 unité d'un coup, moi je voudrait qu'il déscente progressivement pour qu'on est le temps de courir,
Car ils tombe quand on marche sur une dale donc si on ne peut pas courir c'est pas drôle  :green: , vous êtes dacord avec moi  :huhu:  :)

#7 chef

chef

Posté 26 octobre 2006 - 16:07

tu dois inserer un timer.

begin PT_dale_piège_01

float timer
short go

if ( go == 0 )
if ( GetStandingActor == 1 )

set go to 1

endif
endif

if ( go == 1 )

set timer to ( timer + getsecondspassed )

if ( timer >= 5 )
set go to 2
set timer to 0
endif

	"PT_pieu001"->MoveWorld z -200; change par -200, il desendra de 200 unitée/secondes 
	"PT_pieu002"->MoveWorld z -200; en 5sec sa fait 1000 ^^ 

	[...]

	"PT_mur_daedric05"->MoveWorld z -200
	"PT_dale_piège"->playsound, "rock and roll"

endif

end

Si tu ne fait que des déplacement en z tu peux utiliser move tout court...

Team Stargate



"Si vous traversez l'enfer, ne vous y arrêtez pas." - Wiston Churchill


#8 Vardac

Vardac

Posté 26 octobre 2006 - 17:50

 chef, le 26.10.2006 à 16:07, dit :

tu dois inserer un timer.

begin PT_dale_piège_01

float timer
short go

if ( go == 0 )
if ( GetStandingActor == 1 )

set go to 1

endif
endif

if ( go == 1 )

set timer to ( timer + getsecondspassed )

if ( timer >= 5 )
set go to 2
set timer to 0
endif

	"PT_pieu001"->MoveWorld z -200; change par -200, il desendra de 200 unitée/secondes 
	"PT_pieu002"->MoveWorld z -200; en 5sec sa fait 1000 ^^ 

	[...]

	"PT_mur_daedric05"->MoveWorld z -200
	"PT_dale_piège"->playsound, "rock and roll"

endif

end

Si tu ne fait que des déplacement en z tu peux utiliser move tout court...

Ok merci (je fais des déplacements en z).

Je voulais savoir si s'était possible de faire un piège qui fait :

Quand on marche sur une dale, une pierre sort du plafon et roule sur nous, et nous écrase sauf si on se cache a temps dans la petite corniche  :green:  :green:

Ou sinon j'ai un script de piège à vous proposer :


Begin PT_dale_piège_02

if ( GetStandingActor == 1 )
	"PT_fléchettes00"->MoveWorld x -10000
	"PT_fléchettes01"->MoveWorld x -10000
	 [...]

endif

end


Et pour finir , et ce que on pourais faire des qu'on marche sur une dalle un "micil" a tête chercheuse sort d'un trou et nous "cour" après, c'est diabolique non  :twisted:  :twisted:

Modifié par Vardac, 26 octobre 2006 - 17:52.


#9 chef

chef

Posté 26 octobre 2006 - 20:11

Pour la pierre qui roule y a moyen oui. Pour les flechettes moins, morrowind ne gere pas les colisions apres un move en x ou y. Donc je sais pas. Pour le missile ça me parait un peu foireux...

Ensuite, tu n'es pas obligé de crée pleins d'id, par exemple pour les pointes dans le plafond, une seul aurait suffit. Il suffisait d'utiliser une variable gloabale...

Variable de gloable : Mod_go


sur l activator :
begin PT_dale_piège_01

float timer

if ( go == 0 )
if ( GetStandingActor == 1 )

set go to 1

endif
endif

if ( go == 1 )


set Mod_go to 1

set timer to ( timer + getsecondspassed )

if ( timer >= 5 )
set go to 2
set Mod_go to 0
set timer to 0
endif


endif

end


sur les pointes : (id unique, plusieur pointe sur la map)
begin PT_dale_piège_02

if ( Mod_go == 0 )
return
endif

if ( Mod_go == 1 )

move z 200

endif


Ce qui te permet d'éviter de crée 65 pieu différent, et tu place le meme script sur tout les objet devant dessendre...

Team Stargate



"Si vous traversez l'enfer, ne vous y arrêtez pas." - Wiston Churchill


#10 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 27 octobre 2006 - 11:38

pour le missile à tête chercheuse le plus simple serait un sort genre boule de feu sur le pj, mais il peut l'éviter en se déplacant. Plus "drole" serait de faire une créature avec un mesh de missile et un script qui fait qu'il explose dès qu'il touche le PJ ou qu'il est blessé, comme dans le mod kamikaze.
Le Steampunk, c'est bon, mangez en  !

#11 Vardac

Vardac

Posté 27 octobre 2006 - 12:57

Ouai le missile c'est une bonne idée, j'y songerai.
Et pour la pierre j'avais imaginé un truc du genre, on la fait tourner sur elle même puis on la fait avancer en Y dans le couloir.
pendant 20000 unité pour qu'elle s'arrète devant le mur pour faire genre que c'est le mur qui l'a arrété, et pendant qu'elle roule on utilise le script de la chambre de logan du tramblement de terre se serais cool non.
Et les fléchettes sa marche j'ai esséyé, sauf qu'elle traverse le mur du couloir d'enface, mais sa le fait quand même.

Voilà Salut

#12 Von Zeeple

Von Zeeple

    Grille pain Dwemer


Posté 27 octobre 2006 - 19:47

Citation

Et les fléchettes sa marche j'ai esséyé, sauf qu'elle traverse le mur du couloir d'enface, mais sa le fait quand même.

Ajoute un timer pour qu'elles s'arretent sur le mur + un disable sur celles qui ont touché le PJ

sinon je n'ai pas compris comment fonctionnait le script du tremblement de terre de la chambre...
Le Steampunk, c'est bon, mangez en  !

#13 Vardac

Vardac

Posté 28 octobre 2006 - 07:41

 Von Zeeple, le 27.10.2006 à 19:47, dit :

Citation

Et les fléchettes sa marche j'ai esséyé, sauf qu'elle traverse le mur du couloir d'enface, mais sa le fait quand même.

Ajoute un timer pour qu'elles s'arretent sur le mur + un disable sur celles qui ont touché le PJ

sinon je n'ai pas compris comment fonctionnait le script du tremblement de terre de la chambre...

Le script dans la chambre bas moi non plus en fait c'est Nadja qui me l'a dit dans le sujet Tremblement de terre

Et sinon pour la pierre vous trouvez que c'est une bonne idée ou pas ? :P

@+

#14 Vardac

Vardac

Posté 10 novembre 2006 - 20:14

Pour le missil à tête chercheuse j'ai trouvé un script, sur un topic, je garanti pas le résultat car je ne l'ais pas encore testé.

Scipt de missile a tete chercheuse

Begin 0HR_Soin
short range;en dessous de cette distance, enclenchement
short initialized;initialisation des variable
short distance
short detonate;esplosion
short declenche;après explosion
float joueurx;X du joueur
float joueury;Y du joueur
float joueurz;Z du joueur
float decalagex;Decalage entre le x du joueur et le x de l'objet
float decalagey;Decalage entre le y du joueur et le y de l'objet
float decalagez;Decalage entre le z du joueur et le z de l'objet
float currdecalage
float currx;positionX au moment donné
float curry;positionY au moment donné
float currz;positionZ au moment donné
float totaldist;Distance total
float rate;vitesse
float killtimer;timer avant deletation

If ( declenche == 1 );si il a ete declanche
If ( killtimer < 4 );on atten 4 secondes
Set killtimer to ( killtimer + GetSecondsPassed )
Else
SetDelete 1; et on supprime
Endif
Return
Endif

If ( MenuMode == 1 )
Return
Endif

If ( initialized == 0 );Si jamais initialisé
Set initialized to 1;Empèche une boucle
Set range to 20;Distance pour explosion à 20
Set rate to 400;vitesse
Endif
Set joueurx to ( player->GetPos X );Prise de position du Joueur
Set joueury to ( player->GetPos Y )
Set joueurz to ( player->GetPos Z )
Set joueurz to ( joueurz + 30 )
Set decalagex to ( joueurx - GetPos X );Calcul du décalage
Set decalagey to ( joueury - GetPos Y )
Set decalagez to ( joueurz - GetPos Z )
;Calcul de la distance
Set totaldist to ( ( decalagex * decalagex ) + ( decalagey * decalagey ) + ( decalagez * decalagez ) )
Set totaldist to GetSquareRoot totaldist
If ( totaldist != 0 )
Set decalagex to ( decalagex / totaldist )
Set decalagex to ( decalagex * rate )
Set decalagey to ( decalagey / totaldist )
Set decalagey to ( decalagey * rate )
Set decalagez to ( decalagez / totaldist )
Set decalagez to ( decalagez * rate )
Else
Set declenche to 1
Endif
;Endif

Set distance to GetDistance "player"
If ( distance < range )
Set detonate to 1
Else
Set currx to GetPos X
Set curry to GetPos Y
Set currz to GetPos Z

Set currdecalage to ( decalagex * GetSecondsPassed )
Set currx to ( currx + currdecalage )

Set currdecalage to ( decalagey * GetSecondsPassed )
Set curry to ( curry + currdecalage )

Set currdecalage to ( decalagez * GetSecondsPassed )
Set currz to ( currz + currdecalage )

If ( decalagex < 0 )
If ( currx < joueurx )
Set detonate to 1
Set currx to joueurx
Else
Set detonate to 0
Endif
Else
If ( currx > joueurx )
Set detonate to 1
Set currx to joueurx
Else
Set detonate to 0
Endif
Endif

If ( decalagey < 0 )
If ( curry < joueury )
Set detonate to 1
Set curry to joueury
Else
Set detonate to 0
Endif
Else
If ( curry > joueury )
Set detonate to 1
Set curry to joueury
Else
Set detonate to 0
Endif
Endif

If ( decalagez < 0 )
If ( currz < joueurz )
Set detonate to 1
Set currz to joueurz
Else
Set detonate to 0
Endif
Else
If ( currz > joueurz )
Set detonate to 1
Set currz to joueurz
Else
Set detonate to 0
Endif
Endif

SetPos X currx
SetPos Y curry
SetPos Z currz
Endif

If ( detonate == 1 )
ExplodeSpell "HR_spell_soin"
Set declenche to 1
Disable
Endif

End

Voilà




0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)