La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 23/11/2024 20:31:23


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 20/04/2003 19:04:46 Sujet du message : régénérer un objet plaçable

c possible ??
j'ai écrit ça sur un item sur son onphysicalattacked :
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF);

Et l'objet ne récupère pas ses pvs.

Bon plus simplement pour expliquer ce que je souhaite faire :
j'aimerais créer un mannequin d'entrainement qui file des pxs en fonction des dégâts infligés sur lui et du lvl de celui qui tape.
Dans le script les dégâts sont déjà déduits de toutes les résistances de l'objet donc déjà d'une part je suis obligé de ne pas le mettre en invincible.
D'autre part, la fonction int GetTotalDamageDealt() ne marche pas sur un objet apparemment, ça me retourne zéro.

Je suis obligé donc de passer par ses currents points par rapport à ses pv max pour donner des px mais je dois alors le restaurer sinon les px vont monter de plus en plus. Pourtant, la fonction décrite au dessus ne guérit que dalle.

Y a t' il d'autres fonctions pour remettre un item plaçable ou faut il que j'oublie mon idée ??

Merci de me répondre Smile Smile
_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 20/04/2003 20:16:01 Sujet du message :

Essaye le OnDamaged plutôt.

Enfin c'est bizarre que ton plaçable ne soit pas guéri. Sur quoi te base tu pour être sûr qu'il ne récupère pas ses points de vie ?
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
Lavok
Légende vivante
Inscrit le: 22 Oct 2002
Messages: 434
Localisation: Sphère planaire
Répondre en citant
Posté le : 21/04/2003 09:47:45 Sujet du message :

Hum, ça marcherait déjà beaucoup mieux si tu prenais une créature avec l'apparence mannequin plutôt qu'un plaçable ! Si tu veux faire en fonction du niveau, il te suffit de reprendre comme ceci ce que j'ai fait dans le sujet "Vos scripts" en faisant quelques petites modifications :

Code :

