Problème script "réunion"

Répondre
Partager Rechercher
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
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...
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...
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! )
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
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
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...
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 ).
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 !
Oh, mais de quoi on se plaint, ce sont de tous petits problème ça...
Mais qu'ils meurent ces pingouins !


Bon OK, alors voyons à améliorer tout ça :

OnHeartBeat, cette fois-ci sans les chichis :
Code PHP:

//OnHeartBeat (by Jedaï)
//for the penguins...

void main()
{
    
//on récupère le pingouin dont le coeur bat..
    
object oSelf OBJECT_SELF;
    
    
//si il n'est pas assommé :
    
if( ! GetLocalIntoSelf"bAssomme" ) )
    {
        
//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 );
    }
    else 
//s'il est endormi, on le fait ronfler
    
{
        
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_SLEEP ), oSelf );
    }

Et un OnDamaged sérieusement relooké :
Code PHP:

//OnDamaged (by Jedaï)
//for the penguins

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

void main()
{
    
object oSelf OBJECT_SELF;
    
    
//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 )
        {
            
//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" );
            
            
//Si oui, on l'assomme
            
effect eSleep EffectSleep();
            
ApplyEffectToObjectDURATION_TYPE_PERMANENTeSleepoSelf );
            
//On le fait ronfler
            
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_SLEEP ), oSelf );
            
            
//Et on le rend invulnérable
            
SetPlotFlagoSelfTRUE );
            
            
//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 )
            {
                
//le PJ qui vient de frapper le pingouin
                
object oPJ GetLastDamager();
                
                
//on fait agir le pingouin en chef
                
AssignCommandoBossClearAllActionsTRUE ) );
                
AssignCommandoBossActionSpeakString"Bravo, superbe !" +
                                                         
" Enfin un peu de calme" ) );
                
AssignCommandoBossActionStartConversationoPJ ) );
            }
        }
    }

Normalement ça devrait mieux marcher...quoique...
wow, merci !

Super cool ^^

il reste juste un petit pb...

Une fois le pingouin a terre et endormi, si on lui tente le coup de grace, cela ne lui fait pas de degats (heuresement!) MAIS il se relève... ce qui donne ca:

http://membres.lycos.fr/kalivideos/pingouin.JPG

^^

Bon, c'est un problème mineur, mais je ne sait comment l'éviter ;p

woila

encore merci

Et voilà les terrifiants pingouins zombies...

Je pensais que le Plot suffirait à éviter qu'il se réveille mais visiblement....

On va tenter deux choses, si la première marchait, ça serait mieux que la seconde mais bon...

Alors premier essai, si le OnDamaged marche toujours sur les pingouins, malgré qu'il ne soit pas endommagé (sic), on peut rétablir l'effet de sommeil dessus :
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 pingouin n'est pas encore assommé
    
if( ! GetLocalIntoSelf"bAssomme" ) )
    {
        
//on vérifie si ses points de vie sont descendus
        //en dessous de 100
        
if( GetCurrentHitPointsoSelf ) < 100 )
        {
            
//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" );
            
            
//Si oui, on l'assomme
            
effect eSleep EffectSleep();
            
ApplyEffectToObjectDURATION_TYPE_PERMANENTeSleepoSelf );
            
//On le fait ronfler
            
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_SLEEP ), oSelf );
            
            
//Et on le rend invulnérable
            
SetPlotFlagoSelfTRUE );
            
            
//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 )
            {
                
//le PJ qui vient de frapper le pingouin
                
object oPJ GetLastDamager();
                
                
//on fait agir le pingouin en chef
                
AssignCommandoBossClearAllActionsTRUE ) );
                
AssignCommandoBossActionSpeakString"Bravo, superbe !" +
                                                         
" Enfin un peu de calme" ) );
                
AssignCommandoBossActionStartConversationoPJ ) );
            }
        }
    }
    else 
//si le PJ s'acharne
    
{
        
//on rétablit l'effet de sommeil
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTEffectSleep(), oSelf );
    }

Sinon, si ça marche pas (mais uniquement si ça ne marche pas), on rétablira l'effet de sommeil sur le OnHeartBeat, même si ça va faire bizarre de les voir se ré-effondrer tout seul...

Code PHP:

//OnHeartBeat (by Jedaï)
//for the penguins...

void main()
{
    
//on récupère le pingouin dont le coeur bat..
    
object oSelf OBJECT_SELF;
    
    
//si il n'est pas assommé :
    
if( ! GetLocalIntoSelf"bAssomme" ) )
    {
        
//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 );
    }
    else 
