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 15:44:07


  Page 1 sur 1 ¤

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 06/07/2006 23:15:28 Sujet du message : [Résolu] Attribution d'une "peau" à la montée de n

Voilà, j'ai continué à bidouiller pour compenser le manque de magie des rôdeurs de mon module.
Comme je ne puis attribuer les dons souhaité via le clas_feat_rang.2da, j'ai donc décidé d'utiliser une "peau", avec divers bonus, étant donné que les dons voulus ne osnt pas non plus dans ceux attribuables aux peaux de créatures (*soupir*).

Il y a 4 peaux différentes, la suivante remplaçant la précédene, et elles sont attribuées au personnage aux niveau 6, 10, 12 et 15, c'est à dire au moment où il gagne normalement un nouveau niveau de sort.
Le problème avec cette méthode, c'est que je ne peux pas savoir avec certitude, en essayant en jeu, si les bonus sont réellement attribués ou non (certain d'entre-eux étant des bonus "invisibles" genre bonus à la CA contre type racial). Donc si un scripteur chevronné pouvait jeter un coup d'oeil et me dire si le script est fonctionnel, je serai à la fois tout content et trés reconnaissant.

NWScript :

int GetLevel( object oCreature )
{
  int nLevel = GetLevelByPosition( 6, oCreature ) + GetLevelByPosition( 10, oCreature ) + GetLevelByPosition( 12, oCreature ) + GetLevelByPosition( 15, oCreature );
  return nLevel;
}

