Page 1 sur 1

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

Posté : jeu. 09 mars 2017, 20:59
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

Posté : ven. 10 mars 2017, 11:44
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
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. ;)

Posté : ven. 10 mars 2017, 20:40
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

Posté : ven. 10 mars 2017, 22:50
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.

Posté : ven. 10 mars 2017, 23:45
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

Posté : sam. 11 mars 2017, 08:11
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.

Posté : sam. 11 mars 2017, 09:25
par Cocrane
Image
container.jpg

Cocrane

Posté : sam. 11 mars 2017, 11:01
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.

Posté : sam. 11 mars 2017, 11:11
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