#include "nw_i0_tool"
void main()
{
object oRigolo = GetLastDamager();
//oRigolo est celui qui a touché le mannequin.
object oGlups = OBJECT_SELF;
  //oGlups, c'est le mannequin.
  effect eBoum = EffectVisualEffect(VFX_FNF_SCREEN_SHAKE);
  //eBoum est un effet de tremblement d'écran qui est facultatif.
  int nDamage = GetTotalDamageDealt();
//nDamage est le nombre de points de dommages qu'a reçu le mannequin.
int nLevel = GetLevelByPosition(1, oRigolo)+GetLevelByPosition(2, oRigolo)+GetLevelByPosition(3, oRigolo);
if (GetIsPC(oRigolo))
  //Ici, on vérifie que oRigolo est bien un joueur.
  {
           if(nDamage > 99)
           //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 100 ou plus.
           {
           SendMessageToPC(oRigolo, "Tricheur !");
           //On ne peut décement pas faire autant de dommages en un coup !
           DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDeath(TRUE), oRigolo));
           //Bref, on tue le tricheur sans sommations !
                         }
                         else
                         {
           if(nDamage > 59)
           //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 60 ou plus.
           {
           RewardPartyXP(20*nLevel, oRigolo);
           //On offre 20 xp au joueur.
           SendMessageToPC(oRigolo, "CHAMPION DU MONDE !!!");
           //Un petit message au joueur...
           ApplyEffectToObject(DURATION_TYPE_INSTANT, eBoum, oGlups);
           DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBoum, oGlups));
           DelayCommand(4.0, ApplyEffectToObject(DURATION_TYPE_INSTANT, eBoum, oGlups));
           //L'effet de tremblement. On peut le supprimer sans aucun problème.
                        }
           else
             {
            if(nDamage > 49)
           //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 50 ou plus.
           {
           RewardPartyXP(10*nLevel, oRigolo);
            //On offre 10 xp au joueur.
          SendMessageToPC(oRigolo, "CHAMPION !");
           //Un petit message au joueur...
           ApplyEffectToObject(DURATION_TYPE_INSTANT, eBoum, oGlups);
            //L'effet de tremblement. On peut le supprimer sans aucun problème.
                         }
           else
             {
            if(nDamage > 39)
           //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 40 ou plus.
           {
           RewardPartyXP(8*nLevel, oRigolo);
            //On offre 8 xp au joueur.
           SendMessageToPC(oRigolo, "Champion !");
            //Un petit message au joueur...
              }
           else
             {
            if(nDamage > 29)
           //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 30 ou plus.
           {
           RewardPartyXP(6*nLevel, oRigolo);
            //On offre 6 xp au joueur.
           SendMessageToPC(oRigolo, "Des muscles d'acier !");
             //Un petit message au joueur...
             }
           else
             {
           if(nDamage > 19)
           //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 20 ou plus.
           {
           RewardPartyXP(4*nLevel, oRigolo);
             //On offre 4 xp au joueur.
           SendMessageToPC(oRigolo, "Quelle force !");
             //Un petit message au joueur...
             }
           else
             {
          if(nDamage > 14)
           //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 15 ou plus.
           {
           RewardPartyXP(3*nLevel, oRigolo);
            //On offre 3 xp au joueur.
           SendMessageToPC(oRigolo, "Impressionant !");
             //Un petit message au joueur...
             }
           else
             {
           if(nDamage > 9)
           //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 10 ou plus.
           {
           RewardPartyXP(2*nLevel, oRigolo);
             //On offre 2 xp au joueur.
           SendMessageToPC(oRigolo, "Pas mal !");
             //Un petit message au joueur...
             }
           else
             {
            if(nDamage > 4)
            //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 5 ou plus.
                {
                 RewardPartyXP(1*nLevel, oRigolo);
                  //On offre 1 xp au joueur.
                SendMessageToPC(oRigolo, "Bof !");
                //Un petit message au joueur...
                }
                else
                {
                if(nDamage > 2)
            //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 3 ou plus.
                {
                SendMessageToPC(oRigolo, "Pas terrible !");
                //Un petit message au joueur...
                }
                else
               //Ce qui suit entre accolades est ce qui se passera si nDamage vaut 1 ou 2.
                {
                SendMessageToPC(oRigolo, "Mauviette !");
               //Un petit message au joueur...
              }
              }
              }
              }
              }
              }
              }
              }
              }
              }
              }
              else
              //Ce qui suit entre accolades est ce qui se passera si oRigolo n'est pas un joueur.
              {
              ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(nDamage), oGlups);
              //On guérit le mannequin des dommages qu'il vient de recevoir( cela n'arrive donc que si une autre créature attaque le mannequin ).
              }
              }


A toi d'adapter maintenant pour les xps, parce que là, ça en fait beaucoup trop Very Happy ( par exemple diviser le niveau par 5 et mettre la condition que si alors il est inférieur à 1, le mettre automatiquement à1, etc)!

EDIT : Je précise le script qui empêche la contre-attaque :
Code :

void main()
{
    object oPC = GetLastAttacker();
    SetIsTemporaryFriend(oPC,OBJECT_SELF,FALSE,0.001);
    DelayCommand(0.001,SetIsTemporaryEnemy(oPC));
}

A placer sur le 'OnPhysicalAttacked' et le 'OnSpellCastAt' du mannequin. Tous les autres événements que je n'ai pas encore cités sont vides. Le mannequin est immobile.
_________________
ToB : Une seule chose semble certaine : tant que le trône de sang de Bhaal restera vide, le chaos règnera.

Moi : Une seule chose semble certaine : tant que la tête de singe de Bush restera vide, le chaos règnera.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 21/04/2003 10:28:24 Sujet du message :

Merci bcp, ça m'a l'air vraiment bien tout ça !
Mon script à moi était ça :

Code :

void main()
{
object oPC = GetLastAttacker(OBJECT_SELF);
int iHit = 10000 - GetCurrentHitPoints(OBJECT_SELF)  ;

if (iHit > 10) {

    int iXP = d4(iHit - 10) - (GetHitDice(oPC)* 2);

    if (iXP > 0) {

        int finalXP = GetXP(oPC) + iXP ;
        ActionSpeakString("Experience gagnee : " + IntToString(iXP));

        SetXP(oPC, finalXP);

        }

    }
ApplyEffectToObject(DURATION_TYPE_INSTANT,EffectHeal(GetMaxHitPoints(OBJECT_SELF)), OBJECT_SELF);

}