//s'il est endormi, on le fait ronfler
    
{
        
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_SLEEP ), oSelf );
        
        
//on rétablit l'effet de sommeil
        
ApplyEffectToObjectDURATION_TYPE_PERMANENTEffectSleep(), oSelf );
    }

Voilà, en espérant que le premier marche !
OK, on revient à notre première idée, avec une petite correction :

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 pingouin n'est pas encore assommé
    
if( ! GetLocalIntoSelf"bAssomme" ) )
    {
        
//on vérifie si ses points de vie sont descendus
        //en dessous de 100
        
if( GetCurrentHitPointsoSelf ) < 100 )
        {
            
//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" );
            
            
//Si oui, on l'assomme
            
effect eSleep EffectSleep();
            
ApplyEffectToObjectDURATION_TYPE_PERMANENTeSleepoSelf );
            
//On le fait ronfler
            
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_SLEEP ), oSelf );
            
            
//Et on le rend immunisé à la mort immédiate
            
ApplyEffectToObjectDURATION_TYPE_PERMANENTEffectImmunityIMMUNITY_TYPE_DEATH ), oSelf );
            
            
//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 )
            {
                
//le PJ qui vient de frapper le pingouin
                
object oPJ GetLastDamager();
                
                
//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 );
        }

J'espère que ce coup ci ça le fera...

Code PHP:

//OnHeartBeat (by Jedaï)
//for the penguins...

void main()
{
    
//on récupère le pingouin dont le coeur bat..
    
object oSelf OBJECT_SELF;
    
    
//si il n'est pas assommé :
    
if( ! GetLocalIntoSelf"bAssomme" ) )
    {
        
//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 );
    }
    else 
//s'il est endormi, on le fait ronfler
    
{
        
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_SLEEP ), oSelf );
    }

On va finir par y arriver
hum :)
Le premier script fait que le pingouin meurt quand il est attaqué a terre...

Le deuxieme ne change rien, le pingouin se relève et ne se recouche pas.


Enfin bon, on avance

merci a toi de m'aider comme ca
Ah bon, IMMUNITY_TYPE_DEATH ne prévient pas le coup de grâce ?

Bon alors voyons....

Mets ces deux scripts, on va voir ce que ça va donner :
Code PHP:

//OnHeartBeat (by Jedaï)
//for the penguins...

void main()
{
    
//on récupère le pingouin dont le coeur bat..
    
object oSelf OBJECT_SELF;
    
    
//si il n'est pas assommé :
    
if( ! GetLocalIntoSelf"bAssomme" ) )
    {
        
//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 );
    }
    else 
//s'il est endormi, on le fait ronfler
    
{
        
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_SLEEP ), oSelf );
    }
}


//OnDamaged (by Jedaï)
//for the penguins

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

void main()
{
    
object oSelf OBJECT_SELF;
    
    
//le pingouin n'est pas encore assommé
    
if( ! GetLocalIntoSelf"bAssomme" ) )
    {
        
//on vérifie si ses points de vie sont descendus
        //en dessous de 100
        
if( GetCurrentHitPointsoSelf ) < 100 )
        {
            
//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" );
            
            
//Si oui, on l'assomme
            
effect eSleep EffectSleep();
            
ApplyEffectToObjectDURATION_TYPE_PERMANENTeSleepoSelf );
            
//On le fait ronfler
            
ApplyEffectToObjectDURATION_TYPE_INSTANTEffectVisualEffectVFX_IMP_SLEEP ), oSelf );
            
            
//Et on le rend invincible
            
SetPlotFlagoSelfTRUE );
            
            
//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 )
            {
                
//le PJ qui vient de frapper le pingouin
                
object oPJ GetLastDamager();
                
                
//on fait agir le pingouin en chef
                
AssignCommandoBossClearAllActionsTRUE ) );
                
AssignCommandoBossActionSpeakString"Bravo, superbe !" +
                                                         
" Enfin un peu de calme" ) );
                
AssignCommandoBossActionStartConversationoPJ ) );
            }
        }
    }
    else 
//si le PJ s'acharne
        
{
            
SetPlotFlagoSelfFALSE );
        
            
//et on le rendort
            
effect eSleep EffectSleep();
            
ApplyEffectToObjectDURATION_TYPE_PERMANENTeSleepoSelf );
            
            
SetPlotFlagoSelfTRUE );
        }


Mais si, un jour nous y arriverons !
Répondre

Connectés sur ce fil

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