Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Comme d'hab, trop hard pour moi
Comme d'hab, trop hard pour moi
Par Le Hamster le 8/9/2002 à 17:14:13 (#2120331)
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)
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)
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)
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)
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)
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
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.
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.
JOL Archives 1.0.1
@ JOL / JeuxOnLine