Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Comme d'hab, trop hard pour moi

Par Le Hamster le 8/9/2002 à 17:14:13 (#2120331)

Comment réaliser l'effet suivant ?

Une salle avec une seule porte. Dans un coin de la salle, 4 pilones (ceux avec un feu au pied, activables donc).

J'aimerais qu'à l'ouverture de la porte, apparaisse entre les pilones une méchante battle horror qui se rend à un endroit précis. Puis toutes les 15 secondes, apparition d'une autre battle horror et ce jusqu'à ce qu'un PJ éteigne les 4 pilones !

Il y a ça dans la campagne solo, avec des méphrites, mais un, je sais plus où et deux de toute façon, même si je trouve l'endroit je comprendrais rien aux divers scripts. Voilà voilà.

Bises à toutes et à tous

Par miriandel le 8/9/2002 à 18:49:48 (#2120921)

A vue de nez, vu que je viens de griffoner ce script, tu places dans le onuserdefined de ton premier pylône:


void main() {
int nUser = GetUserDefinedEventNumber();
if(nUser == 1000) {
int i=1;
int eteint = TRUE;
object lmp = OBJECT_SELF;
while (GetIsObjectValid(lmp)) {
if (GetPlaceableIllumination(lmp)) eteint = FALSE;
lmp = GetObjectByTag("monPylone", i++);
}
if (!eteint) { //calculer un point de spawn aléatoire à partîr du pylône
vector mypos = GetPosition(OBJECT_SELF);
vector gVector = Vector(mypos.x + Random(7), mypos.y + Random(7), 0.0f);
location loc = Location(GetArea(OBJECT_SELF), gVector, 0.0f);
CreateObject(OBJECT_TYPE_CREATURE, "nw_bathorror", loc);
DelayCommand(15.0, SignalEvent(OBJECT_SELF, EventUserDefined(1000)));
}
}
}

Il te suffit de déclencher le onuserdefined te ton pylône lorsque le PJ passe la porte, et toutes les 15 secondes un nouveau check interviendra.
Tu peux souhaiter tester si un monstre est déjà présent avant de provoquer un autre spawn si tu veux éviter d'inonder ta pièce :)

Bravo

Par Jedaï le 8/9/2002 à 22:11:29 (#2122557)

Mais je pense que tu devrais écrire "int i = 0" au lieu de "int i = 1", ce n'est qu'un point de détail mais je crois que sinon il ne vérifiera que trois pylones.

Re: Bravo

Par Amaranthe le 8/9/2002 à 22:18:11 (#2122607)

Provient du message de Jedaï
Mais je pense que tu devrais écrire "int i = 0" au lieu de "int i = 1", ce n'est qu'un point de détail mais je crois que sinon il ne vérifiera que trois pylones.


Non non... Miriandel a tout a fait raison..

int i = 1.

Amaranthe.

Par Jedaï le 8/9/2002 à 22:42:27 (#2122759)

OK mais dans ce cas pourquoi le GetObjectByTag a-t-il comme paramètre par défaut nNth = 0 et pas nNth = 1 ?
Le 0 impliquerai-t-il alors un choix aléatoire parmi les objets "taggés" ? J'avais toujours cru que comme pour un tableau en C les tags commençaient à 0.

Par Kemay le 9/9/2002 à 6:48:07 (#2123949)

Jedai a raison, les tags commencent à 0. Ceci dit, c'est un joli script mais je ne pense pas que ce soit une bonne idée d'utiliser l'illumination du placeable pour savoir si le PC a effectivement cliqué dessus ou pas, principalement en raison du bug des placeables illuminés qui ne sont pas toujours créés tels qu'ils devraient l'être et, à ma conaissance, ce bug n'a pas encore été fixé. L'autre chose c'est que je ne comprends pas pourquoi faire une localisation aléatoire du spawn:

apparaisse entre les pilones une méchante battle horror qui se rend à un endroit précis
le plus simple me semble de faire 2 scripts :
1 à placer dans l'event onUsed de chacun des 4 pylônes:
void main()
{
if( GetLocalInt(OBJECT_SELF,"Used") == FALSE )
{
SetLocalInt(OBJECT_SELF,"Used",TRUE);
int nPylone = GetLocalInt(GetArea(OBJECT_SELF),"Pylone")+1;
SetLocalInt(GetArea(OBJECT_SELF),"Pylone",nPylone);
}
}

l'autre dans l'event onOpen de la porte
Il faut placer un Waypoint à l'endroit où tu veux que les battle horrors apparaissent et remplacer "Tag_Spawn_WP" par le tag de ce waypoint. Placer un autre waypoint où tu veux que la battle horror se rende après être apparue et remplacer "Tag_Dest_WP" par le tag de waypoint. Enfin, remplacer "Nom_de_ce_script" par le nom sous lequel tu enregistres ce script.
void main()
{
if( GetLocalInt(GetArea(OBJECT_SELF),"Pylone") < 4 )
{
location lSpawn = GetLocation(GetWaypointByTag("Tag_Spawn_WP"));
object oBattleHorror = CreateObject(OBJECT_TYPE_CREATURE, "nw_bathorror", lSpawn);
object oDest = GetWaypointByTag("Tag_Dest_WP");
AssignCommand(oBattleHorror,ActionMoveToObject(oDest));
DelayCommand(15.0,ExecuteScript("Nom_de_ce_script",OBJECT_SELF));
}
}

Par Amaranthe le 9/9/2002 à 8:14:52 (#2124093)

Provient du message de Jedaï
OK mais dans ce cas pourquoi le GetObjectByTag a-t-il comme paramètre par défaut nNth = 0 et pas nNth = 1 ?
Le 0 impliquerai-t-il alors un choix aléatoire parmi les objets "taggés" ? J'avais toujours cru que comme pour un tableau en C les tags commençaient à 0.


Autant pour moi...

Désolée ;)

Amaranthe.

Petit complément

Par Le Hamster le 9/9/2002 à 11:09:00 (#2124555)

Merci Kemay, les monstres sont bien générés, il apparaissent où il faut, vont où il faut. Mais il reste un petit pb.

Quand les 4 pylones (merci pour le y, j'avais mis des i dans mon premier post, j'ai honte) sont désactivés ou détruits, je voudrais que le phénomène des apparitions de monstres s'arrête. Quand il n'y en a qu'un ou deux ou trois désactivés, ça continue.

Bises à toutes et à tous

Par miriandel le 9/9/2002 à 16:38:46 (#2126695)

Provient du message de Kemay
je ne comprends pas pourquoi faire une localisation aléatoire du spawn


Mais bien sûr, vive AC où tu attends le spawn du monstre à l'endroit et l'heure précisément planifiés pour enfoncer la touche attaque.

Mais enfin, c'est bien que tu sois là pour reprendre les aides des autres, ça m'évitera de perdre du temps à l'avenir :p

Re: Petit complément

Par Kemay le 10/9/2002 à 0:48:16 (#2129386)

Provient du message de Le Hamster
Quand les 4 pylones (merci pour le y, j'avais mis des i dans mon premier post, j'ai honte) sont désactivés ou détruits, je voudrais que le phénomène des apparitions de monstres s'arrête.
Je viens de tester et le phénomène d'apparition s'arrête quand le joueurs a cliqué sur chacun des quatre pylones :) Par contre pour que la destruction des pylones ait le même effet, il faut simplement que tu attaches le même script que celui du onUsed à l'event onDeath du pylone.

JOL Archives 1.0.1
@ JOL / JeuxOnLine