Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Creation d'un objet un peu particulier...
Creation d'un objet un peu particulier...
Par mickmils le 13/7/2002 à 18:26:29 (#1801122)
L'Objectif est le suivant :
Créer une sorte de sort qui allume toutes les lampes, braziers, torches (placeable objects) dans le coin. Une fois ces lampes alllumées, une porte s'ouvre ou un autre évenement a lieu.
J'avais pensé a faire cela par l'intermédiaire d'un objet utilisable. Le probleme c'est que les effets ont tous l'air prédéfini.
Réussir a faire ce genre de trucs serait déja fantastique pour moi aussi je me contenterais d'une réponse a ce problême, mais si possible, j'aimerais également réaliser autre chose.
L'objet en question serait un livre de sort, placé dans l'inventaire.
L'Utilisation de ce livre de sort ouvrirait un dialogue demandant quel sort utiliser (ici, le sort qui allumerait les torches) et pour chaque sort déclencherait un script (faisable par ActionTaken). Autre problême, comment initialiser un tel dialogue ?
Voila, enfin la, je suis bloqué totalement :/
Merci d'avance pour le coup de main
-Mickmils
Par Lumina le 13/7/2002 à 19:44:26 (#1801327)
BeginConversation("dialogue_du_livre", oObjectToDialog);
mais je ne sais plus si il faut donner comme parametre l'objet livre ou l'objet personnage joueur ...
Pour allumer les lumières, je pense qu'il faut utiliser un script qui ressemble à ça (attention, celui-ci ne compile pas .. je donne une idée sans la tester) :int i = 1;
object oLight = GetNearestObjectByTag("tag_de_mon_brasier", oPC, i);
while (GetIsObjectValid(oLight))
{
location lLoc = GetLocation(oLight);
SetTileSourceLightColor(lLoc, TILE_MAIN_LIGHT_COLOR_RED, TILE_MAIN_LIGHT_COLOR_RED);
i++;
oLight = GetNearestObjectByTag("tag_de_mon_brasier", oPC, i);
}
RecomputeStaticLighting(GetArea());
Si quelqu'un teste ça, qu'il essaye de corriger pour informer ce qui marche et ce qui ne marche pas. :)
Par mickmils le 13/7/2002 à 21:03:16 (#1801558)
-Mickmils
Par Kray le 13/7/2002 à 21:26:29 (#1801636)
Par mickmils le 13/7/2002 à 21:57:43 (#1801780)
Maintenant je me sens très con :o)
-Mickmils
Par Kray le 13/7/2002 à 22:19:22 (#1801858)
Par mickmils le 13/7/2002 à 22:40:30 (#1801934)
Je viens de tester, la case "useable" n'existe apparement que sur les objets "placeable" , pas sur les items.... Retour a la case départ :/
-Mickmils
Par mickmils le 13/7/2002 à 23:02:25 (#1802002)
http://nwvault.ign.com/Files/scripts/data/Making%20Unique%20ItemsDavid%20Gaider%20(BioWare%20Designer)Inventory%20Item.shtml
-Mickmils
Par Lumina le 14/7/2002 à 1:02:26 (#1802326)
Making Unique Items David Gaider (BioWare Designer) Inventory Item
Bon, il fallait lire "OnActivateItem" au lieu de "OnUse" évidemment. :)
Ce qui donne le script suivant :
object oItem = GetItemActivated();
if (GetTag(oItem) == "tag_du_livre")
BeginConversation("dialogue_du_livre", GetItemActivator());
Par mickmils le 14/7/2002 à 12:19:07 (#1803422)
problêmes.
Premiere surprise, lorsque j'utilise mon Spell Book, il disparait immédiatement. J'ai pourtant coché "Plot Item" et mis ses charges a 50.
Je lui aie assigné comme Properties :
Cast Spell Unique Power Self (Unlimited Uses/Day)
Son tag est SpellBook
Dans mes Modules Properties j'ai ce script sur OnActivateItem
void main()
{
object oItem = GetItemActivated();
object oPlayer = GetItemActivator();
if (GetTag(oItem) == "SpellBook")
{
ActionStartConversation(oPlayer , "spellbook");
}
}
Je suis conscient d'avoir beaucoup de mal avec mes "if" en général (mauvais placement de parenthèses, crochet ou point-virgule, et autres choses :/), mais là il me semble pourtant que ce script est correct.
Autre problême potentiel, dans l'éditeur de conversations, je ne trouve pas le tag de mon livre, SpellBook. J'ai essayé de créer un objet bidon juste a coté et de faire correspondre les lignes de dialogues avec cet objet , mais rien. Tout ce qu'il se passe c'est que le joueur remue bien les bras,
Par Amaranthe le 14/7/2002 à 12:23:28 (#1803437)
Provient du message de mickmils
void main()
{
object oItem = GetItemActivated();
object oPlayer = GetItemActivator();
if (GetTag(oItem) == "SpellBook")
{
ActionStartConversation(oPlayer , "spellbook");
}
}
Je suis conscient d'avoir beaucoup de mal avec mes "if" en général (mauvais placement de parenthèses, crochet ou point-virgule, et autres choses :/)
Un conseil... INDENTE !
void main()
{
object oItem = GetItemActivated();
object oPlayer = GetItemActivator();
if (GetTag(oItem) == "SpellBook")
{
ActionStartConversation(oPlayer , "spellbook");
}
}
Amaranthe.
PS. Ne faudrait il pas une majuscule a "Spellbook" ? dans le ActionStartConversation ?
Par Lumina le 14/7/2002 à 17:46:09 (#1804450)
Provient du message de Amaranthe
Non Amaranthe. :)
PS. Ne faudrait il pas une majuscule a "Spellbook" ? dans le ActionStartConversation ?
Le premier "SpellBook", c'est le tag du livre.
Le scond "spellbook" c'est le fichier de conversation. :)
Au passage, on peut mettre un parametre supplémentaire pour que la conversation soit invisible aux yeux des autres joueurs :
ActionStartConversation(oPlayer , "spellbook_dialog", TRUE);
Sinon, je ne sais pas d'où vient le problème que le livre disparaisse ... peut-etre un evenement qui apparait dans "action taken" au sein de la conversation, voir au tout début de celle-ci ?
Par Amaranthe le 14/7/2002 à 18:38:07 (#1804659)
Provient du message de Lumina
Non Amaranthe. :)
Le premier "SpellBook", c'est le tag du livre.
Le scond "spellbook" c'est le fichier de conversation. :)
Ca j'avais bien compris ;)
Je me disais que si il avait mis une majuscule au premier Tag il en avait peut être mis une aussi au deuxieme ;)
Amaranthe.
Qui n'a que tres rarement tort... et qui l'avoue encore moins souvent.
JOL Archives 1.0.1
@ JOL / JeuxOnLine