[WeiDU] Comment fonctionne la commande RANDOM de WeiDU ?
Posté : dim. 19 juil. 2015, 17:12
En phase de développement, j'ai créé plusieurs macros et fonctions pour automatiser la création de plusieurs fichiers spécifiques. Parmi elles, une procédure permet de générer des créatures sans me soucier de leurs caractéristiques, par exemple des PNJ non recrutables, mais nécessaires pour le scénar.
Cette fonction semblait fonctionner jusqu'à ce que je m'aperçoive qu'elle générait toujours les mêmes caractéristiques à chaque installation (les valeurs pouvaient varier d'une installation à l'autre, mais étaient identiques pour toutes les créatures créées).
Par exemple :
CONTROLE RANDOM : random_str = 10 - random_str_ex = 0 - random_dex = 14 - random_con = 11 - random_int = 11 - random_wis = 6 - random_chr = 12
Après avoir trituré la doc WeiDU, j'ai fini par trouver une solution en ajoutant ces lignes jaunes dans la fonction :
Problème : je ne comprends pas pourquoi ça fonctionne et quelle est l'utilité de la commande RANDOM_SEED, si ce n'est qu'elle semble solutionner mon problème. Et je déteste ne pas comprendre ce que je fais.
Alors si quelqu'un a une explication, je suis preneur.
Code : Tout sélectionner
/*-----------------------------------------------------------------------------------*
* MACRO GW_CRE_STATS_RANDOM : Création aléatoire des caractéristiques des créatures *
*-----------------------------------------------------------------------------------*/
DEFINE_PATCH_FUNCTION ~GW_CRE_STATS_RANDOM~
RET GW_str_random
GW_str_ex_random
GW_dex_random
GW_int_random
GW_wis_random
GW_con_random
GW_chr_random
BEGIN
SET GW_str_random = 0
SET GW_str_ex_random = RANDOM (1 100)
SET GW_dex_random = 0
SET GW_int_random = 0
SET GW_wis_random = 0
SET GW_con_random = 0
SET GW_chr_random = 0
PATCH_FOR_EACH random_stat IN ~GW_str_random~ ~GW_dex_random~ ~GW_con_random~ ~GW_int_random~ ~GW_wis_random~ ~GW_chr_random~ BEGIN
FOR (i = 0; i < 3; i += 1) BEGIN
SET EVALUATE_BUFFER ~%random_stat%~ += RANDOM (1 6) // 3 x 6 = 18 !
END
END
// exceptional strength (only for warriors with 18 strength)
PATCH_IF (%GW_str_random% != 18) BEGIN
SET GW_str_ex_random = 0
END ELSE BEGIN
PATCH_IF (("%GW_class_lib%" STRING_CONTAINS_REGEXP "FIGHTER" != 0) && ("%GW_class_lib%" STRING_CONTAINS_REGEXP "RANGER" != 0)
&& ("%GW_class_lib%" STRING_CONTAINS_REGEXP "PALADIN" != 0)) BEGIN
SET GW_str_ex_random = 0
END
END
PATCH_PRINT ~CONTROLE RANDOM STATS : random_str = %GW_str_random% - random_str_ex = %GW_str_ex_random% - random_dex = %GW_dex_random% - random_con = %GW_con_random% - random_int = %GW_int_random% - random_wis = %GW_wis_random% - random_chr = %GW_chr_random%~
// LPF GW_CRE_STATS_ADJUST INT_VAR GW_str_random GW_str_ex_random GW_dex_random GW_int_random GW_wis_random GW_con_random GW_chr RET GW_str_ajust GW_str_ex_ajust GW_dex_ajust GW_int_ajust GW_wis_ajust GW_con_ajust GW_chr_ajust END // adjust statistics to match class and racial minimums, maximums and modifiers
END
Par exemple :
CONTROLE RANDOM : random_str = 10 - random_str_ex = 0 - random_dex = 14 - random_con = 11 - random_int = 11 - random_wis = 6 - random_chr = 12
Après avoir trituré la doc WeiDU, j'ai fini par trouver une solution en ajoutant ces lignes jaunes dans la fonction :
Code : Tout sélectionner
DEFINE_PATCH_FUNCTION ~GW_CRE_STATS_RANDOM~
RET GW_str_random
GW_str_ex_random
GW_dex_random
GW_int_random
GW_wis_random
GW_con_random
GW_chr_random
BEGIN
[color="#FFFF00"] INNER_ACTION BEGIN
RANDOM_SEED null // Initialize random numbers
END[/color]
SET GW_str_random = 0
...
Alors si quelqu'un a une explication, je suis preneur.