La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
La date/heure actuelle est 18/05/2024 08:46:47


  Page 1 sur 2 ¤ Aller à la page 1, 2  Suivante

Voir le sujet précédent ¤ Voir le sujet suivant 
Auteur Message
Ton pire cauchemard
Ecuyer
Inscrit le: 24 Avr 2006
Messages: 40
Répondre en citant
Posté le : 20/05/2006 14:59:41 Sujet du message : Autorisations requises pour passer des niveaux

(J'ai fait une recherche, et je 'nai pas trouvé de sujet correspondant à celui-là, j'espère que je ne l'ai pas raté...)

Bonjour à toutes et à tous,

VOilà. Dans mon module, je voudrai que les PJs soient bloqués aux niveau 15 (peut pas passer le 16e), 20, 25, 30.
Pour qu'il puisse enfin passer ses niveaux, le PJ devra faire du bon RP, et je lui verrai remettre une autorisation pour qu'il puisse le passer. Comment faire ? Je vous remercie !
_________________
=========> Dieu du Script <=========
Les îles Oubliées ( LIO_v1.4 )
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
omega
Grand Chevalier
Inscrit le: 09 Jan 2004
Messages: 116
Répondre en citant
Posté le : 20/05/2006 15:04:42 Sujet du message :

NWScript :
void main()
{

object oPC = GetPCLevellingUp();
string sPC = GetName (oPC);
int iLevel = GetHitDice(oPC);
string sLevel = IntToString(iLevel);
string sAreaName = GetName(GetArea(oPC));
int iTest = 0 ;
int iStopXP = ((iLevel * (iLevel - 1)) / 2) * 1000 -1;






//if (GetLevelByClass(CLASS_TYPE_SH ADOWDANCER,oPC) &gt;=1
//    &amp;&amp; GetItemPossessedBy(oPC, "ShadowNODROP") == OBJECT_INVALID)
//        iTest = 1 ;



if (
      ( iLevel == 5 || iLevel == 9 || iLevel == 10 || iLevel == 13 || iLevel == 15 || iLevel == 20 || iLevel == 22 || iLevel == 25 || iLevel == 30)
  && ( GetItemPossessedBy(oPC, "Passniveau" + IntToString(iLevel)) == OBJECT_INVALID )
  )
      iTest = 1;



if (iTest == 1)
{
SetXP(oPC,iStopXP);
SendMessageToPC(oPC,"Il vous faut un pass pour valider ce niveau, il viendra si vous continuez a jouer votre perso");
SendMessageToAllDMs (sPC+" a tenter d'atteindre le niveau "+sLevel+" dans "+sAreaName);
}
else
{
// a pas oublier de creer l'objet PassniveauX
if (GetLocalInt(oPC, "freeup")!=1)
    SetXP(oPC,iStopXP+1);
DestroyObject(GetItemPossessedBy(oPC, "Passniveau" + IntToString(iLevel)));
SendMessageToAllDMs (sPC+" a atteint le niveau "+sLevel+" dans "+sAreaName);
}

}
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.


voila, dans le levinup des evenements du module.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ton pire cauchemard
Ecuyer
Inscrit le: 24 Avr 2006
Messages: 40
Répondre en citant
Posté le : 20/05/2006 20:49:47 Sujet du message :

J'ai fait comme ca, et j'ai remplacé les lvl que t'avais mise (5,10 ...) par les miens.
MAIS : Il faut une autorisation pour chaque lvl que le joueur passe -_-...
C'est normale ?
_________________
=========> Dieu du Script <=========
Les îles Oubliées ( LIO_v1.4 )
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
omega
Grand Chevalier
Inscrit le: 09 Jan 2004
Messages: 116
Répondre en citant
Posté le : 20/05/2006 22:38:34 Sujet du message :

Ben en fait, non.

Verifie si tu as bien mis les doubles ==
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ton pire cauchemard
Ecuyer
Inscrit le: 24 Avr 2006
Messages: 40
Répondre en citant
Posté le : 21/05/2006 00:58:11 Sujet du message :

Oui, j'ai copié collé j'ai tout bien mit ! ^^
Mais ca marche pas...
_________________
=========> Dieu du Script <=========
Les îles Oubliées ( LIO_v1.4 )
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 21/05/2006 08:45:39 Sujet du message :

