JeuxOnLineForumsPlusConnectés : 581 (sites) | 1065 (forums)Créer un compte
Forum jeux-vidéo>Neverwinter Nights
Maskado
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Ne pas avoir de double RSS
   
Répondre
Partager Outils Rechercher
Avatar de Asuke
Asuke
Roi
 
Avatar de Asuke
 
Question

Ne pas avoir de double

Salut !
J'ai cherché partout mais je ne trouve pas la réponses à mes questions, donc j'en suis reduit à poster un nouveau message

Question 1
Dès que le PJ entre sur le module on lui donne un objet important, si il le jette tant pis pour lui ... mais si quelqu'un d'autre la ramasse ça se corse car personne ne doit l'avoir en double. Je voudrai savoir si il y aurai pas un script pour eviter d'avoir un objet en double (voir triple ou au dela ^^) dans son inventaire mais de garder tout de même un exemplaire.
J'ai penser que mettre le script de verification dans chaque entré de zone, evitons le onheartbeat si possible

Question 2
Ce serai bien si l'objet dont je parle si dessus ne soit pas volable, donc je voudrai savoir si en mettant l'objet en 'objet de quète' ça le rend involable ? (jamais tester et pas l'occazzion donc je demande en passant ) sinon, y a-t-il une autre solution ?

Question 3
Au debut du module je voudrai que le personnage perde tout ses objets si il est niveau 1 (après avoir tout perdu, evidement on lui donne l'objet de la question 1 ^^), j'ai vu un poste la dessus mais y a de la complication avec le fait de mettre les objets perdus dans un contenant ou autre ... juste les detruire pour moi ^^ (si le pj est au lv 1 ...)

Ce sera tout, merci d'avance.
@+
Lien direct vers le message - Vieux
Avatar de Asuke
Asuke
Roi
 
Avatar de Asuke
 
Ah j'allais oublier ... pour la question 3 il doit aussi perdre son argent.
Lien direct vers le message - Vieux
Avatar de Caarheim/Mougeot
Caarheim/Mougeot [Epsi]
Alpha & Oméga
 
Avatar de Caarheim/Mougeot
 
tu peux aussi essayer de mettre un script dans le OnAcquireItem qui verifie si l objet est deja present.

pour ce qui est de retirer tous les objet d un pnj qd il rentre dans le module si il est nivo1, il y beaucoup de module qui le font. il te reste juste a en DL un et de regarder ce qui est fait.
Lien direct vers le message - Vieux
Avatar de Asuke
Asuke
Roi
 
Avatar de Asuke
 
Question 4
Tant qu'on y est ...
J'aimerai que dès que la créature invoqué meurt, l'invocateur de la créature perde des pts de vie (disons qu'il perd la moitier des pts de vie total de la créature et que si ce nombre depasse les pts de vie de l'invocateur, il meurt :P)
Lien direct vers le message - Vieux
Avatar de Asuke
Asuke
Roi
 
Avatar de Asuke
 
Citation:
Provient du message de caarheim
tu peux aussi essayer de mettre un script dans le OnAcquireItem qui verifie si l objet est deja present.

pour ce qui est de retirer tous les objet d un pnj qd il rentre dans le module si il est nivo1, il y beaucoup de module qui le font. il te reste juste a en DL un et de regarder ce qui est fait.
Merci de ta reponse, mais ça m'aide pas plus car il faut en trouver un de module comme ça
Lien direct vers le message - Vieux
Avatar de Mitilifrit
Mitilifrit
Roi
 
Avatar de Mitilifrit
 
Je propose mon truc a moi, a l'entrer du PJ on verifie si celui ci est lvl 1 et s'il l'est on lui donne son objet et on le fait passer lvl 2 comme sa il pourra plus l'avoir mais pour qu'on ne puissent pas le vendre ou méme je jetter c'est un truc qui faut faire dans l'objet (faut selectionner "Objet de quéte" et "objet volé") mais pour pas qu'il puisse se dropper (se jeter) sa je sais pas comment faire.
alors voila le code a mettre dans le OnClientEnter dans les propriétés de ton mod:
Code:
void main()
{
object oPC = GetEnteringObject();

if (GetHitDice(oPC)==1) //on verifie si le PJ est lvl 1 et on le fais passer au lvl 2 comme sa plus de pb

CreateItemOnObject ("Resref de l'item a donner",oPC);

GiveXPToCreature(oPC,1000);

}
Sinon j'ai un autre truc pour toi c'est le faire dans un dialogue.
Explication:
un dialogue:
-Salut tu as l'item? alors voila l'item (E1)
-Non tu as déja l'item (E2)


Alors dans la condition d'execution de (E1) tu mets

Code:
int StartingConditional()
{
object oPC = GetPCSpeaker();

if (GetItemPossessedBy(oPC, "ta gde ton item") == OBJECT_INVALID)

return FALSE;

return TRUE;
}
Et dans l'action conséquence de (E1)

Code:
void main()
{
object oPC= GetLastSpeaker ();
CreateItemOnObject ("resref de ton item", oPC);
}
Donc voila sa devrait aller mais j'ai pas fait avec l'éditeur alors c'est pas sûr que sa marche et si sa marche bin c'est que je commence a connaitre quelques fonctions par coeur
Lien direct vers le message - Vieux
Avatar de Archamedes_Fr
Archamedes_Fr
Alpha & Oméga
 
Avatar de Archamedes_Fr
 
Un bout de mon script OnClientEnter.

Suppression de tout l'équipement, donne un vêtement et équipe le personnage avec, donne de l'or et 1 point d'expérience, au cas où le joueur ferai une Déco-reco avant d'avoir un point d'expérience.

Code PHP:
void main()
{

////////////////////////////////////////////////////////////////////////////////
//  Variables d'identification  ////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
object oPC GetEnteringObject();
string sCDK=GetPCPublicCDKey(oPC);
int nDM=GetIsDM(oPC);

////////////////////////////////////////////////////////////////////////////////
//  variables de suppression de l'équipements  /////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
object oEquip GetFirstItemInInventory(oPC);
object oNewChest;
int nGold 0;
int i 0;
int nNumSlot NUM_INVENTORY_SLOTS;
int nChest INVENTORY_SLOT_CHEST;

////////////////////////////////////////////////////////////////////////////////
//  Gestion de l'équipement lors de l'arrivée sur le serveur  //////////////////
////////////////////////////////////////////////////////////////////////////////
if(GetIsPC(oPC) && !(GetXP(oPC)) && !nDM)
{

    
//Destruction des objets dans l'inventaire
    
while (GetIsObjectValid(oEquip))
    {
        
DestroyObject(oEquip);
        
oEquip GetNextItemInInventory(oPC);
    }
    
//Destruction des objets équipés
    
for(i<= nNumSloti++)
    {
        
object oInv GetItemInSlot(ioPC);
        
DestroyObject(oInv);
    }
    
//Création du vêtement
    
int STARTING_GOLD=0;
    
oNewChest CreateItemOnObject("NW_CLOTH022"oPC);
    
AssignCommand(oPCActionEquipItem(oNewChestnChest));

    if(
GetLevelByClass(CLASS_TYPE_BARBARIANoPC)) STARTING_GOLD=d4(4)*10;
    else if(
GetLevelByClass(CLASS_TYPE_BARDoPC)) STARTING_GOLD=d4(4)*10;
    else if(
GetLevelByClass(CLASS_TYPE_CLERICoPC)) STARTING_GOLD=d4(5)*10;
    else if(
GetLevelByClass(CLASS_TYPE_DRUIDoPC)) STARTING_GOLD=d4(2)*10;
    else if(
GetLevelByClass(CLASS_TYPE_FIGHTERoPC)) STARTING_GOLD=d4(6)*10;
    else if(
GetLevelByClass(CLASS_TYPE_MONKoPC)) STARTING_GOLD=d4(5);
    else if(
GetLevelByClass(CLASS_TYPE_PALADINoPC)) STARTING_GOLD=d4(6)*10;
    else if(
GetLevelByClass(CLASS_TYPE_RANGERoPC)) STARTING_GOLD=d4(6)*10;
    else if(
GetLevelByClass(CLASS_TYPE_ROGUEoPC)) STARTING_GOLD=d4(5)*10;
    else if(
GetLevelByClass(CLASS_TYPE_SORCERERoPC)) STARTING_GOLD=d4(3)*10;
    else if(
GetLevelByClass(CLASS_TYPE_WIZARDoPC)) STARTING_GOLD=d4(3)*10;
    else 
STARTING_GOLD=d4(4)*10;

    
GiveGoldToCreature(oPCSTARTING_GOLD GetGold(oPC));
    
GiveXPToCreature(oPC1);
}

////////////////////////////////////////////////////////////////////////////////
//  OBJETS DIVERS   ////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

if(GetIsObjectValid(GetItemPossessedBy(oPC,"emotewand"))==FALSE)
    
CreateItemOnObject("emotewand"oPC);


Lien direct vers le message - Vieux
Avatar de Archamedes_Fr
Archamedes_Fr
Alpha & Oméga
 
Avatar de Archamedes_Fr
 
Objet non-droppable ou non vendable un des deux scripts que tu trouvera ici, je sais plus lequel, test les deux sur un module test avant.

http://nwvault.ign.com/Files/scripts...97321570.shtml

http://nwvault.ign.com/Files/scripts...61068140.shtml
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Chouette un quizz !

Question 1
Bah tu as plusieurs solutions : il le jette (auquel cas tu peux faire un script simple pour qu'il se détruise 6 minutes après s'il n'a pas réintégré l'inventaire). L'autre solution, plus logique, est de mettre dans ton OnAcquireItem ce script :
Code PHP:
void main()
{
object oItem GetModuleItemAcquired();
string sTagVerif GetTag(oItem);
string sTag "tag_de_ton_item";
if(
sTagVerif == sTag)
 {
 
object oPC GetItemPossessor(oItem);
 
object oItInv GetFirstItemInInventory(oPC);
 while(
GetIsObjectValid(oItInv))
  {
  
string sInv GetTag(oItInv);
  if(
sInv == sTag)
   {
   
DestroyObject(oItInv,0.0);
   }
  
oItInv GetNextItemInInventory(oPC);
  }
 }

A noter que ce script supprimera tous les objets de l'inventaire ayant le même tag que l'objet acquired et gardrera l'acquired... Ca permet d'en supprimer plusieurs si il y en a plusieurs, mais ç peut avoir des conséquences dans certains cas. Si tu préfère simplement supprimer l'objet arrivant si il a son double dans l'inventaire, remplace
Code PHP:
{
 
DestroyObject(oItInv,0.0);

par
Code PHP:
{
 
DestroyObject(oItem,0.0);

Note : les 0.0 ne sont pas obligatoires en théorie, je les utilise par souci protocolaire, tu peux les enlever si tu veux

Question 2
Non. Il sera toujours volable. Tu peux faire un script sur l'objet qui l'empêche d'être volé et avertit le voleur que l'objet qu'il essaye de voler est involable. Je veux bien te le faire, il suffit de demander.

Question 3
Bah pareil, tu met dans le OnEnter du module un script qui vérifie le niveau du perso et lui enlève tous ses objets... (Pas très gentil si le mec se connecte plusieurs fois et qu'il n'a pas gagné de niveau entre temps) ... et son or.
Ca devrait ressembler à ça :
Code PHP:
void main()
{
object oPC GetEnteringObject();
if(
GetIsPC(oPC))
 {
 
int n1 GetLevelByPosition(1,oPC);
 
int n2 GetLevelByPosition(2,oPC);
 
int n3 GetLevelByPosition(3,oPC);
 
int nG n1+n2+n3;
 if(
nG==1)
  {
  
object oIt GetFirstItemInInventory(oPC);
  
int nGold GetGold(oPC);
  
GiveGoldToCreature(oPC,-nGold);
  while(
GetIsObjectValid(oIt))
   {
   
DestroyObject(oIt);
   
oIt GetNextItemInInventory(oPC);
   }
  }
 }

Avec des nuances évidemment Il peut y avoir deux ou trois trucs incertains, mais il y a 75% de chances pour que ça marche.

Question 4
Soit plus précise... En théorie, si c'est une créature invoquée normale, tu dois modifier le fichier de convocation, ou bien utiliser ton OnHeartBeat (je ne te dis pas l'état de ton CPU à la sortie )... Si c 'est un cas spécial (famillier, ou même une créature issue d'un script autre), alors il faut modifier le script correspondant.
Si tu veux un coup de main la dessus, demande moi, c'est déjà plus compliqué.

Voili voilou... Un dernière chose au risque de te faire la morale, essaye de demander un poil plus gentiment la prochaine fois, ça fait toujours plaisir aux personnes qui passent du temps à t'aider et qui ne sont pas obligées

Ange Musicien

PS : après avoir lu les posts d'Archemedes... Regarde ma technique de vérif des classes, elle est plus pratique...
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Archamédes, désolé de te décevoir, mais tu n'as pas bien suivi ce qu'elle demande : question 2, objet non droppable ou non vendable n'égale pas objet non volable ... et puis tu utilises la technique du coffre dont elle ne voulait pas entendre parler... Ah là là... C'est pas parce qu'il demande pas gentiment qu'il faut essayer de l'embrouiller

Edit // Autre chose : quand tu fais "takegold", en théorie c'est un perso qui l'exécute... Donc tu es sensé mettre :
GiveGold...(oPC,-nombreaenlever);
C'est tout...
Lien direct vers le message - Vieux
Avatar de Archamedes_Fr
Archamedes_Fr
Alpha & Oméga
 
Avatar de Archamedes_Fr
 
Gniiii ?

Mon script concerne pas les coffres
Il vide l'inventaire à un personnage qui n'a aucun point d'expérience.

Parmi les deux scripts que je propose du vault, un des deux gère les objets uniques, non vendables, non droppable et non volables. Ok, j'aurais pu préciser.
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Désolé j'ai lu en diagonale
Bon sinon tu es sur que TakeGold marche ?
Lien direct vers le message - Vieux
Avatar de Archamedes_Fr
Archamedes_Fr
Alpha & Oméga
 
Avatar de Archamedes_Fr
 
heu... il ne marche pas comme ça. J'ai compris bien plus tard.
Il est resté en commentaire dans mon fichier. Je l'enlève.
Lien direct vers le message - Vieux
Avatar de Ange Musicien
JOL Ange Musicien
Alpha & Oméga
 
Avatar de Ange Musicien
 
Me semble que TakeGold est utilisé uniquement par des créatures... A la fin ou au cours d'une conversation par exemple. Très pratique... M'enfin ce n'est rien d'autre que 2Give+un message server... Plus personne me suit ? Tant pis.
Lien direct vers le message - Vieux
Avatar de Archamedes_Fr
Archamedes_Fr
Alpha & Oméga
 
Avatar de Archamedes_Fr
 
Ok, sauf qu'il me semble que GiveGoldToCreature négatif ne fonctionne pas

Code PHP:
GiveGoldToCreature(oPCSTARTING_GOLD GetGold(oPC)); 
devrait dans le cas du moine lui baisser son montant de départ.

Le moine démarre à 20 pOr, je lui donne 5d4, et il commence toujours à 20

Yapluka décortiquer GiveGold pour comprendre pourquoi elle bloque à 0.
Lien direct vers le message - Vieux
Répondre
Les forums JOL > Forum jeux-vidéo > Neverwinter Nights > NWN - Maskado > Ne pas avoir de double
   

Outils Rechercher
Rechercher:

Recherche avancée

Les vidéos de Neverwinter Nights RSS
  • Aucune vidéo pour le moment...
Thème visuel : Fuseau horaire GMT +1. Il est actuellement 14h35.
   

© JeuxOnLine, le site des MMO, MMORPG et MOBA. Tous droits réservés. - Conditions générales d'utilisation - Conditions d'utilisation des forums - Traitement des données personnelles - ! Signaler un contenu illicite