JeuxOnLineForumsPlusConnectés : 264 (sites) | 422 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Problème script "réunion" RSS
   
Répondre
Partager Outils Rechercher
Avatar de kaliyouga
kaliyouga
Roi
 
Avatar de kaliyouga
 
Smile

Problème script "réunion"

Bonjour tous !!!

voila, j'ai encore un petit pb

J'aimerait mettre en place une petit réunion, ou il y a beaucoup de bordel. Donc ce que je voudrais faire, c'est:

- un pnj dans une salle. -> téléportation du pj dans la salle de réunion. ( ça pas de problème)

- Une fois dans la salle, le pnj doit parler au pj dès qu'il le voit (un grand dialogue s'ouvre) (ça ça me pose un pb... how to do?)

- Dans les salles il y a une grande table et des bancs. J'aimerait que tous les pnj qui s'engueulent soient sur les bancs (problème : les pnj sont des animaux, des pingouins...)

-a partir de ce moment les pnj "à table" balancent des phrases aléatoires (genre lancé d'1d10, le resultat correspond à une phrase) (how to do? ;p)

-La quête du joueur est la suivante: il doit calmer tout ce petit monde à grands coups dans la gueule ^^. Ce que j'aimerai faire, c'est que quand le pj tape un de ces pnj, il ne réagit pas et continue a balancer ses phrases, jusqu'à ce que par exemple; ses pv tombent en dessous de 100 pv là il arrête de causer et de jolis "ZzZzZzZzZ" apparaissent au dessus de sa tête (soit par dialogue, soit par sort, je ne sait pas ce qui est faisable)

-Une fois tout le monde gentiment endormi, j'aimerai que le pnj qui a filé la quête reparle directement au pj, et le récompense en objets (en sardines bien sur! ^^)


voila, si vous pouviez m'aider ca serait top, bien que mon idée soit farfelue et que je ne sait pas si c'est faisable

en fait je suis en train de faire un module "pour déconner", sur la guilde des (pg) (qui est une guilde de jeux)

voila,

merci d'avance
Lien direct vers le message - Vieux
Avatar de kaliyouga
kaliyouga
Roi
 
Avatar de kaliyouga
 
ah, c'est dur d'être une quiche :p
je sait que la je vous en demande peut etre un peu trop, mais j'aimerait au moins savoir si c'est faisable ^^

voila

merci d'avance
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Oui, c'est tout à fait faisable, c'est même assez facile, réfléchis à l'agencement de tes scripts :

* organisateur : scripts normaux pour les évènements, tous les scripts sont dans le dialogue
* participants à la réunion : deux scripts à changer (utilise les UDE si tu les maîtrises) : OnHeartBeat et OnDamaged.


Le OnHeartBeat fait l'animation et le OnDamaged vérifie les points de vie.
Pour faire la communication entre tous ces scripts (éviter par exemple que les pingouins continuent à causer après s'être effondrés), je pense qu'un double système de variable locale s'impose :
*Chaque participant à la réunion devrait avoir une variable "bAssomme" qui serait mise à TRUE par le OnDamaged, une fois atteint le seuil de PV et qui serait vérifié par le OnHeartBeat pour savoir que faire (si "bAssomme" est à TRUE, le pingouin ronfle, sinon il cause)
*Par ailleurs, il serait logique de stocker l'avancement général sur l'organisateur de la réunion : avec une variable "nNb_Assomme" qui est incrémenté par le OnDamaged à chaque fois qu'un participant s'effondre.
Cette seconde variable permettrait ainsi de déterminer si la quête est finie : le OnDamaged incrémente "nNb_Assomme" puis vérifie grâce à cette variable si tous les participants ont été assommés, si c'est le cas, il ordonne au pingouin organisateur de venir causer au PJ.

La conversation du pingouin organisateur devra être structurée ainsi :
*première conversation avec le PJ ("nAvancement_Quete" à 0): il lui offre la quête, si celui-ci accepte, on met "nAvancement_Quete" à 1.
*Si "nAvancement_Quete" est à 1 et que "nNb_Assomme" est inférieur au nombre de participants à la réunion : le pingouin demande au PJ de faire des efforts pour calmer l'assemblée
*Si "nAvancement_Quete" est à 1 et que "nNb_Assomme" est égal ou supérieur (soyons prudents) au nombre de participants à la réunion : le pingouin organisateur félicite le PJ et lui donne ses sardines... On met "nAvancement_Quete" à 2.
*Si "nAvancement_Quete" est à 2 : Le pingouin félicite le PJ et le remercie encore pour son aide.


Voilà je pense la structure générale à respecter pour les scripts nécessaires à cette quête, après on peut rajouter des raffinements, par exemple si on trouve ça trop facile, on peut faire en sorte que les participants se réveillent au bout d'un certain temps, etc...
Lien direct vers le message - Vieux
Avatar de kaliyouga
kaliyouga
Roi
 
Avatar de kaliyouga
 
hmu ok... merci a toi pour ta réponse. Je verrai ca.

Mais est il possible de mettre une créature pingouin sur un placable? car c'est embetant... ^^


wala


merci a toi
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Ben non, je crois pas, il faut faire un tile spécial, ou un placeable avec un walkmesh... Adresse-toi plutôt aux pros de la 3D pour ça, c'est pas vraiment mon domaine...
Lien direct vers le message - Vieux
Avatar de kaliyouga
kaliyouga
Roi
 
Avatar de kaliyouga
 
zut

en effet j'ai essaye (au cas ou) le script pour faire assoir un pnj, eh bah ca marche pas

merci quand meme a toi
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
Ben vi, c'est possible de faire un banc sur lequel on puisse monter mais faut déjà être à l'aise avec un logiciel de 3D genre G-Max, avoir les bons outils (mdl plugin suite et zoligato's viewer), connaitre le fonctionnement d'un tileset qui nécessite pô mal d'édition au wordpad, comprendre la magie du hak-pack et de ses 2DA.
Le cas d'un objet plaçable walkable comme je les appelle est plus simple car à part le model 3D à réaliser, il n'y a qu'une ligne à ajouter à placeable.2DA mais par contre pour la modélisation, il faut connaitre l'astuce (je me souviens pô avoir expliqué clairement la technique). De plus, un objet plaçable walkable ne peut pô être posé n'importe où, il y a des règles à respecter.

Le plus simple est encore de modifier une tuile déjà existante en changeant le walkmesh de celle-ci.
Tu ouvre l'éditeur, tu survole avec ta souris la tuile que tu souhaite modifier, tu matte le nom en bas à gauche de l'éditeur et grâce au viewer de zoligato tu extrait le fichier mdl que tu va pouvoir modifier avec 3DSmax ou Gmax.
Une fois que c'est terminé, ya plus qu'à mettre le mdl dans un hak-pack sans rien ajouter d'autre.

Je suis très mal placé pour dire si tu es bons ou pô en modélisations 3D. Ben vi, si ça se trouve t'es un super-pro, qui sait
C'est à toi de voir si tu peut ou non

En tout cas, ce serait beaucoup d'énergie perdue pour réaliser tout simplement un banc pour tes pinguouins


(encore une fois Skanzo se surpasse en fournissant l'info totalement inutile du mois! )
Lien direct vers le message - Vieux
Avatar de Skanzo Sylan
Skanzo Sylan
Empereur
 
Avatar de Skanzo Sylan
 
J'oubliais, pour qu'un PNJ soit assis, utilise le script nw_c2_sitting. Il est par défaut dans Nwn et fonctionne relativement bien (sauf pour les pingouins ).
Lien direct vers le message - Vieux
Avatar de kaliyouga
kaliyouga
Roi
 
Avatar de kaliyouga
 
Citation:
Provient du message de Skanzo Sylan
Je suis très mal placé pour dire si tu es bons ou pô en modélisations 3D. Ben vi, si ça se trouve t'es un super-pro, qui sait
[/i]
Hum... un super pro? moi?

J'aurais bien aimé

j'arrive a faire des trucs de base en modélisation mais c'est tout :/

merci kan meme
Lien direct vers le message - Vieux
Avatar de kaliyouga
kaliyouga
Roi
 
Avatar de kaliyouga
 
Citation:
Provient du message de Jedaï
Oui, c'est tout à fait faisable, c'est même assez facile, réfléchis à l'agencement de tes scripts :

* organisateur : scripts normaux pour les évènements, tous les scripts sont dans le dialogue
* participants à la réunion : deux scripts à changer (utilise les UDE si tu les maîtrises) : OnHeartBeat et OnDamaged.


Le OnHeartBeat fait l'animation et le OnDamaged vérifie les points de vie.
Pour faire la communication entre tous ces scripts (éviter par exemple que les pingouins continuent à causer après s'être effondrés), je pense qu'un double système de variable locale s'impose :
*Chaque participant à la réunion devrait avoir une variable "bAssomme" qui serait mise à TRUE par le OnDamaged, une fois atteint le seuil de PV et qui serait vérifié par le OnHeartBeat pour savoir que faire (si "bAssomme" est à TRUE, le pingouin ronfle, sinon il cause)
*Par ailleurs, il serait logique de stocker l'avancement général sur l'organisateur de la réunion : avec une variable "nNb_Assomme" qui est incrémenté par le OnDamaged à chaque fois qu'un participant s'effondre.
Cette seconde variable permettrait ainsi de déterminer si la quête est finie : le OnDamaged incrémente "nNb_Assomme" puis vérifie grâce à cette variable si tous les participants ont été assommés, si c'est le cas, il ordonne au pingouin organisateur de venir causer au PJ.

La conversation du pingouin organisateur devra être structurée ainsi :
*première conversation avec le PJ ("nAvancement_Quete" à 0): il lui offre la quête, si celui-ci accepte, on met "nAvancement_Quete" à 1.
*Si "nAvancement_Quete" est à 1 et que "nNb_Assomme" est inférieur au nombre de participants à la réunion : le pingouin demande au PJ de faire des efforts pour calmer l'assemblée
*Si "nAvancement_Quete" est à 1 et que "nNb_Assomme" est égal ou supérieur (soyons prudents) au nombre de participants à la réunion : le pingouin organisateur félicite le PJ et lui donne ses sardines... On met "nAvancement_Quete" à 2.
*Si "nAvancement_Quete" est à 2 : Le pingouin félicite le PJ et le remercie encore pour son aide.


Voilà je pense la structure générale à respecter pour les scripts nécessaires à cette quête, après on peut rajouter des raffinements, par exemple si on trouve ça trop facile, on peut faire en sorte que les participants se réveillent au bout d'un certain temps, etc...


hum... Je suis une grosse quiche en scriptage, et apres plusieurs ample relectures je n'ai rien réussi a faire a part l'animation du onheartbreath | (mais il limite les dialogues )

Si quelqu'un pouvait prendre la peine de m'expliquer le reste et surtout de m'apprendre comment faire (car je veux surtout comprendre ce que je fais ) ca serait tres sympa de sa part

woila

merci
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
OK, je me dévoue, après tout y a que deux gros script, le reste c'est du gâteau (si tu me dis que t'arrives pas à faire le dialogue alors que tu peux tout faire avec le wizard, je me tire !!).

Donc, le coeur de la fête : le OnHeartBeat :
Code PHP:
//OnHeartBeat (by Jedaï)
//for the penguins...

void main()
{
    
//on récupère le pingouin dont le coeur bat..
    
object oSelf OBJECT_SELF;
    
//on récupère la variable qui nous dit dans quel état il est :
    
int bState GetLocalIntoSelf"bAssomme" );
    
    
//si il n'est pas assommé :
    
if( ! bState )
    {
        
//on le fait causer
        
        //on fait le choix d'une phrase au hasard :
        
int nRand Random(10); //s'il y a dix phrases
        //la variable où on va mettre la phrase :
        
string sPhrase "";
        
        
//une animation (facultatif)
        
int nAnim = -1;
        
        
//ne pas oublier que Random(n) renvoit un nombre de 0 à n-1
        
switch( nRand )
        {
        case 
:
            
sPhrase "";
            
nAnim ANIMATION_FIREFORGET_DRINK;
            break;
        case 
:
            
sPhrase "Rendez-nous nos sardines !";
            break;
        case 
:
            
sPhrase "";
            break;
        case 
:
            
sPhrase "";
            
nAnim ANIMATION_FIREFORGET_GREETING;
            break;
        case 
:
            
sPhrase "";
            
nAnim ANIMATION_FIREFORGET_VICTORY1;
            break;
        case 
:
            
sPhrase "A bas la tyrannie des phoques !!";
            break;
        case 
:
            
sPhrase "";
            break;
        case 
:
            
sPhrase "";
            break;
        case 
:
            
sPhrase "";
            break;
        case 
:
            
sPhrase "";
            break;
        }
        
//rajoute des phrases et des anims autant que tu veux
        //attention, les anims doivent être des FIREFORGET
        
        
SpeakStringsPhrase );
        
        if( 
nAnim > -)
            
PlayAnimationnAnim );
    }

Et maintenant le script qui s'occupe de tout organiser :
Code PHP:
//OnDamaged (by Jedaï)
//for the penguins

//Le nombre total de pingouins à assommer
int NB_PARTICIPANTS 15;

void main()
{
    
object oSelf OBJECT_SELF;
    
//le PJ qui vient de frapper le pingouin
    
object oPJ GetLastDamager();
    
    
//l'organisateur qui donne la quête, met le bon tag
    
object oBoss GetObjectByTag"le tag de l'organisateur" );
    
    
//le nombre de pingouins déjà assommés
    
int nNbAssomme GetLocalIntoBoss"nNb_Assomme" );
    
    
//l'état actuel du pingouin
    
int bState GetLocalIntoSelf"bAssomme" );
    
    
//le pingouin n'est pas encore assommé
    
