La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 23/11/2024 06:36:09
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Fantilir Chevalier Messages: 80 |
Salutations,
voila, après plusieurs heures de recherche à propos du "OnPlayerLvlUp" sur différents site, comprenant celui-ci, je ne trouve pas ce que je cjercje à propos du "OnPlayerLvlUp". Ce que je voudrais c'est que lorsque le PJ monte de niveau, si il fait parti de "telle classe", il gagne "telle chose" à "tel niveau". Plus clairement ça se traduit comme ça : Si le PJ est de la classe "X1", alors, il gagne "Y1" au niveau "Z1" il gagne "Y2" au niveau "Z2" etc... Si le PJ est de la classe "X2" alors, il gagne "Y1" au niveau "Z1" il gagne "Y2" au niveau "Z2" etc... ______________ Si quelqu'un savait m'aider se serait sympa, je suis une daube en script comme vous pouvez le voir - Fantilir qui ne sait que bidouiller - |
Revenir en haut | |
Klemmth Seigneur Messages: 176 Localisation: france |
tu devrais arriver à ce que tu veux comme ca :
NWScript : int GetLevel( object oCreature ) { int nLevel = GetLevelByPosition( 1, oCreature ) + GetLevelByPosition( 2, oCreature ) + GetLevelByPosition( 3, oCreature ); return nLevel; } void main() { object oPC = GetPCLevellingUp(); int nLevel = GetLevel( oPC ); if ( GetLevelByClass( CLASS_TYPE_ROGUE, oPC ) != 0 ) { switch ( nLevel ) { case 2: //tu remplaces les ... par ce que tu veux qu'il se passe quand le PJ est de la classe rogue et qu'il monte au niveau 2 ...; break; case 3: //meme chose pour le niveau 3 ...; break; //etc... } } } _________________ ... |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Réponse rapide nette et précise, vais tester ça tout de suite merci Klemmth ^^.
- Fantilir content ( peut-être temporairement ) - |
Revenir en haut | |
zogzog59 Grand Chevalier Messages: 123 |
slt c pas mal ce script ca va me servir en attendant de trouver quelqu'un qui puisse me créer mes classes de prestiges personnalisées ....
mais quel commande doit ton mettre si on veut qu'un pj au lvl 3 par ex ait un pt en plus en CONT , force...?? |
Revenir en haut | |
Klemmth Seigneur Messages: 176 Localisation: france |
ApplyEffectToObject( DURATION_TYPE_INSTANT, EffectAbilityIncrease( ABILITY_STRENGTH, 1 ), oPC );
_________________ ... |
Revenir en haut | |
zogzog59 Grand Chevalier Messages: 123 |
merci klemmth c cool ...
|
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Tout marche au poil, enfin il semblerait.
Je dis semblerait parce que j'ai donc fait un script avec ce que tu m'as donné (+ les effets "gagnés" grâce au passage de niveau, ce que j'ai ajouté ) pour une de mes classes de prestige, le voici : NWScript :
int GetLevel( object oCreature ) { int nLevel = GetLevelByPosition( 1, oCreature ) + GetLevelByPosition( 2, oCreature ) + GetLevelByPosition( 3, oCreature ) + GetLevelByPosition( 4, oCreature ) + GetLevelByPosition( 5, oCreature ) + GetLevelByPosition( 6, oCreature ) + GetLevelByPosition( 7, oCreature ) + GetLevelByPosition( 8, oCreature ) + GetLevelByPosition( 9, oCreature ) + GetLevelByPosition( 10, oCreature ) + GetLevelByPosition( 11, oCreature ) + GetLevelByPosition( 12, oCreature ) + GetLevelByPosition( 13, oCreature ) + GetLevelByPosition( 14, oCreature ) + GetLevelByPosition( 15, oCreature )+ GetLevelByPosition( 16, oCreature ) + GetLevelByPosition( 17, oCreature ) + GetLevelByPosition( 18, oCreature ) + GetLevelByPosition( 19, oCreature ) + GetLevelByPosition( 20, oCreature ); return nLevel; } void main() { object oPC = GetPCLevellingUp(); int nLevel = GetLevel( oPC ); if ( GetLevelByClass( CLASS_TYPE_CRAZY_ALCHEMIST, oPC ) != 0 ) { switch ( nLevel ) { case 1: int nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_SEARCH, nValue ); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eSkill, oPC ); case 2: //tu remplaces les ... par ce que tu veux qu'il se passe quand le PJ est de la classe rogue et qu'il monte au niveau 2 int nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_ALCHEMY, nValue ); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eSkill, oPC ); int nSave = SAVING_THROW_ALL; int nValue = 5; int nSaveType = SAVING_THROW_TYPE_ALL; effect eResistance = EffectSavingThrowIncrease( nSave, nValue, nSaveType ); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eResistance, oPC ); break; case 3: //meme chose pour le niveau 3 int nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_CRAFT_POTION, nValue ); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eSkill, oPC );; break; //etc... } } } Le script marche et notemment au lvl 2 mon perso reçoit bien le don résistance élémentaire, mais pour ce qui est des points de compétences en bonus, ils ne sont pas affichés en bonus, je ne sais pas si c'est normal. Mes compétences sont bien créées et intégrées au jeu. En fait c'est censé fonctionner comme un "skillfocus" ( talent ), mais comme les lignes que l'on créé dans le "feat.2da" ne sont que des dons "vides" car on ne peut pas leur donner de propriété autrement qu'en leur attribuant un script, je compte mettre mes gains de skills en temps que don mais je ne peses aps que ça s'affichera plus pour autant sur la fueille de perso. D'ailleurs c'est la même chose que pour ma résistance, je ne sais pas si elle est effectivement gagnée par le personnnage joueur. Je vais essayer de tester tout ça en balançant des dégâts élémentaires sur mon pj grâce à des pièges. Une idée quelqu'un ? |
Revenir en haut | |
Klemmth Seigneur Messages: 176 Localisation: france |
oula oula, il me semble que t'as rajouté beaucoup de trucs inutiles...
Je pense avoir mal compris ta demande... J'ai pensé que tu désirais récupérer le lvl général du perso pour lui mettre des améliorations en fonction, mais il semble que tu veuilles utiliser ca pour des classes de prestige, donc en utilisant le lvl dans cette classe uniquement. Voila ce que ca pourrait donc donner après correction : NWScript : int GetLevel( object oCreature ) { int nLevel = GetLevelByPosition( 1, oCreature ) + GetLevelByPosition( 2, oCreature ) + GetLevelByPosition( 3, oCreature ); return nLevel; } void main() { object oPC = GetPCLevellingUp(); int nLevel = GetLevel( oPC ); int nLevelClass; int nValue; if ( GetLevelByClass( CLASS_TYPE_CRAZY_ALCHEMIST, oPC ) != 0 ) { nLevelClass = GetLevelByClass( CLASS_TYPE_CRAZY_ALCHEMIST, oPC ); switch ( nLevelClass ) { case 1: nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_SEARCH, nValue ); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eSkill, oPC ); break; case 2: //tu remplaces les ... par ce que tu veux qu'il se passe quand le PJ est de la classe rogue et qu'il monte au niveau 2 nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_ALCHEMY, nValue ); ApplyEffectToObject( DURATION_TYPE_INSTANT, eSkill, oPC ); int nSave = SAVING_THROW_ALL; nValue = 5; int nSaveType = SAVING_THROW_TYPE_ALL; effect eResistance = EffectSavingThrowIncrease( nSave, nValue, nSaveType ); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eResistance, oPC ); break; case 3: //meme chose pour le niveau 3 nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_CRAFT_POTION, nValue ); ApplyEffectToObject( DURATION_TYPE_INSTANT, eSkill, oPC );; break; //etc... } } } _________________ ... |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
OK, hum, je croyais que tu avais mis :
NWScript :
int nLevel = GetLevelByPosition( 1, oCreature ) + GetLevelByPosition( 2, oCreature ) + GetLevelByPosition( 3, oCreature ); return nLevel; parce que je n'avais cité que les 2 premiers lvls dans ma demande, donc j'avais ajouté jusque 20 ^^, c'était une mauvaise initiative. Sinon tu met pour le lvl 1 : NWScript :
nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_SEARCH, nValue ); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eSkill, oPC ); break; un effet permanent, alors pourquoi met tu ici un instantané ? : NWScript :
nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_ALCHEMY, nValue ); ApplyEffectToObject( DURATION_TYPE_INSTANT, eSkill, oPC ); ??? Je supposes que c'est une erreur, mais lequel conservé ? Je vais prendre le permanent vu que c'est une augmntation permanente, mais préviens moi si c'était l'instantané qu'il fallait prendre merci ^^. EDIT : Après courte réflexion je prends l'INSTANT vu que c'est celui que tu as modifié, tu as du oublié le second, ce qui me parait plus logique ^^ ( waaah que j'suis doué ^^ ). DOnc ceux qui utilisent le script, peut être faudra t-il changer NWScript :
nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_SEARCH, nValue ); ApplyEffectToObject( DURATION_TYPE_PERMANENT, eSkill, oPC ); break; en NWScript : nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_SEARCH, nValue ); ApplyEffectToObject( DURATION_TYPE_INSTANT, eSkill, oPC ); break; Dernière édition par Fantilir le 14/02/2005 15:40:10; édité 1 fois
|
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
ha oui et sinon j ai testé la résistance aux éléments pour le premier script, ça ne marche pas, espèrons que ton script modifié fonctionne Klemmth,
Je croise les doigts ^^. |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Bon après tests et restests ça ne marche pas, aucune trace de l'existence possible d'une résistance à tous les éléments.
Je n'ai pas essayé pour les skills vu que le résultat doit-êtr ele même, enfin ... en attendant d'avoir une réponse je vais tester quand même ^^ |
Revenir en haut | |
Klemmth Seigneur Messages: 176 Localisation: france |
normalement, il me semble qu'il faille mettre instantanée ( j'ai en effet oublié pour le premier ) car l'augementation ne doit se faire qu'un e fois : une fois qu'elle est faite, elle est faite; sinon ca l'augmenterait constamment.
Par contre pour le savingthrow, je ne suis pas sûr, donc test les 2 solutions puis vois ce qui marche... _________________ ... |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Bon, alors la résistance ne marche pas quand à mes tests sur les compétences, ils se snot avérés inutile v que je ne vois pas le résultat dans la fenêtre de messages et que je sais pas comment faire ^^.
Comment ça se peut ? Normalement tout est bon Oo. |
Revenir en haut | |
Klemmth Seigneur Messages: 176 Localisation: france |
Essaye comme ca. Ca va envoyer un message au PJ ( la montée de niveau marche ). Si tu recois bien le message mais que les ajouts ne marchent pas, c'est que il y a un problème dans les effets.
D'ailleurs, est-ce que tu es sûr que ton CLASS_TYPE_CRAZY_ALCHEMIST apparait bien dans les Constantes ? Car si ce n'est pas le cas, ca ne marchera pas... NWScript : int GetLevel( object oCreature ) { int nLevel = GetLevelByPosition( 1, oCreature ) + GetLevelByPosition( 2, oCreature ) + GetLevelByPosition( 3, oCreature ); return nLevel; } void main() { object oPC = GetPCLevellingUp(); int nLevel = GetLevel( oPC ); int nLevelClass; int nValue; if ( GetLevelByClass( CLASS_TYPE_CRAZY_ALCHEMIST, oPC ) != 0 ) { nLevelClass = GetLevelByClass( CLASS_TYPE_CRAZY_ALCHEMIST, oPC ); switch ( nLevelClass ) { case 1: nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_SEARCH, nValue ); ApplyEffectToObject( DURATION_TYPE_INSTANT, eSkill, oPC ); SendMessageToPC( oPC, "" ); break; case 2: //tu remplaces les ... par ce que tu veux qu'il se passe quand le PJ est de la classe rogue et qu'il monte au niveau 2 nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_ALCHEMY, nValue ); ApplyEffectToObject( DURATION_TYPE_INSTANT, eSkill, oPC ); int nSave = SAVING_THROW_ALL; nValue = 5; int nSaveType = SAVING_THROW_TYPE_ALL; effect eResistance = EffectSavingThrowIncrease( nSave, nValue, nSaveType ); ApplyEffectToObject( DURATION_TYPE_INSTANT, eResistance, oPC ); SendMessageToPC( oPC, "" ); break; case 3: //meme chose pour le niveau 3 nValue = 5; //de combien on augmente effect eSkill = EffectSkillIncrease( SKILL_CRAFT_POTION, nValue ); ApplyEffectToObject( DURATION_TYPE_INSTANT, eSkill, oPC );; SendMessageToPC( oPC, "" ); break; //etc... } } } _________________ ... |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Mon "CLASS_TYPE_CRAZY_ALCHIMIST" n'apparaît pas dans les constantes qu'on peut visionner dans l'éditeur de script, par contre il est visionnable - ainsi que toutes mes autres classes - dans les constantes des scripts de dialogue quand on travail avec le "chapeau magique".
Et même si l'éditeur déclare "Variable defined without type.", il considère que "CLASS_TYPE_CRAZY_ALCHIMIST" la montée de niveau marche et on gagne bien le don "résistance élémentaire" ( mais sans les effets biensur ). De plus il est bien déclaré dans mon "classes.2da", je vais essayer ton dernier script proposé en espérant que ça marche. Si ça ne marche pas j'ai une dernière solution de rechange mais super pas pratique, c'est d'appliquer une peau au PJ, mais j'aimerais bien éviter parce que avec le smulticlassages etc, Merci . |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Bon alors le vilain script il veut pas marcher ,
amon avis il veut pas reconnaitre CLASS_TYPE_CRAZY_ALCHEMIST, ce qui est complètement illogique vu que dans les conditions et conséquences de dialogue ils le reprenne ! " C'est pô cool" Enfin ... je vais essayer de trouve l'endroit ou sont stocker les constantes d el'éditeur et l'y ajouter, j'y arriverais nondijoud'nondidjou d'crévindjou . Ce que je voudrais savoir c'est, si je fais ça, est-ce que les joueurs devront aussi ajouter la même constante ? Ca m'étonnerais fort mais bon ... qui sait ! Sinon un recous possible c'est d'utiliser les dialogues pour terminer la montée de niveau ... Mais ça c'est tout pourri tout pourri tout pourri !!! Faudrait que je demande sur le serveur Faltazia comment ils ont fait eux. |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Citation : 28/02/2005 16:27:04 : Erreur. 'lvlup' n'est pas compilé.
J'viens de m'y remettre ( je sais je fais ca apr épisodes, mais c'est parce que j'ai plusieurs projets dont un assez gros pour ceux qui ont vu ).
lvlup.nss(26): ERREUR : SKIPPING DECLARATION VIA "case" STATEMENT DISALLOWED. J'obtiens ceci ... j'ai résolu le problème des constantes en 5 min alors que la derniere fois que j avais travaillé sur ce truc j'y avais réfléchis deux heures et plus et j'avais pas trouvé. Enfin maintenant me reste ce problème, ça compile pas, il dit ceci, en haut, à propos de ton dernier script Klemmth, d'après lui c'est la ligne 26 qui foire, soit celle ou il y as "case 2:" ... Je recherche la faille si quelqu'un peut m'aider ... |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Heuuu ... je n'ai aps trouvé et ... y'as personne pour m'aider ?
Pour info j'ai bien avancé dans mes classes et j'ai introduis les Disciples du Dragon "en 10 exemplaires", les classes grâce auxquelles on peut s'affilier à différents types de Dragons ( bleu, rouge, blanc, cuivre, or, bronze, laiton, noir, vert et argent ) que j'ai traduites à l'occasion ... Mais sans ce script la au dessuis je peux pas faire evoluer mes propres classes ! A moins de copier le système des disciples du Dragon, mais bon, pour pas rester idiot toute ma vie si on pouvait m'expliquer ce qui ne vas pas avec le "case 2:" dans le script ci-dessus, ce serait sympathique merci !!! |
Revenir en haut | |
Léviathan Grand Sage du Conseil Messages: 671 Localisation: Sigil |
Tu as oublié de nommer la variable, tout simplement. Le Script Wizard lit directement els 2da, mais pas l'éditeur de script en lui-même.
Rajoute donc cette ligne plus haut dans ton script : 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. Où "xx" est le numéro de ligne (Id) de la classe en question sur le fichier classes.2da. EDIT : zut, je viesn de voir que tu avais résolu ce problème. Sinon pour le case 2 je sais pas, à priori ça a l'air correct. _________________ Forum Planescape NWN |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Snifff, meme Leviathan sait pas ,
pourtant c'est pas un probleme majeur et on bloque dessus po possib' , Klemmth ? Au secouuurs lol. Sinon pour les constantes Leviathan, il suffit d'ouvrir le script.bif avec le lecteur de Zoligato et d'extraire nwscript.nss, tu l'édites avec le bloc note en rajoutant les constantes nécessaires, CLASS, FEAT, SKILL, etc ... Après tu le met dans ton hak et le tour est joué. J'trouve ça plus simple , en tout cas pour ceux qui savent pas très trop beaucoup bien scripter comme moi par exemple |
Revenir en haut | |
omega Grand Chevalier Messages: 116 |
question, plutot que te faire chier a ca, pourquoi tu fais pas en sorte que ton script il creer un peau invisible que tu change a chaque niveau de progression, avec les bonus que tu veux, comme des resistances, des bonus aux characs, et j'en passe des bonnes et des meilleures.
demande aux scripteur, ils vont te l'indiquer tres facilement, vu que c'est deja un sujet qui a ete utilisé souvent ! |
Revenir en haut | |
Klemmth Seigneur Messages: 176 Localisation: france |
En effet, je comprend pas trop ce qui foire...
A la limite, fait des tests : change la classe, enlève les sendmessagetopc,... juste pour voir si tu arrives à le compiler autrement. _________________ ... |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Klemmth ->
Ok je vais essayer quelques astuce spour que ça marche comme tu me le proposes, même si je doutes que ça change quelque chose. Omega -> Je ne le fais pas tout simplement parce qu'avec les multiclassages c'est irréalisable et que je n'ai pas envie de supprimer le multiclassage. |
Revenir en haut | |
Léviathan Grand Sage du Conseil Messages: 671 Localisation: Sigil |
Citation : Sinon pour les constantes Leviathan, il suffit d'ouvrir le script.bif avec le lecteur de Zoligato et d'extraire nwscript.nss, tu l'édites avec le bloc note en rajoutant les constantes nécessaires, CLASS, FEAT, SKILL, etc ...
Regarde dans mon hak le script intitulé prc_int.nss (prc comme pretige classes, pas comme Player ressource Consortium, hein ?), il liste toutes les cst que je rajoute. Ensuite, je n'ai qu'à mettre ce script en include à n'importe lequel des scrip que je suis suceptible de créer, et je suis tranquille. C'est aussi simple voir plus.
Après tu le met dans ton hak et le tour est joué. Sinon pour ton problème, tu as essayé de faire avec des "if" tout simples au lieu de "case" ? En théorie ça change rien, mais bon... _________________ Forum Planescape NWN |
Revenir en haut | |
Fantilir Chevalier Messages: 80 |
Oui j'ai déja essayé, et voir ici : http://www.system-tek.com/nwinter/phpbb2/viewtopic.php?t=5825&start=25 : pour un autre problème beaucoup plus gênant pour le moment, a cause de ce problème je peux plus avancer du tout ca me broute méchemment je sens que je vais péter un câble
|
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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