NWScript :
void main()
{

object oPC = GetPCLevellingUp();
string sPC = GetName (oPC);
int iLevel = GetHitDice(oPC);
string sLevel = IntToString(iLevel);
string sAreaName = GetName(GetArea(oPC));
int iTest = 0 ;
int iStopXP = ((iLevel * (iLevel - 1)) / 2) * 1000 -1;






//if (GetLevelByClass(CLASS_TYPE_SH ADOWDANCER,oPC) &amp;gt;=1
//    &amp;amp;&amp;amp; GetItemPossessedBy(oPC, "ShadowNODROP") == OBJECT_INVALID)
//        iTest = 1 ;



if (
      iLevel == 5 || iLevel == 9 || iLevel == 10 || iLevel == 13 || iLevel == 15 || iLevel == 20 || iLevel == 22 || iLevel == 25 || iLevel == 30
  && GetItemPossessedBy(oPC, "Passniveau" + IntToString(iLevel)) == OBJECT_INVALID
  )
{
      iTest = 1;
}



if (iTest == 1)
{
SetXP(oPC,iStopXP);
SendMessageToPC(oPC,"Il vous faut un pass pour valider ce niveau, il viendra si vous continuez a jouer votre perso");
SendMessageToAllDMs (sPC+" a tenter d'atteindre le niveau "+sLevel+" dans "+sAreaName);
}
else
{
// a pas oublier de creer l'objet PassniveauX

SetXP(oPC,iStopXP+1);
DestroyObject(GetItemPossessedBy(oPC, "Passniveau" + IntToString(iLevel)));
SendMessageToAllDMs (sPC+" a atteint le niveau "+sLevel+" dans "+sAreaName);
}

}
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.


essaye, j'ai pas testé, j'ai pas changer bcp de truc, mais bon, peut-être que ça marchera ^^
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
P.Patoche
Chevalier
Inscrit le: 14 Avr 2006
Messages: 70
Localisation: France 77
Répondre en citant
Posté le : 21/05/2006 12:43:26 Sujet du message :

Bonjour a toutes et a tous moi jai sa sur mon mod et il fonctionne bien.

void main()
{
object oPC = GetPCLevellingUp();
string sPC = GetName (oPC);
int iLevel = GetHitDice(oPC);
string sLevel = IntToString(iLevel);
string sAreaName = GetName(GetArea(oPC));
int iTest = 0 ;
int iStopXP = ((iLevel * (iLevel - 1)) / 2) * 1000 -1;

// autorisation pour lvl
if (( iLevel == 5 ||
iLevel == 10 ||
iLevel == 15 ||
iLevel == 20 ||
iLevel == 25 ||
iLevel == 30 ||
iLevel == 35 ||
iLevel == 40 ) && ( GetItemPossessedBy(oPC, "passniv" + IntToString(iLevel)+ "NODROP") == OBJECT_INVALID ))
{
SetXP(oPC,iStopXP);
SendMessageToPC(oPC,"Il vous manque l'autorisation pour passer ce niveau.");
}
// ici on est sur qu'il passe le lvl <------
// effacer les autorisations en trop
object oBon = GetFirstItemInInventory(oPC);
string sResbon;
while(oBon != OBJECT_INVALID)
{
sResbon = GetResRef(oBon);
if(GetStringLeft(sResbon, 7) == "passniv")
{
if(StringToInt(GetStringRight(sResbon, GetStringLength(sResbon)-7)) <= iLevel)
DestroyObject(oBon);
}
oBon = GetNextItemInInventory(oPC);
}
}
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ton pire cauchemard
Ecuyer
Inscrit le: 24 Avr 2006
Messages: 40
Répondre en citant
Posté le : 21/05/2006 13:18:36 Sujet du message :

P.Patoche : J'ai essayé ton script. J'ai remplacé le nom de l'objet : "passniv" par "Passniveau".
J'ai créé un item ayant pour Tag : "Passniveau". Mais quand le joueur passe son lvl, même avec l'autorisation, ca marque qu'il n'a as l'autorisation pour passer ce Niveau...
Est-ce que l'objets doit bien avoir pour TAG : "PAssniveau" et rien après ? (pour ma version)
Ou ne faut-il pas 16 Pass pour passer niveau 16 ? (^^)

