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 14:03:19
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 |
Lemli Grand Chevalier Messages: 114 |
Bonjour!
J'ai un probleme avec un script que je n'arrive pas à faire fonctionner. Le principe est de mettre un ingrédient dans un établi d'alchimie,ce qui a pour effet de créer un golem démoniaque.Le compilateur m'affiche"UNKNOW STATE IN COMPILER"en affichant la ligne du void ActionCreate.Je pense qu'il est impossible d'avoir plusieurs fonctions dans un même script,donc si quelqu'un pouvais m'expliquer comment corriger ce probleme..Voici mon script: NWScript :
void main () { object oItem = GetObjectByTag ("ChairedeDmon"); string sItem = "ChairedeDmon"; object oCoffre = OBJECT_SELF; if(GetIsObjectValid(GetItemPossessedBy(oCoffre,sItem))) { DestroyObject(oCoffre); void ActionCreate(string sCreature, location lLoc) { CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } void main() { object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_GATE); string sCreature = "nw_goldmflesh001"; location lLoc = GetLocation(OBJECT_SELF); DelayCommand(3.0, ActionCreate(sCreature, lLoc)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); SetPlotFlag(OBJECT_SELF, FALSE); DestroyObject(OBJECT_SELF, 3.1); } } } } Merci beaucoup et bonne soirée. |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
J'ai pas tout compris mais ça serait pas :
NWScript :
void ActionCreate(string sCreature, location lLoc) { object oItem = GetObjectByTag ("ChairedeDmon"); string sItem = "ChairedeDmon"; object oCoffre = OBJECT_SELF; if(GetIsObjectValid(GetItemPossessedBy(oCoffre,sItem))) { DestroyObject(oCoffre); CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } } void main() { object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_GATE); string sCreature = "nw_goldmflesh001"; location lLoc = GetLocation(OBJECT_SELF); DelayCommand(3.0, ActionCreate(sCreature, lLoc)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); SetPlotFlag(OBJECT_SELF, FALSE); DestroyObject(OBJECT_SELF, 3.1); } } à tout hasard ? |
Revenir en haut | |
Alenn Tax Seigneur Messages: 170 Localisation: J'étais loin, mais je suis revenu. |
Ca serait pas plutot parce que tu as pas définit ton lLoc ?
_________________ "La libertée d'expression n'a jamais existé en Russie. Alors, je ne vois pas comment elle pourrait étre bafouée." - Vladimir Poutine |
Revenir en haut | |
Ivellios Légende vivante Messages: 447 Localisation: Poitiers |
Citation : void main()
{ object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_GATE); string sCreature = "nw_goldmflesh001"; location lLoc = GetLocation(OBJECT_SELF); DelayCommand(3.0, ActionCreate(sCreature, lLoc)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); SetPlotFlag(OBJECT_SELF, FALSE); DestroyObject(OBJECT_SELF, 3.1); } } _________________ Scripts, systèmes, fonctions,... c'est par ici... Pyjama pour castor, une vocation, un avenir sûr |
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
Hummm...Ca marche pas top...
Mais je vais être plus précis,cependant je souhaite maintenant faire un script différent de ce que je voulais au départ: C'est un établi d'alchimie utilisable avec un inventaire.Il ne contient rien mais des que l'on met à l'interieur un objet"Chaire de Démon"(tag:ChairedeDmon"),ca créé un golem démoniaque.Ca,c'était le projet initial.Maintenant,je voudrais faire en sorte que,une fais la chaire de démon disposée dans l'inventaire de l'établi,il y ai 50% de chance que le golem soit un ennemi,et 50% de chance que le golem soit un allié... Ca parait un peu compliqué(enfin pour moi)mais il suffirait de modifier le script de sort"Portail"(celui qui créé un Balor allié si on est protégé par un autre sort).Le probleme est que je n'arrive pas à trouver ce script!!!Donc merci beaucoup si vous pouvez m'aider. |
Revenir en haut | |
Djezebel Héros Messages: 252 |
Pour l'effet aléatoire, après, il faut voir ce que tu veux comme pourcentage de chance pour que ce soit un ami ou un ennemi...
Mais normalement si tu ajoutes un : 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. dans ton script, ça devrait marcher Pour ce qui est de la création d'une créature par rapport à un item dans un objet, il y a déjà eu un post là dessus ici : [http] Merci Enki ! |
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
Merci beaucoup pour l'info et ton script.Je sais a peut près me servir du Random mais on ai jamais trop sûr...Ensuite je pense que je vais me baser maintenant sur le script d'Enki,en le "mixant"comme il faut avec le script portail,que je ne trouve toujours pas...
|
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
Ouais!!Je l'ai trouvé!C'est celui ci,mot pour mot:
NWScript :
//:///////////////////////// ///////////////////// //:: Gate //:: NW_S0_Gate.nss //:: Copyright (c) 2001 Bioware Corp. //:///////////////////////// //////////////////// //:: Summons a Balor to fight for the caster. //:///////////////////////// //////////////////// //:: Created By: Preston Watamaniuk //:: Created On: April 12, 2001 //:///////////////////////// //////////////////// void CreateBalor(); #include "x2_inc_spellhook" void main() { /* Spellcast Hook Code Added 2003-06-20 by Georg If you want to make changes to all spells, check x2_inc_spellhook.nss to find out more */ if (!X2PreSpellCastCode()) { // If code within the PreSpellCastHook (i.e. UMD) reports FALSE, do not run this spell return; } // End of Spell Cast Hook //Declare major variables int nMetaMagic = GetMetaMagicFeat(); int nCasterLevel = GetCasterLevel(OBJECT_SELF); int nDuration = GetCasterLevel(OBJECT_SELF); effect eSummon; effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_GATE); //Make metamagic extend check if (nMetaMagic == METAMAGIC_EXTEND) { nDuration = nDuration *2; //Duration is +100% } //Summon the Balor and apply the VFX impact //ApplyEffectAtLocation(DURATI ON_TYPE_INSTANT, eVis, GetSpellTargetLocation()); location lSpellTargetLOC = GetSpellTargetLocation(); if(GetHasSpellEffect(SPELL_PROTECTION_FROM_EVIL) || GetHasSpellEffect(SPELL_MAGIC_CIRCLE_AGAINST_EVIL) || GetHasSpellEffect(SPELL_HOLY_AURA)) { eSummon = EffectSummonCreature("NW_S_BALOR",VFX_FNF_SUMMON_GATE,3.0); float fSeconds = RoundsToSeconds(nDuration); DelayCommand(3.0, ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lSpellTargetLOC, fSeconds)); } else { ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eVis, lSpellTargetLOC); DelayCommand(3.0, CreateBalor()); } } void CreateBalor() { CreateObject(OBJECT_TYPE_CREATURE, "NW_S_BALOR_EVIL", GetSpellTargetLocation()); } Hummm...Je n'ai pas compris certains points: -c'est quoi "(!X2PreSpellCastCode())"? -quelles sont ces références de Balor"NW_S_BALOR" et "NW_S_BALOR_EVIL"?Elles n'apparaissent pas dans le menu générique des créatures!(il fallait s'en douter puisque l'une est alliée). -et tout un tas de trucs qu'il faudrais surement que je suprime pour ce que je veux faire. Voila.Je voudrais bien un peu d'aide car bricoler un tel script ne me parait pas évident... PS:je sais pas d'ou viennent les smiley |
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
J'ai fai un nouveau script,sur des bases différentes.Mais il ne se copil pas!!!Le compilateur affiche soit"UNEXPECTED END COPOUND STATEMENT"soit "UNKNOW STATE IN COPILER"à la derniere ou avant derniere ligne,ca dépend si je met un crochet ou une parenthese.
Voici le script: NWScript : void ActionCreate(string sCreature, location lLoc) { object oItem = GetObjectByTag ("TAG_OBJET"); string sItem = "TAG_OBJET"; object oCoffre = OBJECT_SELF; CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } void main() { if(GetIsObjectValid(GetItemPossessedBy(oCoffre,sItem))) { object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_GATE); string sCreature = "NW_S_BALOR"; // * 10% de chance que ce soit un golem gentil if (Random(100) > 50) { sCreature = "NW_S_BALOR_EVIL"; } location lLoc = GetLocation(OBJECT_SELF); DelayCommand(0.3, ActionCreate(sCreature, lLoc)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); SetPlotFlag(OBJECT_SELF, FALSE); DestroyObject(OBJECT_SELF, 0.5); } } /* warning: 1 unclosed block {} */ |
Revenir en haut | |
Anthraxcite Légende vivante Messages: 372 Localisation: Belgique |
Il manque l'accolade fermante de if(GetIsObjectValid... donc rajoutes-en une à la fin.
|
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
J'ai refait quelques petites modifications et maintenant il se compile bien:
NWScript :
void ActionCreate(string sCreature, location lLoc) { CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } void main() { object oItem = GetObjectByTag ("TAG_OBJET"); string sItem = "TAG_OBJET"; object oCoffre = OBJECT_SELF; if(GetIsObjectValid(GetItemPossessedBy(oCoffre,sItem))) { object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_GATE); string sCreature = "NW_S_BALOR"; // * 10% de chance que ce soit un golem gentil if (Random(100) > 50) { sCreature = "NW_S_BALOR_EVIL"; } location lLoc = GetLocation(OBJECT_SELF); DelayCommand(0.3, ActionCreate(sCreature, lLoc)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); SetPlotFlag(OBJECT_SELF, FALSE); } } } Mais lorsque le balor apparait,il est soit un ennemi,soit NEUTRE,alors qu'il aurait dû être un allié!Je comprends pas comment faire!...A l'aide! PS:A l'origine c'est un goleme,mais bon... |
Revenir en haut | |
mork Seigneur Messages: 205 Localisation: A landeda, pres de brest |
Salut !
Peut etre que tu peux essayer de faire un dialogue au balor (ou golem ^^) et dire (par exemple) : -Que me veux tu, mortel ?! --C'est moi qui t'ai cree, tu dois me suivre ! ---Bien, je vous suis alors Et puis y mettre les scritps, un peu comme un mercenaire en gros (Si tu veux les scripts, emande moi, je te les donnerais) |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
NWScript :
void ActionCreate(string sCreature, location lLoc) { CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } void main() { object oItem = GetObjectByTag ("TAG_OBJET"); string sItem = "TAG_OBJET"; object oCoffre = OBJECT_SELF; object oUser = GetLastUsedBy(); if(GetIsObjectValid(GetItemPossessedBy(oCoffre,sItem))) { object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_GATE); string sCreature = "NW_S_BALOR"; location lLoc = GetLocation(OBJECT_SELF); // * 10% de chance que ce soit un golem gentil if (Random(100) > 50) { sCreature = "NW_S_BALOR_EVIL"; effect eSummon = EffectSummonCreature(sCreature,VFX_FNF_SUMMON_GATE,3.0); DelayCommand(3.0, AssignCommand(oUser,ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eSummon, lLoc))); } else {DelayCommand(0.3, ActionCreate(sCreature, lLoc)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); } SetPlotFlag(OBJECT_SELF, FALSE); } } } Ca marche comme ça ? Edit : ben non ça marche pas en plus j'ai fait à l'envers. Je vais manger et j'essaie de reparer |
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Ca ça a l'air mieux :
Sur le placeable : NWScript :
void ActionCreate(string sCreature, location lLoc) { CreateObject(OBJECT_TYPE_CREATURE, sCreature, lLoc); } void main() { object oItem = GetObjectByTag ("TAG_OBJET"); string sItem = "TAG_OBJET"; object oCoffre = OBJECT_SELF; object oUser = GetLastUsedBy(); if(GetIsObjectValid(GetItemPossessedBy(oCoffre,sItem))) { object oCreature = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC); if (GetIsObjectValid(oCreature) == TRUE && GetDistanceToObject(oCreature) < 10.0) { effect eMind = EffectVisualEffect(VFX_FNF_SUMMON_GATE); string sCreature = "NW_S_BALOR_EVIL"; location lLoc = GetLocation(OBJECT_SELF); // * 10% de chance que ce soit un golem gentil if (Random(100) > 50) { ExecuteScript("inv_balor",oUser); } else {DelayCommand(0.3, ActionCreate(sCreature, lLoc)); ApplyEffectAtLocation(DURATION_TYPE_INSTANT, eMind, GetLocation(OBJECT_SELF)); } SetPlotFlag(OBJECT_SELF, FALSE); } } } et le script "inv_balor" : NWScript : void main() { location lLoc = GetLocation(OBJECT_SELF); effect eSummon = EffectSummonCreature("NW_S_BALOR",VFX_FNF_SUMMON_GATE,3.0); ApplyEffectAtLocation(DURATION_TYPE_TEMPORARY, eSummon, lLoc,30.0); } |
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
C'est quoi"inv_balor"?Ensuite ce serait une bonne idée aussi cette histoire de dialogue...Mais encore une fois le balem n'apparaît pas dans le menu générique!De plus,j'ai remarqué que une bois le balor créé,il avait pour nom"Balor INVOQUE".C'est aussipour ca que j'ai pas replacé le balor par le golem.
|
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
C'est un autre script à ajouter. J'ai pas trouvé d'autre solution pour que ce soit le joueur qui invoque le balor/golem (il faut que ce soit l'invocateur qui crée l'effet EffectSummonCreature). Il me semble qu'il y a un autre moyen en passant par un assignCommand ou un truc dans le genre mais j'ai pas retrouvé.
|
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
Ouais,ca marche!Je pense encore a l'idée du dialogue,mais bon...on va pas chipoter!Cependant je ne sais toujours pas comment invoquer mon Golem.Tu sais d'ou vient la référence du Balor pour que je puisse la remplacer convenablement par celle du golem démoniaque?Voila.Merci beaucoup pour ton aide!
|
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
il faut aussi supprimer l'objet du coffre une fois l'invocation terminée.Je sais pas trop comment m'y prendre...
|
Revenir en haut | |
Sith Vicious Grand Sage du Conseil Messages: 693 |
Pour invoquer le golem à la place du balor, change la référence dans inv_balor. Après pour qu'il marche bien comme un allié il faudra surement un set de script spécifique. Et là je sais pas lequel, puisque je sais pas trouver les invocations dans l'éditeur. Au pire colle le set de script des henchmen de la première campagne ça devrait déjà être pas mal.
Pour détruire l'objet rejoute NWScript : // oItem = GetItemPossessedBy(oCoffre,sItem); if (GetIsObjectValid(oItem)) // a la place de if(GetIsObjectValid(GetItemPos sessedBy(oCoffre,sItem))) { //le reste du script DestroyObject(oItem) } |
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
Ca marche super bien!!!Merci beaucoup!Il suffisait tout siplement de modifier les références et tout foctionne comme il faut.Encore merci et que les divinités du Chaos te damnent.
|
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
heu...c'est pas pour emmerder le monde mais je voudrais que le golem apparaisse sur un waypoint nommé"WAY_GOLEM"...désolé!
PS:il parrait que les débutants en veulent toujours plus. |
Revenir en haut | |
BenGorre Légende vivante Messages: 301 |
Il suffit que tu mette ça dans inv_balor pour définir où il apparait:
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. bien sur tu supprimmes l'ancienne ligne qui definissait lLoc. _________________ La mort n'est rien seul le fait de mourir est terrible Henry Fielding 1745 Le serveur Filandre a été stoppé pour le moment, je on travail à la conversion vers NWN2. |
Revenir en haut | |
Lemli Grand Chevalier Messages: 114 |
Ca marche très bien.Merci beaucoup!
|
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
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