Tout d'abord, un grand bonjour et de gros bisous à tous ceux qui se souviennent de mon existence... Je suis un peu gênée d'avoir disparu pendant si longtemps mais je crois que j'avais besoin de faire une longue pose loin de l'informatique et loin d'Internet... Je n'étais pas mal ou déprimée, mais j'avais besoin de retrouver mes crayons, mes feuilles de papier qui sentent si bon, et puis aussi les promenades dans les collines et les visites aux gens que j'aime...
Bref, après ce chapitre de "Kira, sa vie et tout le reste", j'aborde le sujet qui m'amène...
Je sais, c'est un peu tard, mais le sujet d'empêcher le joueur d'accéder à son inventaire est, il me semble revenu plusieurs fois sur le tapis dans la rubrique des scripts et, il me semble avoir trouvé, hier, une solution à peu près acceptable...
En fait, il n'existe pas de commande permettant, comme il a été fait dans les jeux suivants, Oblivion, Fallout 3 et 4, ainsi que Skyrim, de vider l'inventaire du joueur dans un container... Il y a bien, dans Morrowind, un système qui confisque les objets obtenus de façon plus ou moins illégale quand le joueur va en prison, mais c'est une fonction qui ne réagit qu'aux objets volés...
Il existe bien une fonction "EnablePlayerInventory", utilisée au début du jeu pour autoriser le joueur à ouvrir son inventaire, mais elle n'est utilisée qu'une seule fois, au cours du chargen et ne possède pas de fonction inverse... Le personnage arrive sans la possibilité d'ouvrir son inventaire et, donc, il n'y a pas besoin de créer une fonction pour initialiser un état qui est impliqué par défaut dans le hardcode...
Mais, il existe tout de même une commande qui, bien que n'empêchant pas l'ouverture de l'inventaire, permet de le refermer en une frame, ce qui en interdit l'utilisation... C'est une fonction qui sert au moment des voyages instantanés et permet au joueur de se retrouver à destination sans avoir d'inventaire ouvert s'il l'était au moment du départ...
Bref, la simple commande
if ( MenuMode == 1 ) MenuTest endif
Permet de refermer sur les doigts du joueur son inventaire dès qu'il tente de l'ouvrir... En partant de cette base, il est très simple de faire un script qui enlève son équipement au joueur, l'empêche de s'en rééquiper et de se battre ou d'utiliser la magie...
Tout d'abord, il faut l'objet qui va permettre d'exécuter le script... Comme je suis partie de l'hypothèse de départ d'une mise en prison, j'ai utilisé un collier, placé sur le slot de la clavicule...
Ensuite, il convient de dépouiller le joueur de son équipement et de ses armes, afin de le vêtir d'une tenue plus en rapport avec son statut de prisonnier... Par paresse, j'ai décidé qu'au lieu de la tenue rayée traditionnelle, il devrait se contenter d'un pagne...
Pour enlever l'équipement, j'ai créé des faux vêtements armures et armes qui ne sont que des fiches avec juste une ID et un type... Il faut dix-huit fiches pour mettre un personnage en pagne...
-Amulet
-Belt
-Left Glove
-Right Glove
-Ring
-Robe
-Shoes
-Boots
-Cuirass
-Greaves
-Helmet
-Left Bracer
-Left Gauntlet
-Left Pauldron
-Right Bracer
-Right Gauntlet
-Right Pauldron
-Shield
-BluntTwoClose
(Je suppose que certains éléments sont en doublon, par exemple les bracelets d'armure devraient logiquement avoir le même emploi que les gantelets, mais je n'ai pas pris le temps de vérifier cela pour toutes les armures, sans oublier qu'il existe de nombreuses armures moddées... J'ai donc préféré ne pas prendre de risques...)
Comme la commande MenuTest rend aussi la console inutilisable, j'ai préféré ajouter deux parchemins, un qui déclenche le port du collier et l'autre qui l'enlève... Ces deux parchemins peuvent être remplacés par tout ce qu'on veut... Fenêtre de résultat de dialogue, activateur, entrée de journal, décompte du temps passé, etc....
Voici le script de départ...
begin test_depart short done if ( OnActivate == 1 ) if ( done == 0 ) player->additem test_prison_collar 1 player->equip test_prison_collar set done to 1 endif endif end
Et celui de fin...
begin test_fin short done if ( OnActivate == 1 ) if ( done == 0 ) player->removeitem test_prison_collar 1 EnablePlayerFighting EnablePlayerMagic set done to 1 endif endif end
Et voila le script qui est appliqué sur le collier...
begin "prison collar" short OnPCEquip short clothing if ( OnPCEquip == 1 ) if (MenuMode == 1 ) MenuTest endif endif if ( clothing == 20 ) return endif if ( clothing == 0 ) player->additem test_001 1 player->equip test_001 player->removeitem test_001 1 set clothing to 1 endif if ( clothing == 1 ) player->additem test_002 1 player->equip test_002 player->removeitem test_002 1 set clothing to 2 endif if ( clothing == 2 ) player->additem test_003 1 player->equip test_003 player->removeitem test_003 1 set clothing to 3 endif if ( clothing == 3 ) player->additem test_004 1 player->equip test_004 player->removeitem test_004 1 set clothing to 4 endif if ( clothing == 4 ) player->additem test_005 1 player->equip test_005 player->removeitem test_005 1 set clothing to 5 endif if ( clothing == 5 ) player->additem test_006 1 player->equip test_006 player->removeitem test_006 1 set clothing to 6 endif if ( clothing == 6 ) player->additem test_007 1 player->equip test_007 player->removeitem test_007 1 set clothing to 7 endif if ( clothing == 7 ) player->additem test_008 1 player->equip test_008 player->removeitem test_008 1 set clothing to 8 endif if ( clothing == 8 ) player->additem test_009 1 player->equip test_009 player->removeitem test_009 1 set clothing to 9 endif if ( clothing == 9 ) player->additem test_010 1 player->equip test_010 player->removeitem test_010 1 set clothing to 10 endif if ( clothing == 10 ) player->additem test_011 1 player->equip test_011 player->removeitem test_011 1 set clothing to 11 endif if ( clothing == 11 ) player->additem test_012 1 player->equip test_012 player->removeitem test_012 1 set clothing to 12 endif if ( clothing == 12 ) player->additem test_013 1 player->equip test_013 player->removeitem test_013 1 set clothing to 13 endif if ( clothing == 13 ) player->additem test_014 1 player->equip test_014 player->removeitem test_014 1 set clothing to 14 endif if ( clothing == 14 ) player->additem test_015 1 player->equip test_015 player->removeitem test_015 1 set clothing to 15 endif if ( clothing == 15 ) player->additem test_016 1 player->equip test_016 player->removeitem test_016 1 set clothing to 16 endif if ( clothing == 16 ) player->additem test_017 1 player->equip test_017 player->removeitem test_017 1 set clothing to 17 endif if ( clothing == 17 ) player->additem test_018 1 player->equip test_018 player->removeitem test_018 1 set clothing to 18 endif if ( clothing == 18 ) player->additem test_rag 1 player->equip test_rag set clothing to 19 endif if ( clothing == 19 ) DisablePlayerFighting DisablePlayerMagic set clothing to 20 endif end
Il y a deux points faibles dans ce système... Le premier est que le joueur a toujours accès à ses raccourcis...Il paut donc équiper une arme ou un sort, mais li ne peut pas s'en servir parce que son combat et sa magie sont désactivés...
Le deuxième point faible est que si le joueur est suivi par un compagnon, il peut ouvrir son inventaire par la fenêtre de partage dudit compagnon... Il semble que cette fenêtre n'est pas un inventaire à ce moment-là, mais plutôt une forme de fenêtre de dialogue... Mais là aussi, le combat et la magie restent désactivés... Evidemment, le joueur peut enlever le collier en profitant de cette faille, mais s'il veut vraiment tricher à ce point-là, il peut aussi se déclarer en GodMode à la sortie du bureau des taxes...
Voilà... Je ne sais pas si tout çà peut être utile à quelqu'un, Mais si cela peut être le cas, j'en serai très heureuse...
Bisous...