...

Ca me fait exactement pareil pour celui de Black Knight...
_________________
=========> Dieu du Script <=========
Les îles Oubliées ( LIO_v1.4 )
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
P.Patoche
Chevalier
Inscrit le: 14 Avr 2006
Messages: 70
Localisation: France 77
Répondre en citant
Posté le : 21/05/2006 13:38:35 Sujet du message :

item pour passe lvl 5 = TAG "passniv5NODROP", pour lvl 10 = TAG "passniv10NODROP",et tu continu, oublie pas le "NODROP" coller au TAG, voila pour ta reponce.

donc pour toi c'est "Passniveau5NODROP" pour le lvl 5

Patoche.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ton pire cauchemard
Ecuyer
Inscrit le: 24 Avr 2006
Messages: 40
Répondre en citant
Posté le : 21/05/2006 14:07:19 Sujet du message :

Ok, ca marche !
Si je veux dire que quand on a passé le level bloqué on détruit l'autorisation je fais comment stp ? PArceque sur tons cript t'as marqué que l'objet se détruisait non ? Avec ceci :

NWScript :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.


PArceque sur mon mod. elle se détruit pas...

PS : Normalement, dans ton script, le joueur ne peut pas se séparer de l'autorisation ? PArceque là, moi, il peut la poser par terre, la donner à un autre joueur ou la vendre ...
_________________
=========> Dieu du Script <=========
Les îles Oubliées ( LIO_v1.4 )
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
P.Patoche
Chevalier
Inscrit le: 14 Avr 2006
Messages: 70
Localisation: France 77
Répondre en citant
Posté le : 21/05/2006 14:26:42 Sujet du message :

Dans proprieté de l'item fait proprieté et coche la case 'Ne peut étre lâcher'

et chez moi elle est detruite apres avoir passer le dit lvl.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ton pire cauchemard
Ecuyer
Inscrit le: 24 Avr 2006
Messages: 40
Répondre en citant
Posté le : 21/05/2006 15:19:36 Sujet du message :

Ah bah pas chez moi (^^), Bizarre.
Quand au "Ne peut être laché", je connaissais t'inquiète, mais j'avais pas du tout pensé, c'est vrai (^^)...
_________________
=========> Dieu du Script <=========
Les îles Oubliées ( LIO_v1.4 )
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
P.Patoche
Chevalier
Inscrit le: 14 Avr 2006
Messages: 70
Localisation: France 77
Répondre en citant
Posté le : 21/05/2006 15:35:54 Sujet du message :

voila pour toi avec tes Tag et tes lvl, fait un teste et dit moi.

void main()
{
object oPC = GetPCLevellingUp();
string sPC = GetName (oPC);
int iLevel = GetHitDice(oPC);
string sLevel = IntToString(iLevel);
string sAreaName = GetName(GetArea(oPC));
int iTest = 0 ;
int iStopXP = ((iLevel * (iLevel - 1)) / 2) * 1000 -1;

// autorisation pour lvl
if (( iLevel == 15 ||
iLevel == 20 ||
iLevel == 25 ||
iLevel == 30 ) && ( GetItemPossessedBy(oPC, "Passniveau" + IntToString(iLevel)+ "NODROP") == OBJECT_INVALID ))
{
SetXP(oPC,iStopXP);
SendMessageToPC(oPC,"Il vous manque l'autorisation pour passer ce niveau.");
}
// ici on est sur qu'il passe le lvl <------
// effacer les autorisations en trop
object oBon = GetFirstItemInInventory(oPC);
string sResbon;
while(oBon != OBJECT_INVALID)
{
sResbon = GetResRef(oBon);
if(GetStringLeft(sResbon, 7) == "Passniveau")
{
if(StringToInt(GetStringRight(sResbon, GetStringLength(sResbon)-7)) <= iLevel)
DestroyObject(oBon);
}
oBon = GetNextItemInInventory(oPC);
}
}
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
lylver
Héros
Inscrit le: 08 Avr 2005
Messages: 274
Répondre en citant
Posté le : 22/05/2006 16:25:54 Sujet du message :

