[CARTES] Message d'échec suite à un forçage

Répondre
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1329
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Statut : Hors ligne

[CARTES] Message d'échec suite à un forçage

Message par Cocrane »

Il est possible d'afficher un message lorsqu'un personnage ne parvient pas à ouvrir un container par la force.

Le problème est je n'ai pas pu coder ce point.

Voici lecode que j'ai placé dans le fichier .baf de la carte.

Code : Tout sélectionner

IF 
  PickLockFailed("S2cercueil1")
THEN
  RESPONSE #100
    DisplayStringHead(LastTrigger,@6) 
END
J'ai juste le droit au message classique: vous n'avez pas réussi à forcer la serrure. :'(

Cocrane
Avatar du membre
Freddy_Gwendo
Orbe ancien
Messages : 5879
Enregistré le : sam. 23 avr. 2011, 01:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne

Message par Freddy_Gwendo »

Normal, car LastTrigger ne marche pas puisqu'il est considéré comme celui de la carte, non comme celui du conteneur.

En fait, l'offset qui contient cette information est 0x0084 (Lockpick string) du bloc de ton conteneur. Pour que ça fonctionne, il faut que tu le renseignes avec @6 dans ton fichier ARE.

Petite astuce WeiDU pour le faire directement lorsque tu installes ta carte :

Code : Tout sélectionner

COPY ~TonMod/Tacarte.are~ ~override/Tacarte.are~

	SET Mon_Message	= RESOLVE_STR_REF (@6)

	READ_LONG  0x70 "cont_off"		// Offset to containers
	READ_SHORT 0x74 "cont_num"		// Count of containers

	FOR (k = 0 ; k < cont_num ; ++k) BEGIN	// Pour chaque conteneur

		READ_ASCII ("%cont_off%" + (0xC0 * k)) "contain" (32) NULL

		PATCH_MATCH ~%contain%~ WITH
			S2cercueil1	BEGIN	WRITE_LONG ("%cont_off%" + 0x84 + (0xC0 * k)) Mon_Message END
			DEFAULT
		END

	END
NOTES :
  • Tu peux zapper la déclaration de variable Mon_Message en écrivant simplement WRITE_LONG ("%cont_off%" + 0x84 + (0xC0 * k)) RESOLVE_STR_REF (@6) END, mais je l'utilise car j’emploie souvent les mêmes messages.
  • Tu peux faire la même chose avec les portes et les régions (cf. suite du message).

Code : Tout sélectionner

	READ_SHORT 0x5a "region_num"	// Count of regions
	READ_LONG  0x5c "region_off"	// Offset to regions

	READ_LONG  0xa4 "door_num"	// Count of doors
	READ_LONG  0xa8 "door_off"	// Offset to doors

	FOR (i = 0 ; i < region_num ; ++i) BEGIN			// Pour chaque région

		READ_ASCII ("%region_off%" + ("%GW_reg_size%" * i)) "name" (32) NULL

		PATCH_MATCH ~%name%~ WITH
			Bibliotheque1	BEGIN	WRITE_LONG ("%region_off%" + 0x64 + ("%GW_reg_size%" * i)) GW_Mes_Biblio1 END
			Bibliotheque2	BEGIN	WRITE_LONG ("%region_off%" + 0x64 + ("%GW_reg_size%" * i)) GW_Mes_Biblio2 END
			Bibliotheque3	BEGIN	WRITE_LONG ("%region_off%" + 0x64 + ("%GW_reg_size%" * i)) GW_Mes_Biblio3 END
			DEFAULT
		END
	END

	FOR (j = 0 ; j < door_num ; ++j) BEGIN				// Pour chaque porte

		READ_ASCII ("%door_off%" + (0xC8 * j)) "nom" (32) NULL

		PATCH_MATCH ~%nom%~ WITH
			Coffre		BEGIN	WRITE_LONG ("%door_off%" + 0x98 + (0xC8 * j)) GW_Mes_Coffre END
			DEFAULT
		END
	END
Ça t'évite d'aller chercher dans NI la valeur de l'offset pour chaque trigger-door-container que tu veux modifier, surtout si tu en ajoutes de nouveau en cours de route. ;)

Je me suis d'ailleurs créé une macro pour ça :
► Afficher le texte

Code : Tout sélectionner

LAM ~GW_DEF_AREA_OFFSETS~ 		// DÉFINITION des offsets généraux des fichiers ARE.

COPY ~Diamant_Eternel/Cartes/Chap1/GW0000.are~ ~override/GW0000.are~

	SET GW_Mes_Portail	= RESOLVE_STR_REF (@1000001)	// Le portail est désactivé.
	SET GW_Mes_Epave	= RESOLVE_STR_REF (@1000002)	// Ce navire arrimé à la plateforme a été passé par le fond.
	SET GW_Mes_Statue1	= RESOLVE_STR_REF (@1000003)	// Autrefois superbe, cette statue brisée semble représenter un guerrier monumental.
	SET GW_Mes_Statue2	= RESOLVE_STR_REF (@1000004)	// Ce guerrier brandissant une énorme épée émerge de l'eau. Il devait être relié au socle brisé.
	SET GW_Mes_PotoJG4	= RESOLVE_STR_REF (@1000005)	// Le sol est couvert de croûtes de sang séché et de lambeaux de chair. Des piles de restes humains gisent dans les environs. Il semble qu'on a empalé les habitants sur ces pieux pointus pour les y laisser saigner à mort. Quelqu'un a été massacré ici.
	SET GW_Mes_Autel	= RESOLVE_STR_REF (@1000006)	// Cet autel calciné est submergé par une intolérable odeur de pourriture. Malgré les outrages qu'il a reçus, une impression de bien-être s'en dégage.
	SET GW_Mes_StatueFondue = RESOLVE_STR_REF (@1000007)	// Le placage en or de cette statue a été pillé.
	SET GW_Mes_StatueBroken = RESOLVE_STR_REF (@1000008)	// Autrefois superbe, cette statue a été brisée et son corps doré a été volé.
	SET GW_Mes_ArbreAcide	= RESOLVE_STR_REF (@1000009)	// Vous sentez l'odeur rance et acide des vapeurs toxiques qui ont manifestement détruit cet arbre.
	SET GW_Mes_ArbreBrule	= RESOLVE_STR_REF (@1000010)	// Tout ce qui reste d'un arbre qui a été calciné par un feu intense.
	SET GW_Mes_Maison	= RESOLVE_STR_REF (@1000011)	// Cette maison a été abandonnée précipitamment.

	PATCH_IF (SOURCE_SIZE > GW_area_min_size) THEN BEGIN

		LPF ~GW_READ_AREA_STRUCTURE~ RET GW_region_num GW_region_off END

		FOR (i = 0 ; i < GW_region_num ; ++i) BEGIN			// Pour chaque région

			READ_ASCII ("%GW_region_off%" + ("%GW_reg_size%" * i)) "name" (32) NULL

			SET GW_region_text = "%GW_region_off%" + "%GW_reg_text_of%" + ("%GW_reg_size%" * i)

			PATCH_MATCH ~%name%~ WITH
				Portail			BEGIN	WRITE_LONG GW_region_text GW_Mes_Portail END
				Epave1 Epave2	BEGIN	WRITE_LONG GW_region_text GW_Mes_Epave END
				Statue1			BEGIN	WRITE_LONG GW_region_text GW_Mes_Statue1 END
				Statue2			BEGIN	WRITE_LONG GW_region_text GW_Mes_Statue2 END
				PotoJG4			BEGIN	WRITE_LONG GW_region_text GW_Mes_PotoJG4 END
				Autel			BEGIN	WRITE_LONG GW_region_text GW_Mes_Autel END
				StatueFondue1 StatueFondue2 StatueFondue3 StatueFondue4 StatueFondue5 StatueFondue6	BEGIN	WRITE_LONG GW_region_text GW_Mes_StatueFondue END
				StatueBroken1 StatueBroken2 StatueBroken3 StatueBroken4 BEGIN	WRITE_LONG GW_region_text GW_Mes_StatueBroken END
				ArbreAcide		BEGIN	WRITE_LONG GW_region_text GW_Mes_ArbreAcide END
				ArbreBrule		BEGIN	WRITE_LONG GW_region_text GW_Mes_ArbreBrule END
				Maison			BEGIN	WRITE_LONG GW_region_text GW_Mes_Maison END
				DEFAULT
			END	// of PATCH_MATCH ~%name%~ WITH

		END		// of FOR (i = 0 ; i < GW_region_num ; ++i)
	END			// of PATCH_IF (SOURCE_SIZE > GW_area_min_size)
