Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

Effet #122 : Création d'un objet à plusieurs charges

Regroupe tous les fichiers spl et pro
Répondre
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne

Effet #122 : Création d'un objet à plusieurs charges

.

Message par Freddy_Gwendo »

Je souhaite créer ce sort :
@7501004 = ~Création d'eau (Invocation)
Niveau : 1
Sphère : Création, Élémentaire (Eau)
Composantes : V, G
Portée : 6 mètres
Durée : instantanée
Temps d'incantation : 1 round
Zone d'effet : jusqu'à 8 litres d'eau par niveau
Jet de sauvegarde : aucun
Résistance à la magie : non

En lançant ce sort, le prêtre peut créer un maximum de huit litres d'eau par niveau. Cette eau est pure et potable, comme de l'eau de pluie. Elle apparaît dans n'importe quel récipient capable de la recevoir, ou au-dessus d'une zone trois fois plus large (ce qui permet de créer une fine pluie ou de remplir plusieurs récipients de taille moindre). L'eau pèse 1 kilo par litre.
Composante matérielle : une goutte d'eau.~
Comme tous mes sorts, il est géré par une routine tpa :

Code : Tout sélectionner

// Création d'eau
COPY ~Diamant_Eternel/Clones/GW.spl~	~override/GWCreWa.spl~	SAY NAME1 @7501003	SAY UNIDENTIFIED_DESC @7501004
	LPF GW_NEW_SPELL INT_VAR spelltype = 2 spelllevel = 1 graphics = 15 school1 = 6 school2 = 13 location = 2 target = 5 range = 1 speed = 9 ablevel = 1 STR_VAR icon1 = EVAL "%DEST_RES%C" icon2 = EVAL "%DEST_RES%B" GW_son = CAS_P08 END
	WRITE_LONG  0x18 (THIS BAND BNOT BIT14)	// supprime Non-magical ability
	WRITE_LONG  0x1e THIS | BIT9			// ajoute Enchanters exclusion
	LPF GW_ADD_HEADERS INT_VAR GW_Headers = 50 END
	SET power = 1
	SET resist_dispel = 2
	SET target = 1
	FOR (header=1;header<=50;++header) BEGIN
		LPF configure_spell_header INT_VAR f_Header = header END
		PATCH_IF (header < 10) BEGIN TEXT_SPRINT outres "0%header%" END ELSE BEGIN TEXT_SPRINT outres "%header%" END
		LPF ADD_SPELL_EFFECT INT_VAR insert_point = "-1" opcode = 177 target timing = 1 parameter2 = 2 power resist_dispel header STR_VAR resource = EVAL "GWCREW%outres%" END	// Item: Create Inventory Item [122]
		LPF ADD_SPELL_EFFECT INT_VAR insert_point = "-1" opcode = 215 target duration = 3 parameter2 = 1 power resist_dispel header STR_VAR resource = GWWINDC END
		LPF ADD_SPELL_EFFECT INT_VAR insert_point = "-1" opcode = 215 target timing = 3 duration = 3 parameter2 = 1 power resist_dispel header STR_VAR resource = GWCREWAT END
		LPF ADD_SPELL_EFFECT INT_VAR insert_point = "-1" opcode = 139 target timing = 4 duration = 4 parameter1 = RESOLVE_STR_REF (@7140032) power resist_dispel header END	// a créé de l'eau
	END
BUT_ONLY
// Outre d'eau
COPY ~Diamant_Eternel/Objets/Food/GWOutre.itm~ ~override/GWOutre.itm~	SAY NAME1 @8480005	SAY NAME2 @8480005	SAY DESC @8480006	SAY 0x19e @7000005 // Avale...
Puis création de l'effet :

Code : Tout sélectionner

ACTION_DEFINE_ASSOCIATIVE_ARRAY Effets_Nouveaux BEGIN
//	op	  Cible	  Timing  Durée		p1		p2			p3		p4	   pb1	pb2	   Dés Fac power ST bonus   MR	ressource	=>	effet
//- 0 ----- 1 ----- 2 ----- 3 ----- 4 ----- 5 --------- 6 ----- 7 ----- 8 -- 9 --- 10 -11-- 12 - 13 - 14 -- 15 ---- 16 ----------------------------------------------------------------
/* CHEVALIER DE DIAMANT */
// Sort Création d'eau
	122,	2,		9,		0,		1,		0,			8,		8,		0,	100,	0,	0,	0,	0,	0,		0,	GWOUTRE		=> GWCreW01	// Item: Create Inventory Item [122]
...
END

Patch de création de l'effet (je vous passe les détails)

END

// Sort Création d'eau
OUTER_FOR (i=2 ; i<51 ; i +=1) BEGIN
	ACTION_IF (i < 10) BEGIN OUTER_TEXT_SPRINT nb "0%i%" END ELSE BEGIN OUTER_TEXT_SPRINT nb "%i%" END
		COPY_EXISTING ~GWCreW01.eff~	~override/GWCreW%nb%.eff~
			WRITE_LONG 0x1c %i%	// paramètre 1
		BUT_ONLY
END
Bref, l'outre doit avoir 8 charges (chacune correspondant à la consommation d'un litre).


L'installation fonctionne, le fichier GWOutre.itm dispose bien de ses 8 charges, sauf que....

