[Scripts] pour ambiance

Répondre
Partager Rechercher
Un cadavre de PNJ :
Code PHP:

void PnjCadavre(object oCreature)
{
  if (
GetObjectType(oCreature)!=OBJECT_TYPE_CREATURE) return;
  
SetObjectIsDestroyable(oCreatureFALSEFALSEFALSE);
  
ApplyEffectToObject(DURATION_TYPE_INSTANTEffectDeath(), oCreature);

Un PNJ Statufié :
Code PHP:

void PnjStatue(object oCreature)
{
  if (
GetObjectType(oCreature)!=OBJECT_TYPE_CREATURE) return;
  
ApplyEffectToObject(DURATION_TYPE_PERMANENTEffectVisualEffect(VFX_DUR_PROT_STONESKIN), oCreature); //Peau de pierre
  
ApplyEffectToObject(DURATION_TYPE_PERMANENTEffectPetrify(), oCreature); //Pétrifié
  
ApplyEffectToObject(DURATION_TYPE_INSTANTEffectDamage(GetCurrentHitPoints(oCreature), DAMAGE_TYPE_BLUDGEONING), oCreature); //Retire tous les PV (EffectDeath() fait ça aussi, mais allonge le PNJ au sol, or ici c'est pour un PNJ mort, debout, et statufié)
  
SetObjectIsDestroyable(oCreatureFALSEFALSEFALSE);

Un cadavre statufié :

Code PHP:

void PnjStatueCadavre(object oCreature)
{
  
PnjCadavre(oCreature);
  
PnjStatue(oCreature);


Dernière modification par Holgadard ; 11/11/2012 à 05h33.
Merci pour ces petits scripts ! Mine de rien, ce sont de petites choses qu'on cherche très souvent.

Pour la statue, je mettais l'effet à la main (à la ligne vfx des propriétés).

Je vais poser une question peut-être bête : pourquoi enlever les PV à la statue ?

Aussi, dans un autre sujet dédié aux statues ici, il était conseillé d'empêcher "transmutation de la pierre" de fonctionner (cela enlèverait l'effet de pétrification).
__________________
http://image.noelshack.com/fichiers/2012/46/1353252187-foret-bleue.png
La seconde version est arrivée : http://fanelya.fr !
IP : fanelya.no-ip.org

Liste de tous les serveurs : http://nwnlist.com
Citation :
Publié par Charlouloute
Je vais poser une question peut-être bête : pourquoi enlever les PV à la statue ?
Si on lui laisse ses PV, on peut encore l'attaquer, le voler, etc ... Ainsi, sans PV on ne peut plus rien lui faire, car il ne sera même plus sélectionnable. Et bien que sans PV, le PNJ statufié reste debout.

Dernière modification par Holgadard ; 10/11/2012 à 10h20.
Très belle astuce ! J'ignorais complètement cela. Du coup, j'imagine que le soucis de la transmutation de pierre en chair est réglé . Je sens qu'on va remplacer notre version du script pour prendre la tienne qui est bien plus efficace et abouti (nous on s'était limité à pétrifier, point... aussi parce que je n'ai pas beaucoup de codeur et que je les surcharge :P).
__________________
http://image.noelshack.com/fichiers/2012/46/1353252187-foret-bleue.png
La seconde version est arrivée : http://fanelya.fr !
IP : fanelya.no-ip.org

Liste de tous les serveurs : http://nwnlist.com
J'ai modifié un petit peu le script du PNJ statufié (le post des scripts tient compte de cette modif). Après avoir effectué un autre test sur une créature, je me suis aperçu que la créature restait sélectionnable. En cherchant le pourquoi, il s'avère que les PV en cours peuvent dépasser les PV max.

Pour l'effet EffectDamage, j'ai donc remplacé GetMaxHitPoints par GetCurrentHitPoints.

(pour un autre genre de statue, on pourrait remplacer la peau de pierre par peau d'écorce).

Dernière modification par Holgadard ; 11/11/2012 à 05h48.
Merci à toi, j'ai pompé ton script pour faire des statues.

Par contre ça ne compile pas :/
A mon avis ceci fonctionnera mieux :
Code PHP:

void PnjStatue(object oCreature)
{
  if (
GetObjectType(oCreature)!=OBJECT_TYPE_CREATURE) return;
  
ApplyEffectToObject(DURATION_TYPE_PERMANENTEffectVisualEffect(VFX_DUR_PROT_STONESKIN), oCreature); //Peau de pierre
  
ApplyEffectToObject(DURATION_TYPE_PERMANENTEffectPetrify(), oCreature); //Pétrifié
  
ApplyEffectToObject(DURATION_TYPE_INSTANTEffectDamage(GetCurrentHitPoints(oCreature), DAMAGE_TYPE_BLUDGEONING), oCreature); //Retire tous les PV (EffectDeath() fait ça aussi, mais allonge le PNJ au sol, or ici c'est pour un PNJ mort, debout, et statufié)
  
AssignCommand(oCreatureSetIsDestroyable(FALSEFALSEFALSE));

Bien vu! Mais pourtant, chez moi ça compile correctement.

J'ai trouvé pourquoi :
La fonction SetObjectIsDestroyable que j'utilise, est dans le script "x0_io_corpses" qu'il aurait fallu mettre dans un #include
Répondre

Connectés sur ce fil

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