BUT_ONLY
Note spéciale : si tu pouvais utiliser les balises <CODE> dans tes messages de scripts, ça en simplifierait la lecture, et puis ça m'éviterait de les mettre en page. Je sais, je suis un gros fainéant. ;)
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1329
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Statut : Hors ligne

Message par Cocrane »

Je vois que tu maîtrises bien cette partie. ^^

J'ai utilisé ton code dans le TP2 avec un LOADTRA en amont pour signaler où se trouve le texte.

La mise à jour se fait sans erreur.

Dans DLTCEP, le container contient bien le nouveau teste dans openfail.

Par contre, dans le jeu, suite à un échec de forçage ou de crochetage, le message n'apparait pas.

Cocrane
Avatar du membre
Isaya
Planaire
Messages : 6991
Enregistré le : mar. 22 juil. 2003, 22:03
Localisation : Plaisir
Contact :
Statut : Hors ligne

Message par Isaya »

Quand tu modifies une zone, lorsque tu veux tester dans le jeu, assure-toi que tu repars bien d'une sauvegarde dans laquelle tu n'as pas déjà visité la zone que tu veux patcher. Si tu ne respectes pas cette règle, tu verras systématiquement l'état de la zone enregistré dans ta sauvegarde (mémorisé dans le fichier SAV) et par conséquent, aucune de tes modifications, bien qu'elles soient passé dans le fichier ARE de l'override.
:!: Peu disponible
Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1329
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Statut : Hors ligne

Message par Cocrane »

C'est noté mais ce n'est pas lié à mon cas.

Ma save est sur l'AR0015 et ensuite les PNJ sont déplacés sur la carte en question.

Cocrane
Avatar du membre
Freddy_Gwendo
Orbe ancien
Messages : 5879
Enregistré le : sam. 23 avr. 2011, 01:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne

Message par Freddy_Gwendo »

Certes, mais est-ce la première fois que tu te rends dans cette carte ? Si non, c'est normal que les modifs ne soient pas prises en compte comme le signale Isaya. En revanche, si oui, c'est plus qu'étrange. Dans ce cas, envoie-moi ton fichier .are pour que j'y jette un œil dans NI. Il y a peut-être un flag non coché dans ton conteneur.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1329
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Statut : Hors ligne

Message par Cocrane »

Image
container.jpg

Cocrane
Fichiers joints
COM021.rar
(3.17 Kio) Téléchargé 72 fois
Avatar du membre
Freddy_Gwendo
Orbe ancien
Messages : 5879
Enregistré le : sam. 23 avr. 2011, 01:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne

Message par Freddy_Gwendo »

Bizarre, vous avez dit bizarre ? Comme c'est ...

Plus sérieusement, je ne vois rien qui cloche dans ton fichier.

Ceci dit, pour être bien sûr :

1. Es-tu certain que le message ne s'affiche pas dans la boîte de dialogue ? Car il ne s'affiche pas au-dessus du perso dans l'écran de jeu.
2. As-tu essayé de faire crocheter le conteneur par un voleur ou as-tu seulement essayé de le forcer ? Teste avec un voleur.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1329
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Statut : Hors ligne

Message par Cocrane »

Dans la boite dialogue, le message n'apparait pas. Juste le message classique.

J'ai essayé de crocheter et de forcer la serrure.

A noter, j'ai enlevé le script qui était dans mon COM021.BAF

Code : Tout sélectionner

IF 
  PickLockFailed("S2cercueil1")
THEN
  RESPONSE #100
    DisplayStringHead(LastTrigger,@6) 
END
Il me semble que la config du .ARE est autonome.

Cocrane
Répondre

Retourner vers « Cartes et Cartes du monde »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités