[WeiDU] Comment utiliser un fichier ini pour définir des variables alphanumériques ?
- 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
[WeiDU] Comment utiliser un fichier ini pour définir des variables alphanumériques ?
.
Je voudrais simplifier l'installation de mon mod, notamment zapper certains ACTION_READLN en utilisant des variables définies dans un fichier .ini.
D'après ce que j'ai vu, il est assez facile d'aller rechercher des valeurs numériques en vérifiant par exemple l'existence d'une ligne ma_variable=0 ou ma_variable=1.
En revanche, je suis complètement perdu sur la manière de vérifier une valeur alphanumérique.
En l'occurrence, je voudrais :
1. Lancer ACTION_READLN si unicorn_name="unknown", puis écrire unicorn_name="nom de ma licorne" dans le fichier ini.
2. Sinon, lire la variable unicorn_name (ex : unicorn_name="nom de ma licorne") pour l'intégrer dans mes traitements.
Et je suis un poil coincé. Des idées ?
D'après ce que j'ai vu, il est assez facile d'aller rechercher des valeurs numériques en vérifiant par exemple l'existence d'une ligne ma_variable=0 ou ma_variable=1.
En revanche, je suis complètement perdu sur la manière de vérifier une valeur alphanumérique.
En l'occurrence, je voudrais :
1. Lancer ACTION_READLN si unicorn_name="unknown", puis écrire unicorn_name="nom de ma licorne" dans le fichier ini.
2. Sinon, lire la variable unicorn_name (ex : unicorn_name="nom de ma licorne") pour l'intégrer dans mes traitements.
Et je suis un poil coincé. Des idées ?
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Isaya
- Adepte de Grondemarteau
- Planaire
- Messages : 6990
- Enregistré le : mar. 22 juil. 2003, 21:03
- Localisation : Plaisir
- Contact :
- Statut : Hors ligne
.
Peux-tu citer un mod qui le fait afin d'avoir un exemple, s'il te plaît ? Parce c'est du chinois pour moi.
:!: 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 !
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 !
- 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
.
Plusieurs mods utilisent des fichiers ini propres ou installés par d'autres mods, notamment BGT, Spellpack, Item et spell revision, ou stratagems.
Exemple d'utilisation par BGT :
Exemple d'utilisation par Spellpack :
Et fichier ini utilisé par Item revision ;
En fait, ce que je veux, c'est inclure un certain nombre de variables de configuration dans le fichier .ini, notamment les noms d'une licorne et d'un destrier.
unicorn_name = "unknown"
warhorse_name = "unknown"
Lors de l'installation, si unicorn_name est "unknown", je lance la procédure READLN afin que l'utilisateur choisisse un nom pour sa licorne. Sinon, j'utilise le nom saisi dans le fichier ini.
En phase de développement, ça m'éviterait des saisies pénibles lors de mes installations quotidiennes après chaque modif. Pour y remédier, je déclare pour l'instant une variable à l'installation (OUTER_SPRINT unicorn_name), mais comme la prochaine génération de WeiDU gérera les fichiers ini, j'ai décidé de rayer définitivement ce point de ma ToDO list.
De plus, les utilisateurs avertis pourront modifier directement le fichier ini avant l'installation.
Exemple d'utilisation par BGT :
Code : Tout sélectionner
///////////////////////////////////////////////////////
// journal, sound, and [] update of bg1.tra
///////////////////////////////////////////////////////
OUTER_SET tra_updated = 0
ACTION_IF FILE_EXISTS ~bgt/install/%LANGUAGE%/bg1.tra~ BEGIN
COPY ~bgt/install/%LANGUAGE%/bg1.tra~ ~bgt/install/%LANGUAGE%/bg1.tra~
PATCH_INCLUDE ~bgt/include/tra_update.tpp~
PATCH_IF ("%LANGUAGE%" STRING_EQUAL ~english~) BEGIN
PATCH_IF NOT (FILE_EXISTS "TobEx_ini/TobExVer.txt") OR
NOT (FILE_EXISTS "TobEx_ini/TobExTweak.ini") OR
NOT ([color="#FFFF00"]FILE_CONTAINS "TobEx_ini/TobExTweak.ini" "Engine :D isable Force Inventory Pause=1[/color]")
BEGIN
PATCH_INCLUDE ~bgt/include/tra_mod_eng.tpp~
END
END
SET tra_updated = 1
LOAD_TRA ~bgt/install/%LANGUAGE%/bg1.tra~
END
Code : Tout sélectionner
// Updating Chant .vvc files if 3D acceleration is enabled, so it blends into the background more
ACTION_IF ([color="#FFFF00"]FILE_CONTAINS ~baldur.ini~ ~3D Acceleration=1~[/color]) BEGIN
COPY_EXISTING ~ICBLESAI.vvc~ ~override~
~SPBLESHI.vvc~ ~override~
~LC_CURSE.vvc~ ~override~
READ_BYTE 0x18 display_flags1
WRITE_BYTE 0x18 (display_flags1 BAND 0b11110111) // Disables 3D blend
READ_BYTE 0x19 display_flags2
WRITE_BYTE 0x19 (display_flags2 BOR 0b00000010) // Enables this nice-looking blend
READ_BYTE 0x1a colour_flags1
WRITE_BYTE 0x1a (colour_flags1 BOR 0b00100000) // Enables "own brightness"
BUT_ONLY_IF_IT_CHANGES
END
Code : Tout sélectionner
// Main Component
install_tobex = 1 // installs ToBEx; automatically skipped if ToBEx is already installed and up to date or it's not a non-EE ToB game
install_sensible_lore = 1 // balances lore gains so classes other than bard have a better chance of identifying items
install_ioun_stone_animations = 1 // new ioun stone animations by WoRm
install_item_reallocation = 1 // removes two items from bonus merchant and equips them on enemies, matching SCS behaviour
// Store Revisions
install_masterwork_weapons = 0 // +1 weapons are changed to masterwork; outdated - mostly functional, but not recommended (use SCS component instead)
// Revised Armor
armor_dexterity_penalty = 1 // adds dexterity penalties to armor
armor_speed_factor_penalty = 1 // ditto for attack speed factor
armor_physical_resistance = 1 // adds physical resistance bonus
armor_ac_modifiers = 1 // modifies AC bonuses vs different weapon types (slashing, piercing etc.)
// Spellcasting in Armor
armor_casting_speed_clerics = 0 // divine spellcasters will be affected as well ("Casting Speed Penalties for Arcane Casters" subcomponent only)
armor_free_casting = 0 // cheat version, will override other options and enable unrestricted spellcasting in armor (either subcomponent)
bards_armor_spell_penalties = 0 // Bards get the normal penalties to casting when using any armor lighter than chain mail
// Weapon Changes
halberds_can_slash_too = 0 // adds a slashing mode to halberds
flails_have_extended_range = 0 // extends flails' range to 2
dnd_3e_scimitars = 0 // sets scimitars' damage to 1d6 (from 1d8) and add +5% critical chance
// Revised Backstabbing
add_backstabbing_penalties = 1 // gives backstab penalties to certain weapons, overridden by "Penalties with Thief-only Weapons" if chosen.
unicorn_name = "unknown"
warhorse_name = "unknown"
Lors de l'installation, si unicorn_name est "unknown", je lance la procédure READLN afin que l'utilisateur choisisse un nom pour sa licorne. Sinon, j'utilise le nom saisi dans le fichier ini.
En phase de développement, ça m'éviterait des saisies pénibles lors de mes installations quotidiennes après chaque modif. Pour y remédier, je déclare pour l'instant une variable à l'installation (OUTER_SPRINT unicorn_name), mais comme la prochaine génération de WeiDU gérera les fichiers ini, j'ai décidé de rayer définitivement ce point de ma ToDO list.
De plus, les utilisateurs avertis pourront modifier directement le fichier ini avant l'installation.
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- 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
.
Un an et demi plus tard, le problème est réglé.
Voici comment lire le fichier ini suivant :
Code tp2:
Ce code fera sans doute partie du prochain utilitaire d'installation automatique des mods.
Voici comment lire le fichier ini suivant :
Code : Tout sélectionner
;101_ia.tph traified
; Use 1pp or IWD style female dwarf paperdolls?
; 1 = IWD - 2 = 1pp
1pp_Fdwarf=2
;104_core.tph traified
; Do you want to include SoA style loading screens for ToB?
; 1 = Yes. - 2 = Keep loading screens unchanged.
1PP_gui=1
; Install updated fonts? (may cause issues with languages using different font .BAMs)
; 1 = Yes - 2 = Keep fonts unchanged
1pp_updated_fonts=1
; Use mixed case labels?
; 1 = Yes - 2 = No
1pp_labels=1
; Softer Spell Effects
; WARNING: This component will only work properly with 3D support enabled (alpha blending). Installing this component on BG2 in software rendering mode IS NOT A GOOD IDEA.
; 1 = Yes, install - 2 = No, cancel installation
1pp_softer_spell_effects=1
; Install IWD-style Agannazar's Scorcher or alternate style?
; 1 = IWD style - 2 = BGII alternate
1pp_agannazar_scorcher=2
;Entrez le nom de votre licorne
licorn_name=bla bla
Code tp2:
Code : Tout sélectionner
ALWAYS
OUTER_SPRINT configuration-default EVAL "%MOD_FOLDER%/configuration-default.ini" // default configuration file to read initial variable values
OUTER_SPRINT configuration EVAL "%MOD_FOLDER%/configuration.ini" // user created file, not included inside mod archive, if exist it will overwrite variable values from default configuration file
DEFINE_ACTION_MACRO GW_BUILD_INI_ARRAY BEGIN
OUTER_TEXT_SPRINT $GW_ini_contents(~%label%~) ~%value%~
END
DEFINE_PATCH_FUNCTION ~GW_READ_INI_VARIABLE~
INT_VAR start_offset = 0
RET start_offset
end_offset
RET_ARRAY GW_ini_contents
BEGIN
SET offset = start_offset
PATCH_IF (offset < 0) BEGIN SET offset = 0 END
PATCH_IF (offset > BUFFER_LENGTH) BEGIN SET offset = BUFFER_LENGTH END
SET start_offset = "-1"
SET end_offset = "-1"
SET ofsStart = INDEX_BUFFER(~[0-9a-zA-Z]~ offset)
PATCH_IF (ofsStart >= 0) BEGIN
SET ofsValue = INDEX_BUFFER(~=~ ofsStart)
PATCH_IF (ofsValue >= 0) BEGIN
READ_ASCII (ofsStart) label (ofsValue - ofsStart)
TO_LOWER label
SET ofsEnd = INDEX_BUFFER(~[%WNL%]~ ofsValue)
PATCH_IF (ofsEnd >= 0) BEGIN
READ_ASCII (ofsValue + 1) value (ofsEnd - ofsValue -1)
SET start_offset = ofsStart
SET end_offset = ofsEnd
INNER_ACTION BEGIN LAM GW_BUILD_INI_ARRAY END
END
END
END
END
DEFINE_ACTION_FUNCTION GW_READ_CONFIG
STR_VAR GW_filename = ""
RET_ARRAY GW_ini_contents
BEGIN
COPY - ~%GW_filename%.ini~ ~override~ // COPY - means no actual changes to the file
INSERT_BYTES SOURCE_SIZE (STRING_LENGTH ~%WNL%~)
WRITE_ASCIIE SOURCE_SIZE ~%WNL%~
REPLACE_TEXTUALLY ";.*" ""
REPLACE_TEXTUALLY "#.*" ""
COUNT_REGEXP_INSTANCES CASE_SENSITIVE ~=~ GWnbvariables
start_offset = 0
FOR (i = 0 ; i < GWnbvariables ; ++i) BEGIN
LPF ~GW_READ_INI_VARIABLE~ INT_VAR start_offset RET end_offset RET_ARRAY GW_ini_contents END
start_offset = end_offset
END
END
PRINT "%configuration-default%"
LAF GW_READ_CONFIG STR_VAR GW_filename = EVAL "%configuration-default%" RET_ARRAY GW_array = GW_ini_contents END
ACTION_IF FILE_EXISTS ~%configuration%~ THEN BEGIN
PRINT "%configuration%"
LAF GW_READ_CONFIG STR_VAR GW_filename = EVAL "%configuration%" RET_ARRAY GW_array = GW_ini_contents END
END
END
BEGIN @1 DESIGNATED 100 LABEL "Main"
ACTION_PHP_EACH GW_array AS label => value BEGIN
OUTER_SPRINT EVAL "%label%" "%value%"
PRINT "VARIABLE %label% = %value%"
END
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité