Aller au contenu


Bloquer L'inventaire Du Joueur....


  • Veuillez vous connecter pour répondre
7 réponses à ce sujet

#1 Kira

Kira

    Top-modeleuse...


Posté 11 février 2017 - 14:28

Coucou...

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...
Tout n'est qu'illusion... Surtout le fait de le penser.....
Image IPB
(Wiwi d'or de la plus serviable et de la plus cool... Merci à vous tous...)

#2 Svartalfar

Svartalfar

    Moddeur d'or


Posté 12 février 2017 - 22:00

:yahoo: Coucou Kira, bon retour parmi nous !
Contents de te voir et merci pour ce script, je suis sûr qu'il trouvera preneur ! ^^

#3 Troglodyte

Troglodyte

Posté 13 février 2017 - 13:59

Bonjour Kira et très heureux de voir que tu es toujours en vie ! Pour ma part je n'ai plus d'ordi pour faire tourner Morro donc tous les projets sont en berne. Mais j'y reviendrai, tôt ou tard. C'est d'ailleurs tout-à-fait le genre de script dont je pourrai me servir ! Mon dernier mod, où le joueur devait être forcé de se mettre à poils pour avancer, en aurait eu l'utilité.

Modifié par Troglodyte, 13 février 2017 - 14:00.


#4 Nérévar42

Nérévar42

Posté 05 juin 2017 - 14:30

C'est super intéressant ! Ce n'est pas très loin de ce dont j'ai besoin à l'heure actuelle pour mon mod, à vrai dire. La nuance, c'est qu'il faut que le PJ ne se débrouille qu'avec ce que je voudrai bien lui donner et non pas ce qu'il avait auparavant dans l'inventaire. Alors, comment faire ? J'étais simplement parti sur une commande qui viderait l'inventaire dans son intégralité (en prévenant bien sûr auparavant le joueur du devenir de son équipement) mais apparemment elle n'existe pas. Alors comment obliger le joueur à utiliser seulement quelques objets et à lui refuser l'accès au reste, d'une manière ou d'une autre ? Merci d'avance à tous ! Image IPB


EDIT : Eh, je viens de tomber sur la solution de Troglodyte, quelques lignes plus bas dans la liste des topics sur les scripts, à savoir mettre la force à 0 pour obliger le PJ à poser tous ses objets. Du coup, inventer un genre de malédiction qui affaiblit le joueur suffira à justifier le fait de le débarrasser de son équipement et il suffira de lui rendre sa force après, à un point ou il ne pourra plus faire demi-tour. Peut-être existe-t-il une autre solution, mais je pense que je vais partir là-dessus pour l'instant.

Modifié par Nérévar42, 05 juin 2017 - 19:18.

" C'est en forgeant qu'on devient forgeron "


#5 Troglodyte

Troglodyte

Posté 10 juin 2017 - 22:24

De mémoire d'homme il n'en existe pas d'autre. :) C'est pas moi qui l'ai inventé, je l'ai demandé à des gens qui savaient tout.

#6 Nérévar42

Nérévar42

Posté 12 juin 2017 - 14:22

Je suis en train de plancher sur ladite malédiction pour forcer le joueur à gambader dans le plus simple appareil ... et je suis en train de me demander si l'effet de Plume ne pourrait pas tout faire foirer !

Imaginez la situation : le PJ a sa force à 0, et une épée qui pèse 50. Pour avancer, il doit poser l'épée ou il restera bloqué (logique, sa limite de poids est à zéro). Il est donc capable d'avancer avec 0 en poids sur lui.

Cependant, il peut ne pas avoir besoin de poser son épée s'il utilise un sort de Plume ! Il fait ainsi passer son poids de 50 à moins de 0, ce qui est suffisant pour avancer ! Et il emmène l'épée alors qu'il était censé la laisser...

Pas de souci, me direz-vous, il y a juste à rajouter un effet de silence permanent à ta malédiction. C'est effectivement ce qui m'est venu en tête. Mais les effets constants des anneaux, des ceintures et autres ? De quoi gruger bien comme il faut et embarquer un certain nombre d'objets tout en gardant son total de poids en-dessous du maximum, à savoir 0 !

Alors, une solution ?   ^^

Modifié par Nérévar42, 12 juin 2017 - 14:25.

" C'est en forgeant qu'on devient forgeron "


#7 Troglodyte

Troglodyte

Posté 12 juin 2017 - 19:42

Il faut juste pas mettre "force -100" mais quelque chose comme "force -500" et effectivement, interdire l'usage de la magie. Et là, bien malin qui pourra contrer le sort.

Après, tu sais, si le joueur charge sa partie, il peut mettre son équipement de côté, et faire cette phase du jeu, pour récupérer son équipement plus tard. Au bout d'un moment, il faut laisser le joueur décider s'il veut jouer le jeu ou non. Morrowind vanilla fonctionne déjà dans cet esprit, on peut très bien tuer Caïus Cosadès et niquer sa quête. Donc, hein.

#8 Nérévar42

Nérévar42

Posté 13 juin 2017 - 09:15

Bon, alors je vais en rester là je pense ...   ^^
Merci pour l'aide que vous m'avez apporté, en tout cas.

" C'est en forgeant qu'on devient forgeron "





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

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