Quand je lance ce sort, quelque soit le niveau, l'outre ne dispose que d'une charge ! :(


Une idée ?

Note : J'ai indiqué la valeur 8 pour parametre3, parametre4 et paramètres 3 et 4 avec le même résultat.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
deratiseur
Golem de fer
Messages : 3714
Enregistré le : mer. 05 déc. 2007, 18:35
Localisation : Gap, Hautes alpes
Statut : Hors ligne
.

Message par deratiseur »

Désolé, je crée des sorts "normalement", je n'utilise pas de routine TPA pour cela. Pourquoi faire si compliqué quand on peut faire simple ?
Edite ton sort pour faire un onglet par niveau, et change la valeur dans chaque niveau à la main, ou utilise cette routine du dukp (simple!) :

Code : Tout sélectionner

COPY        ~Derats_kits/Warlord/Spells/pxw4boua.spl~        ~override~
READ_LONG 0x64 abilities_off
READ_SHORT 0x68 num_abilities
FOR (i = 0; i < num_abilities; i += 1) BEGIN            // pour chaque habileté
    WRITE_BYTE (abilities_off + 0x120*i + 0x234) 34+i*2    // indiquer la valeur du premier effet comme lvlx2 + 20
END
Combien de moddeurs se sont lancés dans des projets faramineux pour ne jamais les finir ? Je ne fait que des "petits" mods, mais au moins je les finis.

Mes mods sont tous sur Mediafire et Github
Et leurs descriptions sont ici.
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

C'est ce que fait ma routine :

Code : Tout sélectionner

FOR (header=1;header<=50;++header) BEGIN
	LPF ADD_SPELL_EFFECT INT_VAR insert_point = "-1" opcode = 177 target timing = 1 parameter2 = 2 power resist_dispel header STR_VAR resource = EVAL "GWCREW%outres%" END	// Item: Create Inventory Item [122]
END
Et ça ne fonctionne : le problème, c'est que le fichier de l'outre a bien 8 charges, mais que le perso n'en a accès qu'à une une fois l'objet créé via le sort !

Quant à la routine tpa, une fois définie, elle me permet de gérer la création de tous les headers pas par pas et surtout il me suffit de modifier un paramètre (resist_dispel par exemple) et WeidU fait tout le boulot pour moi, quelque soit le sort !


EDIT : un modo de passage pourrait-il modifier le titre et changer 177 par 122 ? Merci d'avance.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Avatar du membre
Isaya
Adepte de Grondemarteau
Planaire
Messages : 6990
Enregistré le : mar. 22 juil. 2003, 21:03
Localisation : Plaisir
Contact :
Statut : Hors ligne
.

Message par Isaya »

A vrai dire je n'ai pas d'expérience pratique de cet effet. Mais quelque chose ne me semble pas correspondre à la description de l'effet.

La description de l'effet 122 indique que les charges sont le paramètre 1. La paramètre 4 correspond aux charges de la 3ème capacité.
#122 (0x122) Item: Create Inventory Item [122]
Parameter #1: Charges
Parameter #2: Irrelevant
Description:
Creates the item specified by the resource key. The number of items created is controlled by the 'Charges' field. The number of secondary charge is determined by P3. The number of tertiary charges is determined by P4 (external eff's). The item is created in the Inventory.
Du coup je ne comprends pas bien pourquoi tu indiques 8 pour le paramètre 4. Je me serai attendu à ce que ce soit le paramètre 1.

La question qui me vient ensuite est : dans quel extended header de l'objet as-tu mis la capacité qui permet de boire ? Est-ce bien cohérent du rang de la charge dans lequel tu as mis la charge initiale à la création de l'objet
Dans ton exemple, il me semble qu'il faudrait que ce soit le troisième extended header pour que la valeur 8 dans le paramètre 4 fasse l'effet escompté.

Je me demande, en voyant la description du sort et les valeurs mises pour p1 et p3 / p4, si tu considères p1 comme la valeur min et p3 ou p4 comme la valeur max.
Je n'ai pas le sentiment que l'effet 122 permette de générer l'aspect "jusqu'à 8 charges" du sort.
:!: 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 !
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

Bon, comme d'hab, tu as vu juste ! ;)


Ce foutu effet ne me sert à rien. En tout cas pas à faire ce que je veux.
D'ailleurs après avoir cherché de partout, aucun opcode ne permet de créer un objet en gérant le nombre de charges du PREMIER header. Le paramètre 1 ne gère que le nombre d'objets créés.

J'ai trouvé la parade : convocation d'une créature invisible dont le script donne un objet [GiveItemCreate(S:ResRef,O:Object,I:Usage1,I:Usage2,I:Usage3)] avec Usage2 correspondant à la valeur d'une variable lancée par le sort avec l'opcode Modify Global Variable [265]

Mais je ne l'utiliserai pas car je me suis aperçu qu'en l'état ce sort foutait en l'air l'intérêt de mon composant nourriture : à niveau 20, le prêtre créée 20x8 litres d'eau ! :gign:

J'ai donc pris des libertés avec la définition officielle du sort pour ne pouvoir le lancer qu'une fois toutes les huit heures et ne créer qu'un litre d'eau tous les deux niveaux. Eau qui disparaît au bout de 4 heures... Donc pas de réserves. :whistle3:

Du coup, j'utilise le paramètre 1 pour gérer le nombre d'outres de 1 litre créées.

Et voilou ! :dance4:


Edit : et merci d'avoir changé le titre du fil !
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Répondre

Retourner vers « Sorts et projectiles »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité