JeuxOnLineForumsPlusConnectés : 512 (sites) | 932 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Random, aléatoire, au hasard quoi ! RSS
   
Répondre
Partager Outils Rechercher
Avatar de Acidamere
Acidamere
Alpha & Oméga
 
Avatar de Acidamere
 

Random, aléatoire, au hasard quoi !

Bien, voilà, j'ai cherché de partout un script permettant de faire spawner une créature ou un pnj à une location aléatoire, mais je n'ai pas trouvé. Alors j'ai fais la chose suivante, mais j'ai besoin d'aide pour le compléter ; en effet, je n'entrave que dalle aux fonctions de random, et j'ignore totalement comment faire pour que ma bestiole spawn au WP_01, 02 etc... jusqu'au 05

Code PHP:
//A mettre sur le OnEnter d'un trigger pour faire spawner un daim à en WP aléatoire
void main()
{

object oPC GetEnteringObject();

if (!
GetIsPC(oPC)) return;

object oTarget;
object oSpawn;
oTarget GetWaypointByTag("WP_01");

// Là normalement il devrais y avoir quelque chose introduisant la notion d'aléatoire, mais quoi ?
oSpawn CreateObject(OBJECT_TYPE_CREATURE"daim01"GetLocation(oTarget));

oTarget oSpawn;

AssignCommand(oTargetActionStartConversation(oPC"dl_daim01"));

oTarget oSpawn;

ApplyEffectAtLocation(DURATION_TYPE_INSTANTEffectVisualEffect(VFX_IMP_POLYMORPH), GetLocation(oTarget));


Alors si une âme charitable pouvait me modifier ce script et m'expliquer le pourquoi du comment de la chose, ça serait MMMMMMMerveilleux !

Lien direct vers le message - Vieux
Avatar de mobidique
mobidique
Alpha & Oméga
 
Avatar de mobidique
 
Un truc comme ça ?
Code PHP:
    object oTarget GetNearestObjectByTag("WP_" IntToString(d3())); 
Il faut que tes waypoints s'appellent WP_1, WP_2, ... WP_10 etc. Ce qui au demeurant et la manière de numéroter de l'editeur quand aprés avoir fait tes wp, tu les séléctionnes tous et tu fais une série. Aprés je ne sais pas combien de fonction dX() existent, mais comme il existe un fonction d100 tu dois pouvoir faire exactement celle que tu veux avec un peu de calcul ...
Lien direct vers le message - Vieux
Avatar de mobidique
mobidique
Alpha & Oméga
 
Avatar de mobidique
 
Re: Random, aléatoire, au hasard quoi !
Citation:
Provient du message de Fröhnir
Code PHP:
//A mettre sur le OnEnter d'un trigger pour faire spawner un daim à en WP aléatoire
void main()
{

object oPC GetEnteringObject();

if (!
GetIsPC(oPC)) return;

object oTarget;
object oSpawn;
oTarget GetNearestObjectByTag("WP_" IntToString(d3()));

oSpawn CreateObject(OBJECT_TYPE_CREATURE"daim01"GetLocation(oTarget));

// je ne trouve pas trés sain de renomer ton spawn oTarget quand oTarget a été défini différemment
// auparavant ... 
oTarget oSpawn;

AssignCommand(oTargetActionStartConversation(oPC"dl_daim01"));

// J'dois êt' niais ... Ca sert à quoi ça dessous ? Cette nouvelle affection ?
oTarget oSpawn;

ApplyEffectAtLocation(DURATION_TYPE_INSTANTEffectVisualEffect(VFX_IMP_POLYMORPH), GetLocation(oTarget));


Mon code serait le suivant :
Code PHP:
//A mettre sur le OnEnter d'un trigger pour faire spawner un daim à en WP aléatoire
void main()
{

    
object oPC GetEnteringObject();

    if (!
GetIsPC(oPC)) return;

    
object oTarget;
    
object oSpawn;
    
oTarget GetNearestObjectByTag("WP_" IntToString(d3()));
    
oSpawn CreateObject(OBJECT_TYPE_CREATURE"daim01"GetLocation(oTarget));

    
AssignCommand(oSpawnActionStartConversation(oPC"dl_daim01"));
    
ApplyEffectAtLocation(DURATION_TYPE_INSTANTEffectVisualEffect(VFX_IMP_POLYMORPH), GetLocation(oSpawn));


Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Voila.

Sinon, on peut aussi creer la localisation totalement au hasard... mais a ca à un inconvenient majeur si ta zone est surelevée par endroits (bosses / monticules / etc), que tu crée un monstre a l'altitude normale, il sera invisible... (il va être jouable, combatable et tuable, mais invisible, car spawné sous le sol...)
Lien direct vers le message - Vieux
Avatar de Acidamere
Acidamere
Alpha & Oméga
 
Avatar de Acidamere
 
Bah que dire sinon un grand MERCI !

Citation:
Code PHP:
// J'dois êt' niais ... Ca sert à quoi ça dessous ? Cette nouvelle affection ?
oTarget oSpawn
Euh, c'est vrai ça, pourquoi j'ai mis ça là déjà
Faut dire que la scriptation n'est pas un état naturel chez moi, ça demande ENORMEMENT d'efforts intellectuels...

Et euh... comment on fait pour faire spawner aléatoirement différentes bestioles ? (genre un ours, un sanglier et un cerf...) à différents WP aléatoires eux aussi... (histoire de corser la partie de chasse et que chaque participant ne ramène pas forcément le même trophé...)
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Code PHP:
string sRandResRef(in nNb 3)
{
nNb nNb+1;
switch 
nNb
    
{
    case 
1:return "ours";
    case 
2:return "loup";
    case 
3:return "galinette_cendree";    
//Bien sur, tu modifie le nNb par defaut et le nombre de case a loisir ^^
    
}
return 
"nw_badger";

a mettre avant ton void main(), puis utilise la nouvelle fonction que tu viens de creer a la place du resref...
Lien direct vers le message - Vieux
Avatar de Acidamere
Acidamere
Alpha & Oméga
 
Avatar de Acidamere
 
Ah oui, je vas essayer ça ce soir ^^

Lien direct vers le message - Vieux
Avatar de Nek
Nek
Alpha & Oméga
 
Avatar de Nek
 
Juste comme ça en passant, pourquoi tu n'utilises pas une "Rencontre" en mettant plein de spawns différents (flèches violettes, clic droit dans l'éditeur) et en ajoutant les différentes créatures que tu veux voir apparaitre ?

Parce que ce que tu cherches à faire avec ton script, Bioware l'offre tout fait avec un assistant et tout et tout
Lien direct vers le message - Vieux
Avatar de mobidique
mobidique
Alpha & Oméga
 
Avatar de mobidique
 
A titre de témoignage je me suis énervé un petit moment pour faire spawner des bestioles différentes en quantités différentes en des spots différents, pour un même perso déclencheur. Peine perdu ... j'avais toujours 3 blaireaux au même endroit. J'ai du m'énerver une demi heure, certes. En l'occurrence un petit script au final pas si compliqué que cela fait exactement ce que tu veux ... alors ... Mais dans l'idéal c'est sûr qu'il est préférable d'utiliser autant que possible les outils tout prêt de l'éditeur, ce que j'ai toujours essayé de faire.
Lien direct vers le message - Vieux
Avatar de Acidamere
Acidamere
Alpha & Oméga
 
Avatar de Acidamere
 
Ah ? Ben en fait je n'ai jamais trouvé le moyen de localiser les spawn des rencontres. Je croyais que les bébêtes apparaissaient toujours au même endroit DANS le trigger et là je voulais qu'un seul gibier apparaissent dans un endroit aléatoire sur TOUTE la carte, donc voilà, mais effectivement si il est possible de localiser différents WP de spawn grace aux rencontre, alors c'est vrai que c'est plus simple...

*part se flageller dans un coin...*
Lien direct vers le message - Vieux
Avatar de Taern
Taern
Alpha & Oméga
 
Avatar de Taern
 
Citation:
mais a ca à un inconvenient majeur si ta zone est surelevée par endroits (bosses / monticules / etc), que tu crée un monstre a l'altitude normale, il sera invisible
Ben après avoir testé, je me suis rendu compte que seuls les plaçables peuvent être créés à une altitude différente de celle du sol. Donc non les créatures apparaissent toujours bien sur le terrain (et sur le walkmesh normalement), à moins que je me soit trompé

A propos du sujet, ben juste un petit rajout : la fonction Random(int i) permet d'obtenir un entier aléatoire appartenant à [0;i[. (entre 0 et i-1 quoi )
En clair les fonctions dX() sont des raccourcis de cette fonction, donc à toi de voir si tu peux les utiliser, et sinon -> Random()

Et arrête donc de te flageller pour rien, l'éditeur permet de spécifier à quel endroit les monstres de la rencontre doivent apparaitre (par défaut c'est en dehors du champ de vision du PJ), mais il ne permet pas de créer une location de spawn aléatoire
Lien direct vers le message - Vieux
Avatar de eMRaistlin
eMRaistlin
Alpha & Oméga
 
Avatar de eMRaistlin
 
Citation:
Ben après avoir testé, je me suis rendu compte que seuls les plaçables peuvent être créés à une altitude différente de celle du sol. Donc non les créatures apparaissent toujours bien sur le terrain (et sur le walkmesh normalement), à moins que je me soit trompé
Alors je te propose une experience sympa ^^

Essaye de mettre un Waypoint pile a un endroit un peu en pente (genre, avec le smooth hill, mais y'a des fois ou les terrains sont un peu en pente avec les terrains de base), et ce, du premier cop (car si tu deplace un WP, il se recalque bien sur le sol quand tu le repose).

Un peu comme pour la manip pour empiler des placeable.

Puis, fait spawner une creature sur ce WP.

Parfois (pas toujours... oO), tu va obtenir une creature invisible...

Si en plus tu en fait spawner plusieur, l'auto-replacement augmente le risque.

Ceci etant, il te suffit de recliquer sur le WP dans le toolset pour regler ce petit pb, donc ce n'est rien ^^
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Pour tes waypoints :

Code PHP:
location Waypoint(int nWPNumberstring sWPTag="WP_")
{
int nWP=Random(nWPNumber+1);
string sWP=sWPTag+IntToString(nWP);
location lLoc=GetLocation(GetWaypointByTag(sWP));
return 
lLoc;

Tu mets cette fonction en debut de script et elle te spawnera tes machins a des endroits differents. Attention, le premier waypoint doit s'appeler WP_0, le 2e WP_1, etc... Ca te retourne direct la location.
Tu peux aussi lui dire d'utiliser un autre nom de waypoint, en utilisant sWPTag. Ca te permet en gros de n'avoir qu'une ligne de code a chaque fois si tu veux spawner plusieurs types de creatures, chacun a des WP particuliers.
Lien direct vers le message - Vieux
Avatar de Slay
Slay
Roi
 
Avatar de Slay
 
Moi pour choisir un waypoint je ferais plutot comme ca :
Code PHP:
object oWaypoint GetFirstObjectInArea();
int nb_waypoints 0;
string sTag;

while (
GetIsObjectValid(oWaypoint))
{
    
sTag GetTag(oWaypoint);
    if (
sTag == "Random_Spawn"nb_waypoints++;
    
oWaypoint GetNextObjectInArea();
}

int WP_number Randomnb_waypoints );
object oTarget GetObjectByTag"Random_Spawn"WP_number ); 
Cela permet d'avoir un tag unique pour tout les waypoint (Random_Spawn dans cet exemple), et comme ils sont comptés on peu en mettre autant qu'on veut sans retoucher au script...
Lien direct vers le message - Vieux
Avatar de Zunzun
Zunzun
Alpha & Oméga
 
Avatar de Zunzun
 
Ouép pas mal, en mettant la possibilité de déclarer le début du string dans la fonction histoire de pas avoir a la refaire pour chaque tag je pense que ca donne la meilleure solution.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Random, aléatoire, au hasard quoi !
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 01h22.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite