Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Probleme sur script de summon de monstres dans un dialogue
Probleme sur script de summon de monstres dans un dialogue
Par durite le 23/10/2002 à 16:28:48 (#2390834)
je me heurte a un probleme tres genant qui est la non reconnaissance de tags de monstres personnalisés dans le script que j ai créer...
void main()
{
{
object oSum = GetNearestObjectByTag("InvisibleObject");
object oGuard = CreateObject(OBJECT_TYPE_CREATURE, "NW_GolBone", GetLocation(oSum));
effect eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2);
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eVis, GetLocation(oGuard));
oGuard = CreateObject(OBJECT_TYPE_CREATURE, "NW_GolBone", GetLocation(oSum));
eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2);
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eVis, GetLocation(oGuard));
oGuard = CreateObject(OBJECT_TYPE_CREATURE, "NW_GolBone", GetLocation(oSum));
eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2);
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eVis, GetLocation(oGuard));
oGuard = CreateObject(OBJECT_TYPE_CREATURE, "NW_GolBone", GetLocation(oSum));
eVis = EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2);
ApplyEffectAtLocation(DURATION_TYPE_PERMANENT, eVis, GetLocation(oGuard));
}
}
dans l exemple precedent (qui fonctionne tres bien) "NW_GolBone" est le tag du golem d'os contenu dans la liste des monstres Génériques , cependant lorsque je Crée un monstre qui aparaitra dans la liste de monstres Personalisés celui ci n'est pas reconnu et la concequence dans le jeu est le summon par le pnj du premier monstre de la liste des generiques (c est a dire un Bléreau) et pas mon monstre perso...cela m'empeche en censequence de summoner des monstre ayant un inventaire , des stats , un nom , etc...que j ai definis...(n.b: ce qui fout totalement en l'air mon module)
j ai eu beau tourner la chose dans touts les sens je ne sais plus comment faire et je compte beaucoup sur votre aide et votre experience.
Autre probleme de moindre importance mais que je n ai pas su résoudre , je desirerai faire que un pnj controle si j ai dans mon inventaire par Exemple 15 , 14, 13 (ou autre)pommes de même tag , cependant le wisard permet de mettre en condition d execution soit la possetion de plusieurs objets de tag different , soit la possetion d1 seul exemplaire d un objet.que faire???
Créer 15 tags differents avec des objet portant le meme nom contraindrai a utiliser A chaque nouvelle pomme 1 case d iventaire nouvelle , ce qui a force deviendrai bordelique sachant que le mieu serait de les voir se superposer dans l inventaire...
j espere que vous aurez des solutions a ces problemes qui bloquent totalement mon avancée dans le scripting de mon module.
Merci d'avance.
Durite-ki-deviens-fou :maboule:
Par eMRaistlin le 23/10/2002 à 16:44:08 (#2390925)
Le CreateObject ne fonctionne pas avec le TAG, mais avec le ResRef.
Remodifie tes tag pour qu'ils soient egaux (cAse SensiTivE) strictement a tes blueprints, et ca marchera...
Par LeProctophantasmiste le 23/10/2002 à 17:05:33 (#2391076)
;)
Un sticky sur les erreurs les plus répendues remarque...
Par Nylou le 23/10/2002 à 17:34:40 (#2391320)
Provient du message de LeProctophantasmiste
On pourrait peut-être faire un sticky? Avec un titre bien explicite: "Attention il faut mettre la ResRef (blueprint) dans CreateObject() et pas le Tag"
;)
Un sticky sur les erreurs les plus répendues remarque...
Je trouve que c'est une bonne idée en se qui concerne le 1er sticky mais pour un sujets des erreurs les plus répendues, la plupart des personnes concernées ne prendront pas la peine de le regarder le sujet (enfin c'est mon avis).
Par LeProctophantasmiste le 23/10/2002 à 18:20:54 (#2391653)
pour un sujets des erreurs les plus répendues, la plupart des personnes concernées ne prendront pas la peine de le regarder le sujet (enfin c'est mon avis).
Tu as probablement raison, et après tout c'est assez normal. D'après mon expérience personnelle, cela prend un moment pour comprendre qu'en programmation c'est dans la très grande majorité des cas sur les choses les plus simples que l'on fait des erreurs. Ca ferait quand même un sujet de référence où renvoyer les gens.
L'idée du persistant spécifique n'était pas très sérieuse étant donné que l'on ne peut pas faire ça pour tous les problèmes, mais après tout puisque celui là revient 20 fois plus souvent que les autres...
Par durite le 23/10/2002 à 19:44:23 (#2392234)
vi je sais je suis un noob dans l ame et je fait des erreurs que certains ne feraient pas même avec un bras dans le platre , les yeux bandés et attachés sur une chaise :p ...mais bon , comme on dit c est en forgeant qu on devient forgeron :) hehe
sinon voila , pour le premier probleme c est resolu et je vous en remercie :)
par contre le second probleme est toujours d actualité et je serai heureux d avoir une solution de votre part :p
A++ et merci encore :)
Par LeProctophantasmiste le 24/10/2002 à 0:56:28 (#2394077)
vi je sais je suis un noob dans l ame et je fait des erreurs que certains ne feraient pas même avec un bras dans le platre , les yeux bandés et attachés sur une chaise ...mais bon , comme on dit c est en forgeant qu on devient forgeron hehe
Rien a redire, c'est pas parce qu'une question a été posée 50 fois qu'elle est moins légitime ;) .
Désolé pour l'autre truc, à vrai dire je ne l'avais même pas remarqué (chacun ses défauts). Voila une fonction qui compte les objets ayant un certain tag dans l'inventaire (inclus les slots) d'un objet. Ca devrait marcher pour tout, empilable ou pas, créature ou pas, mais j'ai bu un coup de trop, donc soit indulgent (j'ai quand même vérifié la syntaxe).
int GetItemQuantityOnObject(string sTag, object oPossessor = OBJECT_SELF)
{
int i;
object oItem;
int nTotal = 0;
oItem = GetFirstItemInInventory(oPossessor);
while(GetIsObjectValid(oItem))
{
if(GetTag(oItem) == sTag)
{
nTotal += GetNumStackedItems(oItem);
}
oItem = GetNextItemInInventory(oPossessor);
}
if(GetObjectType(oPossessor) == OBJECT_TYPE_CREATURE)
{
for(i = 0; i<14; i++)
{
oItem = GetItemInSlot(i, oPossessor);
if(GetTag(oItem) == sTag)
nTotal += GetNumStackedItems(oItem);// a priori que les slots 11,12,13 mais bon...
}
}
return nTotal;
}
dans le main:
object oPC = GetPCSpeaker();
....
if(GetItemQuantityOnObject("Tag de l'objet à compter", oPC) < "ce que tu veux")
....
Par durite le 24/10/2002 à 1:00:33 (#2394099)
encor merci :) A++
pas d'idées noires Nylou
Par Blam le 24/10/2002 à 14:21:01 (#2397126)
Moi quand je vois ca, je craque et rigole tout seul,
svp pensez a ceux qui travaillent :)))))
JOL Archives 1.0.1
@ JOL / JeuxOnLine