if( ! bState )
    {
        
//on vérifie si ses points de vie sont descendus
        //en dessous de 100
        
if( GetCurrentHitPointsoSelf ) < 100 )
        {
            
//Si oui, on l'assomme
            
effect eSleep EffectSleep();
            
ApplyEffectToObjectDURATION_TYPE_PERMANENTeSleepoSelf );
            
            
//On stocke qu'il est assommé
            
SetLocalIntoSelf"bAssomme"TRUE );
            
            
//on incrémente le nombre de pingouins assommés
            
nNbAssomme++;
            
//et on le stocke sur le pingouin en chef
            
SetLocalIntoBoss"nNb_Assomme"nNbAssomme );
            
            
//si tous les agitateurs ont été assommés
            
if( nNbAssomme >= NB_PARTICIPANTS )
            {
                
//on fait agir le pingouin en chef
                
AssignCommandoBossClearAllActionsTRUE ) );
                
AssignCommandoBossActionSpeakString"Bravo, superbe !" +
                                                         
" Enfin un peu de calme" ) );
                
AssignCommandoBossActionStartConversationoPJ ) );
            }
        }
    }
    else 
//si le PJ s'acharne
    
{
        
//on soigne le pingouin pour éviter qu'il ne meure
        
effect eSoin EffectHealGetTotalDamageDealt() );
        