Tant qu'on est dans le sujet : voici un script de passage de niveau qui contrôle le multiclassage (surtout à partir de la 3eme classe), ca peut resservir à d'autres
Utilisation actuelle : Ambygata( c'est peut-être pas le même mais c'est le même principe) et TN Bouchon

Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :


// Nom : ly_lib_s01
// Auteur : ?
// Update : lylver 07/04/2004
// Update : lylver 2004-12-19
// ne pas compiler, fichier include

int MustHaveNoneOf(object oPC, string sObjectTag){
  int iNbItem=0,i;
  object oItem = GetFirstItemInInventory(oPC);
  while (GetIsObjectValid(oItem)==TRUE ){
      if( GetTag(oItem) == sObjectTag ){
        iNbItem += GetNumStackedItems(oItem) ;
        SetPlotFlag(oItem, FALSE) ;
        DestroyObject(oItem) ;
      }
      oItem = GetNextItemInInventory(oPC);
  }
  for( i=0; i < NUM_INVENTORY_SLOTS; i++){
      oItem = GetItemInSlot(i, oPC) ;
      if( GetTag(oItem) == sObjectTag ){
        iNbItem += GetNumStackedItems(oItem) ;
        ActionUnequipItem(oItem) ;
        SetPlotFlag(oItem, FALSE) ;
        DelayCommand(2.0, DestroyObject(oItem)) ;
      }
  }
  return iNbItem;
}
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.


Ce message est un spoiler, et risque de vous informer de choses que vous auriez dû apprendre par vous même (fin d'un jeu, film, etc). À vos risques et périls (ludiques), vous pouvez le voir en cliquant sur cet avertissement.
Spoiler :
NWScript :

//:: //
//:: Update Lylver 2005-09-27
//:: tn_mod_levelup.nss
//:: controle multiclassage
//:: //
#include "ly_lib_s01"
void main()
{
object oPC = GetPCLevellingUp();
int nLv = GetHitDice(oPC);
int nXP = (( nLv * ( nLv - 1 )) / 2 * 1000 ) - 1;;
int nXP2 = GetXP(oPC);
string sPC = GetName(oPC);
WriteTimestampedLogEntry("Passage de niveau de "+sPC+", XPs : "+IntToString(nXP2) );
int bPasseDroit = MustHaveNoneOf(oPC, "TN_LVL_MULTIPASS") ;
  // controle multiclasse
  int oL1 = GetLocalInt(oPC,"LEVEL1");
  int oC1 = GetLocalInt(oPC,"CLASS1");
  int oL2 = GetLocalInt(oPC,"LEVEL2");
  int oC2 = GetLocalInt(oPC,"CLASS2");
  int oL3 = GetLocalInt(oPC,"LEVEL3");
  int oC3 = GetLocalInt(oPC,"CLASS3");
  int nL1 = GetLevelByPosition(1,oPC);
  int nC1 = GetClassByPosition(1,oPC);
  int nL2 = GetLevelByPosition(2,oPC);
  int nC2 = GetClassByPosition(2,oPC);
  int nL3 = GetLevelByPosition(3,oPC);
  int nC3 = GetClassByPosition(3,oPC);
  int nL,nC,nP ;
  // determiner la classe changee
  if( oL1 == nL1 ){
      if( oL2 == nL2 ){
        if( oL3 == nL3 ){
            WriteTimestampedLogEntry("");
        } else {
            nL = nL3 ; nC = nC3 ; nP=3;
        }
      } else {
        nL = nL2 ; nC = nC2 ; nP=2;
      }
  } else {
      nL = nL1 ; nC = nC1 ; nP=1;
  }

// condition 1 : classe de prestige doit etre poursuivie.
int bPrestige = 0, bAlert=FALSE;
switch( nC2 ){ // examen de la 2eme classe
  case CLASS_TYPE_ARCANE_ARCHER:
  case CLASS_TYPE_ASSASSIN:
  case CLASS_TYPE_BLACKGUARD:
  case CLASS_TYPE_DIVINE_CHAMPION:
  case CLASS_TYPE_DRAGON_DISCIPLE:
  case CLASS_TYPE_DWARVEN_DEFENDER:
  case CLASS_TYPE_PALE_MASTER:
  case CLASS_TYPE_SHADOWDANCER:
  case CLASS_TYPE_SHIFTER:
  case CLASS_TYPE_WEAPON_MASTER: bPrestige = 10 ; break ;
  case CLASS_TYPE_HARPER: bPrestige = 5 ; break ;
}
// si elle est prestige verifier si incomplete et si non poursuivie
// interdit l'ouverture d'une 3eme classe tant que pas fini.
if( (bPrestige !=0) && (nL2< bPrestige) && (nP>2) ) bAlert=TRUE ;
if( bAlert ){
  SendMessageToPC(oPC, "" );
  SendMessageToAllDMs(""+GetName(oPC)+"");
  if( bPasseDroit ){
      SendMessageToPC(oPC, "" );
      SendMessageToAllDMs(GetName(oPC)+"");
  } else {
      SetXP(oPC, nXP);
      DelayCommand(5.0,SetXP(oPC, nXP2));
      return ;
  }
}

bPrestige = 0 ;
switch( nC3 ){ // examen de la 3eme classe
  case CLASS_TYPE_ARCANE_ARCHER:
  case CLASS_TYPE_ASSASSIN:
  case CLASS_TYPE_BLACKGUARD:
  case CLASS_TYPE_DIVINE_CHAMPION:
  case CLASS_TYPE_DRAGON_DISCIPLE:
  case CLASS_TYPE_DWARVEN_DEFENDER:
  case CLASS_TYPE_PALE_MASTER:
  case CLASS_TYPE_SHADOWDANCER:
  case CLASS_TYPE_SHIFTER:
  case CLASS_TYPE_WEAPON_MASTER: bPrestige = 10 ; break ;
  case CLASS_TYPE_HARPER: bPrestige = 5 ; break ;
}
// si elle est prestige verifier si incomplete et si non poursuivie
// si commencee, on doit la poursuivre.
if( (bPrestige !=0) && (nL3< bPrestige) && (nP!=3) ) bAlert=TRUE ;
if( bAlert ){
  SendMessageToPC(oPC, "" );
  SendMessageToAllDMs(""+GetName(oPC)+"");
  if( bPasseDroit ){
      SendMessageToPC(oPC, "" );
      SendMessageToAllDMs(GetName(oPC)+"");
  } else {
      SetXP(oPC, nXP);
      DelayCommand(5.0,SetXP(oPC, nXP2));
      return ;
  }
}

// condition 2 : si 3eme classe ouverte, doit avoir 4 niveaux dans les 2 autres.
if( (nP==3) && (nL1<4 || nL2<4) ) bAlert=TRUE ;
if( bAlert ){
  SendMessageToPC(oPC, "" );
  SendMessageToAllDMs(""+GetName(oPC)+"");
  if( bPasseDroit ){
      SendMessageToPC(oPC, "" );
      SendMessageToAllDMs(GetName(oPC)+"");
  } else {
      SetXP(oPC, nXP);
      DelayCommand(5.0,SetXP(oPC, nXP2));
      return ;
  }
}
// condition 3 : si 3eme classe ouverte, doit progresser de 4 niveaux avant de choisir a nouveau.
if( (nP!=3) && (nL3>0) && (nL3<4) ) bAlert=TRUE ;
if( bAlert ){
  SendMessageToPC(oPC, "" );
  SendMessageToAllDMs(""+GetName(oPC)+"");
  if( bPasseDroit ){
      SendMessageToPC(oPC, "" );
      SendMessageToAllDMs(GetName(oPC)+"");
  } else {
      SetXP(oPC, nXP);
      DelayCommand(5.0,SetXP(oPC, nXP2));
      return ;
  }
}

  object oPass = GetItemPossessedBy(oPC, "PasseNiveau");

if(nLv == 12 || nLv == 16 || nLv == 21 || nLv == 22 || nLv == 24 || nLv >= 26)
{
  if(GetIsObjectValid(oPass))
  {
      SendMessageToPC(oPC, "Vous avez eu l'accord d'un MJ pour augmenter de niveau." );
      DestroyObject(oPass);
  }
  else
  {
      SendMessageToPC(oPC, "Vous ne pouvez passer au niveau " + IntToString(nLv) + " sans l'autorisation d'un MJ." );
      SetXP(oPC, nXP);
      DelayCommand(5.0,SetXP(oPC, nXP2));
      }
  }
string sLevel = IntToString(nLv);
string sAreaName = GetName(GetArea(oPC));
SendMessageToAllDMs (sPC+" a atteint le niveau "+sLevel+" dans "+sAreaName);
// controle multiclasse : mise a jour
  SetLocalInt(oPC,"LEVEL1",GetLevelByPosition(1,oPC));
  SetLocalInt(oPC,"CLASS1",GetClassByPosition(1,oPC));
  SetLocalInt(oPC,"LEVEL2",GetLevelByPosition(2,oPC));
  SetLocalInt(oPC,"CLASS2",GetClassByPosition(2,oPC));
  SetLocalInt(oPC,"LEVEL3",GetLevelByPosition(3,oPC));
  SetLocalInt(oPC,"CLASS3",GetClassByPosition(3,oPC));
}
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.
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Ton pire cauchemard
Ecuyer
Inscrit le: 24 Avr 2006
Messages: 40
Répondre en citant
Posté le : 23/05/2006 17:54:04 Sujet du message :

Ok j'essaye
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé MSN Messenger Ignorer l'utilisateur
 
ansquer
Héros
Inscrit le: 11 Déc 2005
Messages: 264
Localisation: MorBihan
Répondre en citant
Posté le : 14/06/2006 17:22:41 Sujet du message :

J'ai bien suivi vos explications ... mais il faut croire que ça n'est pas suffisant pour moi Surprised

Voilà mon cas :
- Au démarage le PJ arrive à poil avec un livre de règles et les "passniv x NODROP"

Donc dans le OnClientEnter :
NWScript :
void main()
{
// Declarations
object oItem; // Definir oItem en objet
object oPC = GetEnteringObject(); // On defini le joueur
int iClasseDuJoueur = GetClassByPosition(1, oPC); // On prend la classe du joueur

if(GetIsPC(oPC) && !GetIsDM(oPC))
{
  if (GetXP(oPC) < 1) //Si le joueur n'as pas de xp
  {
  oItem = GetFirstItemInInventory(oPC);
  while (GetIsObjectValid(oItem)) //Boucle qui vide l'inventaire
  {
    DestroyObject(oItem); //Destruction des Items
    oItem = GetNextItemInInventory(oPC);
  }

  DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARMS, oPC)); ///////////
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_ARROWS, oPC)); //
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_BELT, oPC)); // E  O
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOLTS, oPC)); // F  B
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_BOOTS, oPC)); // F  J  S
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_BULLETS, oPC)); // A  E  L
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC)); // C  T  O
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_CLOAK, oPC)); // E  S  T
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC)); //      S
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTHAND, oPC)); // L  P
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_LEFTRING, oPC)); // E  A
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_NECK, oPC)); // S  R
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTHAND, oPC)); //
  DestroyObject(GetItemInSlot(INVENTORY_SLOT_RIGHTRING, oPC)); ///////////

 
  AssignCommand(oPC, TakeGoldFromCreature(GetGold(oPC), oPC, TRUE));