Embarassed Donc vi .... enfin c plutot les fonctions que je ne maitrise pas encore, ou du moins certaines que je ne connais pas encore Laughing

Je vais essayer tout ça, merci C'est top !
_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 21/04/2003 11:44:15 Sujet du message :

Lavok, je ne suis pas sûr que tu ai besoin d'empêcher la contre attaque du mannequin (un PNJ sans script n'est rien de plus qu'un morceau de viande inerte, qui ne réagit pas si on l'attaque).

Par contre, il serait intéressant de faire en sorte que le mannequin ne soit plus un ennemi pour le PJ, ce qui par exemple l'empêche de dormir à proximité de celui-ci.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
Lavok
Légende vivante
Inscrit le: 22 Oct 2002
Messages: 434
Localisation: Sphère planaire
Répondre en citant
Posté le : 21/04/2003 13:15:55 Sujet du message :


Taern a écrit :
Lavok, je ne suis pas sûr que tu ai besoin d'empêcher la contre attaque du mannequin (un PNJ sans script n'est rien de plus qu'un morceau de viande inerte, qui ne réagit pas si on l'attaque).
C'est un peu bizarre mais même sans script, je me souviens que le mannequin avait tendance à réagir parfois. Je suppose que l'IA de base est indépendante des scripts que l'on place là. D'ailleurs, je tiens ce script de non-attaque de la campagne officielle ( au prélude ).


Citation :

Par contre, il serait intéressant de faire en sorte que le mannequin ne soit plus un ennemi pour le PJ, ce qui par exemple l'empêche de dormir à proximité de celui-ci.
Je vois mal le PJ dormir dans une salle d'entraînnement... Et puis, si le mannequin est neutre, il faut sélectionner l'icône 'attaquer' au lieu de simplement cliquer sur le mannequin. Enfin, chacun fait comme il veut.
_________________
ToB : Une seule chose semble certaine : tant que le trône de sang de Bhaal restera vide, le chaos règnera.

Moi : Une seule chose semble certaine : tant que la tête de singe de Bush restera vide, le chaos règnera.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 21/04/2003 14:27:26 Sujet du message :

Arf ben j'ai gros problème. Même avec le script anti-attaque, les mannequins réagissent tout le temps. Donc je suis grillé lol. Sad
_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Taern
Ecuyer
Inscrit le: 11 Avr 2003
Messages: 45
Localisation: 92
Répondre en citant
Posté le : 21/04/2003 19:05:40 Sujet du message :

Ben effectivement vous avez raison tous les deux Very Happy

@ Lavok :
T'avais raison, les créatures se défendent apparamment automatiquement, même sans script d'IA.

@ Athanor :
Je me suis fait attaquer par mes mannequins aussi Very Happy (et je me suis même fait tuer mais chut Very Happy )
En fait vérifie bien que la vitesse de déplacement des mannequins est "immobile". Et qu'ils n'ont pas d'armes Razz
Je n'ai pas vu d'autre particularité sur les mannequins de Bioware.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Numéro ICQ Ignorer l'utilisateur
 
Athanor salamander
Légende vivante
Inscrit le: 01 Avr 2003
Messages: 306
Localisation: Ecole du Script
Répondre en citant
Posté le : 21/04/2003 21:12:39 Sujet du message :

Arf ben vi, la vitesse de déplacement à zéro ça pourrait le faire Laughing

Oki merci Very Happy
_________________
Atha, Artisan Scripteur.
meet the most beautiful woman in the world
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 1 ¤


Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Sauter vers:
FAQ | Rechercher | Liste des Membres | Groupes d'utilisateurs | S'enregistrer | Profil | Se connecter pour vérifier ses messages privés | Connexion
Powered by phpBB 2.* [m] © 2001, 2002 phpBB Group
Theme rewritten in beautiful XHTML code by Baldurien.
Thème "La Bibliothèque de Neverwinter" crée par Kruger
Traduction par : phpBB-fr.com
Page generated in 36.626ms