void main()
{
  object oPJ = GetPCLevellingUp();
  object oPeau1 = GetObjectByTag("peau_ranger_06");
  object oPeau2 = GetObjectByTag("peau_ranger_10");
  object oPeau3 = GetObjectByTag("peau_ranger_12");
  object oPeau4 = GetObjectByTag("peau_ranger_15");
  int nLevel = GetLevel( oPJ );

  if ( GetLevelByClass( CLASS_TYPE_RANGER, oPJ ) != 0 )
  {
    switch ( nLevel )
    {
      case 6:
      ActionGiveItem(oPeau1,oPJ);
      ActionEquipItem(oPeau1,INVENTORY_SLOT_CARMOUR);
      break;

      case 10:
      DestroyObject(oPeau1,0.0);
      ActionGiveItem(oPeau2,oPJ);
      ActionEquipItem(oPeau2,INVENTORY_SLOT_CARMOUR);
      break;

      case 12:
      DestroyObject(oPeau1,0.0);
      ActionGiveItem(oPeau3,oPJ);
      ActionEquipItem(oPeau3,INVENTORY_SLOT_CARMOUR);
      DestroyObject(oPeau2,0.0);
      break;

      case 15:
      DestroyObject(oPeau1,0.0);
      ActionGiveItem(oPeau4,oPJ);
      ActionEquipItem(oPeau4,INVENTORY_SLOT_CARMOUR);
      DestroyObject(oPeau3,0.0);
      break;
    }
  }
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.
Dernière édition par Charietto le 12/07/2006 14:11:50; édité 1 fois
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
-MeteZ-
Seigneur
Inscrit le: 19 Mar 2006
Messages: 205
Localisation: Région Parisienne (95)
Répondre en citant
Posté le : 07/07/2006 10:35:38 Sujet du message :

Lorsque le joueur équipera ta peau, les bonus données par la peau ne sont effectivement pas visible en haut de l'écran mais néanmoins ils sont là d'ailleurs j'ai fais un test avec une peau qui accorde +5 en CA.
NWScript :
void main()
{
    object oPC = GetLastUsedBy();
    object oPeau = CreateItemOnObject("resrefpeau", oPC);
    AssignCommand(oPC, ActionEquipItem(oPeau, INVENTORY_SLOT_CARMOUR));
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

Et le personnage passe de 11 à 16 de CA, la preuve que le bonus est effectué Wink .

Donc j'ai pas regardé ton script s'il marchait mais tu peux faire un test avec une peau qui donne +x CA, tu monte de niveau un rôdeur sur ton module et si tu voie effectivement un gros changement dans sa CA c'est que ton script fonctionne.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 07/07/2006 11:19:54 Sujet du message :

NWScript :

int GetLevel( object oCreature )
{
int nLevel = GetLevelByPosition( 6, oCreature ) + GetLevelByPosition( 10, oCreature ) + GetLevelByPosition( 12, oCreature ) + GetLevelByPosition( 15, oCreature );
return nLevel;
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ca ça veut rien dire. Là tu fais la somme des niveaux dans la 6ème, 10ème, 12ème et 15ème CLASSES de ton perso.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 07/07/2006 14:11:06 Sujet du message :


-MeteZ- a écrit :
mais tu peux faire un test avec une peau qui donne +x CA, tu monte de niveau un rôdeur sur ton module et si tu voie effectivement un gros changement dans sa CA c'est que ton script fonctionne.
Alors là je dis "oups"! J'aurai quand même pu y penser tout seul... Merci pour cette idée que je vais m'empresser de mettre en oeuvre!


Sith Vicious a écrit :
Ca ça veut rien dire. Là tu fais la somme des niveaux dans la 6ème, 10ème, 12ème et 15ème CLASSES de ton perso.
Argh, damned... Bon, donc... c'est pas du tout ça alors! Merci une fois de plus, je m'en vais corriger ça tout de suite.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Sith Vicious
Grand Sage du Conseil
Inscrit le: 19 Oct 2005
Messages: 693
Répondre en citant
Posté le : 07/07/2006 14:40:56 Sujet du message :

NWScript :

void main()
{
object oPJ = GetPCLevellingUp();
int nRangerLevel = GetLevelByClass( CLASS_TYPE_RANGER, oPJ );
if (nRangerLevel>5)
{
    object oCArmour = GetItemInSlot(INVENTORY_SLOT_CARMOUR,oPJ);
    string sTag;
    string sCArmour = GetTag(oCArmour);
    if (nRangerLevel >= 15) sTag = "peau_ranger_15";
    else
    {
    switch (nLevel)
    {
        case 6: case 7 : case 8 : case 9 : sTag = "peau_ranger_06"; break;
        case 10 : case 11 : sTag = "peau_ranger_10"; break;
        case 12 : case 13 : case 14 : sTag = "peau_ranger_12"; break;
    }
    }
    if (sTag != sCArmour)
    {
        DestroyObject(oCArmour);
        object oPeau = CreateItemOnObject(sTag,oPJ);
        SetIdentified(oPeau,TRUE);
        AssignCommand(oPJ,ClearAllActions(TRUE));
        AssignCommand(oPJ,ActionEquipItem(oPeau,INVENTORY_SLOT_CARMOUR));
    }
}
}
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


Ca me semble pas mal. Evidement ça marche que si tes peaux ont un tag identique à la resref.
Dans ton script il y a plusieurs choses qui vont pas :
NWScript :
object oPeau1 = GetObjectByTag("peau_ranger_06");
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.

Ca ça va chercher sur ton module l'objet de tag "peau_ranger_06", je pense pas que t'en ai mis un par terre, donc soit il trouvera rien, soi il va en prendre un sur un ranger au hasard... Donc si après tu fais DestroyObject(oPeau1) tu vas détruire une peau qui n'a rien a voir (ptet l'enlever à un type qui doit la porter)

NWScript :
ActionGiveItem(oPeau1,oPJ);
Note : le code affiché ci-dessus n'est pas rendu tel qu'il devrait l'être réellement, en particulier des sauts de lignes sont automatiquement insérés pour éviter de casser la mise en page. En le copiant/collant, vous résoudrez ce problème.


C'est le module qui lance le script, je vois mal le module aller donner un item à un joueur !

A part ça des trucs à savoir sur les peaux :
*Il y a toujours le problème que ça va foirer si oPJ a un inventaire plein, ça ne va pas se créer sur lui donc ça tombe à l'eau.

*En multi joueur, la peau n'est pas sauvegardée à la deco donc il faut la remettre à chaque connection.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Charietto
Acolyte
Inscrit le: 23 Mai 2006
Messages: 25
Répondre en citant
Posté le : 07/07/2006 15:32:54 Sujet du message :

Merci, tu me sauves une fois de plus!
Je n'avais pas du tout pensé au fait que le ActionGiveItem ne pouvait pas fonctionner sur le module. Le fait que le script pouvait détruire une peau au hasard m'avait titillé, mais je pensais que de la manière dont j'vais procédé, il ne s'intéresserai qu'au joueur montant de niveau. Bon, j'ai encore des progrés à faire...

Pour ce qui est de l'inventaire plein, ma foi, je ne sais pas trop comment contourner le problème (si ce n'est que vu la teneur du module, les inventaires pleins devraient être plutôt rares). A part un avertissement dans le readme, ou en rajoutant un floating text au script de level up pour prévenir le joueur qu'il doit faire de la place avant de cliquer sur "Accepter"?

Pour contourner le problème en multijoueur, est-il possible de mettre le script aussi dans le OnClientEnter du module? (A priori oui, en remplaçant GetPCLevellingUp par GetEnteringObject)
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé 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 66.177ms