ApplyEffectToObjectDURATION_TYPE_INSTANTeSoinoSelf );
        
        
//et on le rendort
        
effect eSleep EffectSleep();
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTeSleepoSelf );
    }

Voilà, si tu veux faire une vraie fête avec plein d'animaux différents, tu peux faire un OHB pour chaque type, en changeant juste les phrases et les anims...enfin tu peux t'amuser quoi...
Lien direct vers le message - Vieux
Avatar de Jaha Effect
Jaha Effect
Alpha & Oméga
 
Avatar de Jaha Effect
 
Hannnnnnnnnnn, Jedaï qui nous sort du OnHeartBeat, alors là tout fout le camp

Jaha Effect
Lien direct vers le message - Vieux
Avatar de Jedaï
Jedaï
Alpha & Oméga
 
Avatar de Jedaï
 
Parfois le OHB est la meilleure solution...parfois

Bon celui-ci est particulièrement léger : très très peu d'instruction, même lorsque la fête bat son plein grâce à l'utilisation du switch.

Si on veut vraiment optimiser jusqu'au bout on peut remplacer ceci :
Code PHP:
void main()
{
    
//on récupère le pingouin dont le coeur bat..
    
object oSelf OBJECT_SELF;
    
//on récupère la variable qui nous dit dans quel état il est :
    
int bState GetLocalIntoSelf"bAssomme" );
    
    
//si il n'est pas assommé :
    