// Donner objets

object oLivre = CreateItemOnObject("Liv_regles", oPC);
AssignCommand(oPC, ActionEquipItem(oLivre, INVENTORY_SLOT_CHEST));

object oPass1 = CreateItemOnObject("passniv4NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass1, INVENTORY_SLOT_CHEST));
object oPass2 = CreateItemOnObject("passniv6NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass2, INVENTORY_SLOT_CHEST));
object oPass3 = CreateItemOnObject("passniv7NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass3, INVENTORY_SLOT_CHEST));
object oPass4 = CreateItemOnObject("passniv8NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass4, INVENTORY_SLOT_CHEST));
object oPass5 = CreateItemOnObject("passniv9NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass5, INVENTORY_SLOT_CHEST));
object oPass6 = CreateItemOnObject("passniv10NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass6, INVENTORY_SLOT_CHEST));
object oPass7 = CreateItemOnObject("passniv11NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass7, INVENTORY_SLOT_CHEST));
object oPass8 = CreateItemOnObject("passniv12NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass8, INVENTORY_SLOT_CHEST));
object oPass9 = CreateItemOnObject("passniv13NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass9, INVENTORY_SLOT_CHEST));
object oPass10 = CreateItemOnObject("passniv14NODROP", oPC);
AssignCommand(oPC, ActionEquipItem(oPass10, INVENTORY_SLOT_CHEST));

  //Remet a 1 les XP
  SetXP(oPC, 1);
  }
}
}
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.


Puis dans le OnPlayerLvlup
NWScript :
void main()
{
object oPC = GetPCLevellingUp();
string sPC = GetName (oPC);
int iLevel = GetHitDice(oPC);
string sLevel = IntToString(iLevel);
string sAreaName = GetName(GetArea(oPC));
int iTest = 0 ;
int iStopXP = ((iLevel * (iLevel - 1)) / 2) * 1000 -1;

// autorisation pour lvl
if (( iLevel == 4 ||
iLevel == 6 ||
iLevel == 7 ||
iLevel == 8 ||
iLevel == 9 ||
iLevel == 10 ||
iLevel == 11 ||
iLevel == 12 ||
iLevel == 13 ||
iLevel == 14 ) && ( GetItemPossessedBy(oPC, "Passniveau" + IntToString(iLevel)+ "NODROP") == OBJECT_INVALID ))
{
SetXP(oPC,iStopXP);
SendMessageToPC(oPC,"Il vous manque l'autorisation d'un MD pour passer ce niveau.");
}
// ici on est sur qu'il passe le lvl &lt;------
// effacer les autorisations en trop
object oBon = GetFirstItemInInventory(oPC);
string sResbon;
while(oBon != OBJECT_INVALID)
{
sResbon = GetResRef(oBon);
if(GetStringLeft(sResbon, 7) == "Passniveau")
{
if(StringToInt(GetStringRight(sResbon, GetStringLength(sResbon)-7)) <= iLevel)
DestroyObject(oBon);
}
oBon = GetNextItemInInventory(oPC);
}
}
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.


Il en résulte :
- Rien n'apparait (même pas le livre) quand le PJ arrive (mais il est à poil quand même Very Happy )
- Les niveaux sont bien bloqués mais ... comment les débloquer ?

Donc mes petites questions pour vous Oh savants du scriptage !

- Comment faire pour donner des objets à l'arrivée "OnClientEnter" ?
- Comment faire pour que ces objets soient invisibles (les Passniveau) ?
- Que doit faire le MD pour donner l'autorisation (il ya un script aussi là ou il faut un baton de MD) ?

Merci d'avance Very Happy
_________________
L'année de l'île Tome 1 Un roman ecxeptionnel !
Urban Rivals ! Mettez " ansker " en pseudo de votre parrain svp
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 14/06/2006 17:58:31 Sujet du message :

déjà pour la première question, trés simple :

NWScript :
object oLivre = CreateItemOnObject("Liv_regles", oPC);
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.


Liv_regles correspond au tag je pense de ton objet, or, CreateItemOnObject demande la reference! donc pas de majuscule déjà Wink

pour la deuxieme question, les objets ne peuvent pas être mis invisible sauf les peaux, tu as aussi le moyen de la variable sur le PJ

pour la troisieme, le MJ a juste a donné l'objet je pense, si le pnj a l'objet pass x niveau, et qu'il veut passer x, il suffit juste qu'il est (avec un petit script qui refare si il la ou pas).

voila
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
ansquer
Héros
Inscrit le: 11 Déc 2005
Messages: 264
Localisation: MorBihan
Répondre en citant
Posté le : 14/06/2006 19:33:17 Sujet du message :

Merci ^^
- Pour donner des objets c'est bon.

- Pour les PasseNiveaux c'est donc au MD de les donner au PJ... Et ensuite quand le PJ passe son niveau ca marche et le Pass disparait ?

Parceque pour moi, le PJ passe un niveau mais c'est celui précédent (le 3 alors qu'il devrait passer le 4 ) et le message "Il vous faut l'autorisation d'un MD" apparait encore ... Le pass ne disaprait pas ???

Me manque un bout de quelque chose là non ?Surprised
_________________
L'année de l'île Tome 1 Un roman ecxeptionnel !
Urban Rivals ! Mettez " ansker " en pseudo de votre parrain svp
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 15/06/2006 17:17:49 Sujet du message :

a la normal, si je PJ a le passe de son level, alors l'objet se detruira lorsqu'il passera son niveau...
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
ansquer
Héros
Inscrit le: 11 Déc 2005
Messages: 264
Localisation: MorBihan
Répondre en citant
Posté le : 15/06/2006 17:36:46 Sujet du message :


Black Knight a écrit :
a la normal, si je PJ a le passe de son level, alors l'objet se detruira lorsqu'il passera son niveau...
heu ... Confused ... parfois j'ai l'impression de ne rien comprendre ...
pour moi :
- quand le MD donne le passe du level ça ne marche pas ... le PJ ne peut pas passer le level et l'objet (passeniveau) ne se détruit pas ..
_________________
L'année de l'île Tome 1 Un roman ecxeptionnel !
Urban Rivals ! Mettez " ansker " en pseudo de votre parrain svp
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 15/06/2006 20:59:43 Sujet du message :

Hmm, l'erreur doit etre celle-ci :

if(StringToInt(GetStringRight(sResbon, GetStringLength(sResbon)-7)) <= iLevel)

car je pense que le GetStringLength prend pas le level, mais une lettre, donc aprés ça fait un peu n'importe quoi. Pour voir si le bug vien d'ici tu fait ça :

NWScript :
SendMessageToPC(oPC, "Le tag du GetStringLength : "+GetStringRight(sResbon, GetStringLength(sResbon)-7));
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.


tu rajoute ça, et tu vois si il y a le message
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
ansquer
Héros
Inscrit le: 11 Déc 2005
Messages: 264
Localisation: MorBihan
Répondre en citant
Posté le : 16/06/2006 19:46:10 Sujet du message :

Merci Black ... voici le résultat de la manip Smile peut-etre que ca te parlera et que tu pourras m'aiguiller pour la suite.

-le PJ est lvl 3
-il obtient assez de XP.
(messages en jaune = messages qui apparaissent dans la fenêtre du jeu)
Votre perso a assez de point pour monter de niveau
-le MD donne passeur de niveau 04 (tag = "passniv4NODROP")
-Le PJ a la fenêtre de passage de niveau qui s'ouvre (mais c'est celle du lvl 3 en fait Sad )
Il vous manque l'autorisation d'un MD pour passer ce niveau
Le tag du GetStringLength= de niveau
Le tag du GetStringLength= de niveau
Le tag du GetStringLength=

(oui oui 3 fois Surprised)
_________________
L'année de l'île Tome 1 Un roman ecxeptionnel !
Urban Rivals ! Mettez " ansker " en pseudo de votre parrain svp
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 16/06/2006 22:04:54 Sujet du message :

Hmm, tu as testé les autres niveau? si ils marchent, c'est qu'il faut retouché un petit peu au level 3 alors. Reponds moi et je verrais pour te faire ça demain, la j'ai envi de ZzzZZ lol

Black
_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
ansquer
Héros
Inscrit le: 11 Déc 2005
Messages: 264
Localisation: MorBihan
Répondre en citant
Posté le : 17/06/2006 09:51:55 Sujet du message :

comment passer les autres niveaux comme il ne passe pas le 4 ?

tu veux dire : changer le script?
_________________
L'année de l'île Tome 1 Un roman ecxeptionnel !
Urban Rivals ! Mettez " ansker " en pseudo de votre parrain svp
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web du posteur Ignorer l'utilisateur
 
Black Knight
Grand Maître Chanteur du Conseil
Inscrit le: 27 Oct 2005
Messages: 1031
Localisation: Fin fond du trou du cul du monde
Répondre en citant
Posté le : 17/06/2006 10:18:30 Sujet du message :

Soit tu prends un joueur déjà plus du level 4 lol, soit tu enleve ça :

NWScript :
iLevel == 4 ||
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.

_________________
[http]
 
Revenir en haut Voir le profil de l'utilisateur Envoyer un message privé Ignorer l'utilisateur
 
Montrer les messages depuis :
Page 1 sur 2 ¤ Aller à la page 1, 2  Suivante


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 97.491ms