Faire apparaître aléatoirement un effet ?

Répondre
Partager Rechercher
Est-il possible de faire apparaître un ou plusieurs effets, aléatoirement dans une zone, au niveau du sol par exemple ?

Pour que cela soit vraiment aléatoire, je cherche à le faire sans l'utilisation des waypoints.

Merci
Oui : il te suffit de declarer ta location.


Si tu veux une location aleatoire :

Code PHP:

float fX IntToFloat(Random(nXMax)+1.0);
float fY IntToFloat(Random(nYMax)+1.0);
vector vLoc Vector(fX,fY,1.0);
location lRandomLoc Location(GetArea(OBJECT_SELF),vLoc,1.0); 
en mettant la taille de ta zone dans nXMax et nYmax.
Tu insere ceci dans ton script, et tu fais apparaitre ton effet a cette location lRandomLoc.


Pour l'effet visuel (et juste visuel) random, tu peux faire ca :
Code PHP:

effect eVFX EffectVisualEffect(Random(346)+1); 

certains des 346 effets speciaux ne declencheront rien, mais sur la masse, ca ne fera pas plus de 1/10.

Donc, tu peux combiner les deux a loisir ^^

[Edit = Correction : Merci Jedaï]
Bien sûr, il te suffit d'utiliser des "vector" avec des coordonnées aléatoires (Random() ) pour construire des "location" dans ta zone avec la fonction Location().
Ensuite tu utilise ApplyEffectToLocation() (ou AtLocation, j'sais plus ).

[Edit] eM m'as grillé et en plus il donne des exemples !
Pour me venger je dirais que je pense que Location() exige l'area où l'on crée cette location.
Je remonte ce post des oubliettes pour ajouter ceci :

Dans le même genre,
Est-il possible de faire apparaître un effet aléatoirement dans un trigger ? (toujours sans waypoint)

Merci
Oui, mais c'est plus dur. Ca dépend essentiellement de la forme du trigger.Tu devras diviser ton trigger si sa forme est autre qu'un rectangle en triangles rectangles et en rectangles, afin de créer des zones manipulables... Faire apparaître un effet dans un trigger consiste à limiter la zone d'effet de génération C'est un script compliqué, je ne pense pas qu'il y ait plus simple. Sache qu'il est beaucoup plus simple de travailler avec un trigger rectangle, ou un trigger composé de rectangles... Sinon tu dois diviser en triangles rectangles, et la génération dans un triangle rectangle convient à impose un max abscisse+ordonnée d'un côté et un max abcisse et ordonnée de l'autre. Je suis incompréhensible probablement, mais je me comprends, et c'est l'essentiel, puisque c'est moi qui vais faire le script si tu en as besoin
Je souhaiterais être corrigé, ce n'est pas un script facile

Tout d'abord, voici le premier script, "io_gen_rdmloc", qui permet d'avoir accès à une fonction nommée GenerateRandomLocation().
Code PHP:

//  io_gen_rdmloc  //
// fichier include //

//::///////////////////////////////////////////////
//:: GenerateRandomLocation
//:: Copyright (c) 2001 Bioware Corp.
//:://////////////////////////////////////////////
/*

 Cette fonction cree une location aleatoire dans une zone rectangle.
 Elle admet un degre de precision (entre 1 et 0.000001, et inferieur),
 et admet un bon nombre de parametres.

*/
//:://////////////////////////////////////////////
//:: Created By: Ange Musicien
//:: Created On: Forum Maskado - JOL
//:://////////////////////////////////////////////

// Générer aléatoirement une location dans une zone rectangle, qui peut etre une aire.
// - oArea: Aire dans laquelle est situee la zone rectangle.
// - Xmin : minimum en abscisse pour la zone
// - Ymin : minimum en ordonnee pour la zone
// - Xmax : maximum en abscisse pour la zone
// - Ymax : maximum en ordonnee pour la zone
// - fPrecision : la precision de la location. Elle est a 0.01f par defaut, mais peut
//   aller de 1 a 0.000001 ou inferieur. C'est le nombre de decimales admises pour
//   les abscisses et ordonees de la location aleatoire.
// - fZ   : hauteur de la location, par defaut 1.0
location GenerateRandomLocation(object oAreafloat Xminfloat Yminfloat Xmaxfloat Ymaxfloat fPrecision 0.01float fZ 1.0);

location GenerateRandomLocation(object oAreafloat Xminfloat Yminfloat Xmaxfloat Ymaxfloat fPrecisionfloat fZ)
{
float XdifYdiffXfYYdifPreXdifPreYdifPre2XdifPre2XmulYmul;
int nXnYnXPnYP ;
vector v;
location l;

Xdif Xmax-Xmin;
Ydif Ymax-Ymin;

XdifPre  Xdif/fPrecision;
YdifPre  Ydif/fPrecision;
XdifPre2 XdifPre 1.0;
YdifPre2 YdifPre 1.0;
nX Random(FloatToInt(XdifPre2));
nY Random(FloatToInt(YdifPre2));
Xmul IntToFloat(nX);
Ymul IntToFloat(nY);
fX Xmul*fPrecision;
fY Ymul*fPrecision;
fX fX Xmin;
fY fY Ymin;

Vector(fX,fY,fZ);
Location(oArea,v,0.0);
return 
l;

Voici un exemple d'application, ce script crée une boule de feu aléatoirement toutes les six secondes, dans un rectangle de 10x10 (placé au milieu d'une zone de 30x30). Il est placé dans le OnHeartBeat d'une zone :
Code PHP:

// OnHeartBeat //
#include "io_gen_rdmloc"
void main()
{
object oArea;
location l;
effect e;

oArea OBJECT_SELF;
GenerateRandomLocation(oArea,10.0,10.0,20.0,20.0);
EffectVisualEffect(VFX_FNF_FIREBALL);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT,e,l);

Si quelqu'un pouvais relire mon premier script
Il marche à la perfection Je l'ai testé : il permet de recréer bombardement, éclairs, et de créer une zone de spawn ce quoi augment le RP (plutôt que de spawné toujours le même monstre au même endroit )

Tu peux l'utiliser dès maintenant, je le rajoute à la liste des scripts du persistant.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés