Aller au contenu


Getitemcount Fonctionne Sur Les Conteneurs Mais Pas Les Acteurs


  • Veuillez vous connecter pour répondre
Aucune réponse à ce sujet

#1 HawkFest

HawkFest

Posté 05 février 2013 - 20:33

Je reproduis ici en FR la description d'un bug que j'ai décrit sur le forum de Bethesda, et maintenant lié à la doc de GetItemCount (lien de la section "Notes" en bas de page).

Problème : quand un mot-clé est donné en argument,GetItemCOunt fonctionne sur un conteneur mais pas sur un acteur.

Contexte original : déterminer le nombre de potions dans l'inventaire du joueur, pour par la suite les bouger vers un conteneur HUB partagé dans une cellule inaccessible. Pour se faire on utilise une "liste blanche" des items à traiter. En l'occurrence, un Formlist de Keywords définissant une catégorie : tous les items ayant l'un des mots-clés de la liste seront traités.

Dans le script suivant, le test fut fait avec une Formlist contenant un seul keyword : VendorItemPotion. Je n'ai pas mis tout le script, seulement l'essentiel afin qu'il soit fonctionnel pour que vous puissiez tester:
Spoiler

Dans la section TOUT RANGER (iButton = 0) :

iCountPerK = akActionRef.GetItemCount(fCategory.GetAt(iIndexKeywords) As Keyword)

montre des valeurs incorrectes pour la variable iCountPerK (nombre d'items comportant un mot-clé spécifique) : on obtient des valeurs négatives, même quand aucun item n'est détecté.

Cependant, dans la section INVENTAIRE (iButton = 2) :

iCountPerK = rContainerCategoryHUB.GetItemCount(fCategory.GetAt(iIndexKeywords) As Keyword)

fonctionne tel que prévu, iCountPerK retournant des valeurs correctes.

Une solution est de vider le contenu du PJ dans un coffre tampon, puis d'utiliser ce dernier à la place du PJ (sans oublier de tout reprendre après traitement).



Bien que ce ne soit pas lié au sujet, il faut mentionner que le script n'aura pas le comportement attendu dans sa section TOUT RANGER (même si on peut faire le décompte par Keyword  avec la solution ci-haut mentionnée) :

akActionRef.RemoveItem(fCategory.GetAt(iIndexKeywords) As Keyword, iCountPerK, True, rContainerCategoryHUB)

ne fonctionne pas même si en jeux ça ne crash pas et que le compilateur ne dise rien : RemoveItem n'accepte que des Form, et ne comprend donc pas le premier argument qui est un Keyword.

Pour palier à cela, une solution rapide (mais peu élégante car on verrait les messages associés aux quêtes, telle celle consistant à trouver 10 peux d'ours ou les quêtes de ceuillette), serait de remplacer la ligne en question par une instruction qui bouge tout le contenu du joueur vers le conteneur HUB partagé dans la cellule inaccessible, puis de laisser ce dernier filtrer les éléments ajoutés en renvoyant au joueur ceux qui ne passent pas sa "liste blanche" (le Formlist de Keywords)  :

1. Remplacer la ligne en cause par :

akActionRef.RemoveAllItems(rContainerCategoryHUB, True, False)
Utility.Wait(0.05)

2. Attacher le script suivant au conteneur HUB partagé :

Spoiler


Note -  Le script du point 2 accepte deux types de "liste blanche" : Formlist de Keywords, ou Formlist de Form (d'items). Si on fournit une Formlist de Keywords, il faut initialiser la propriété bIsCategoryOfKeywords à True via le CK.

Modifié par HawkFest, 14 février 2013 - 22:05.





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)