if( ! bState 
par ceci :
Code PHP:
void main()
{       
    
//si il n'est pas assommé :
    
if( ! GetLocalIntOBJECT_SELF"bAssomme" ) ) 
Mais je voulais être le plus clair possible dans mes commentaires, c'est pourquoi j'ai désossé le programme de sorte que chaque partie soit claire (c'est aussi le cas pour le OnDamaged).

En tout cas, ce OHB ne fera jamais ramer (et ne l'installez pas sur un milliard de pingouin pour me faire mentir, SVP ).
Lien direct vers le message - Vieux
Avatar de kaliyouga
kaliyouga
Roi
 
Avatar de kaliyouga
 
ok, merci a toi

je vais bien observer ces scripts pour comprendre comment ca marche


merci merci merci
Lien direct vers le message - Vieux
Avatar de kaliyouga
kaliyouga
Roi
 
Avatar de kaliyouga
 
donc, j'ai bien regardé le script, c'est en effet tres clair, cool!

J'ai tout bien mis ou il faut, mais il reste deux ptits problèmes:

Pas de "ZzZzZzZz" ils ont plus l'air mort qu'endormis !

Et l'autre problème, qui vient du jeu. Quand un des pingouin est a terre, le joueur porte automatiquement un coup de grace avec touché automatique au pingouin... celui ci meurt donc.

sinon tout va bien !
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Problème script "réunion"
   

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 07h21.
   

© 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