Voici le code qui dérive un sort à 1 habilité en sorts à plusieurs habilités :
Code : Tout sélectionner
//Dérive un sort composé d'une seul niveau en plusieurs niveaux. (fourni par le génialissime Zranoff de Legends)
DEFINE_PATCH_FUNCTION MULTI_LEVELS
BEGIN
READ_LONG 0x64 ZF_abilities_off
READ_SHORT 0x68 ZF_num_abilities
READ_SHORT 0x82 ZF_niv_min
READ_SHORT 0x90 ZF_nb_feat
SET ZF_c=0
FOR (ZF_i = ZF_niv_min+ZF_inc_level; ZF_i < ZF_max_level+1; ZF_i += ZF_inc_level) BEGIN
SET ZF_c=ZF_c+1
READ_ASCII 0x72 ZF_ability (0x28)
INSERT_BYTES (0x72+ZF_c*0x28) 0x28
WRITE_ASCIIE (0x72+ZF_c*0x28) ~%ZF_ability%~
WRITE_SHORT (0x72+ZF_c*0x28+0x10) ZF_i
END
WRITE_SHORT 0x68 ZF_num_abilities+ZF_c
WRITE_LONG 0x6a 0x72+(ZF_c+1)*0x28
SET ZF_d=0
SET ZF_h=ZF_nb_feat*0x30
FOR (ZF_i = ZF_niv_min+ZF_inc_level; ZF_i < ZF_max_level+1; ZF_i += ZF_inc_level) BEGIN
SET ZF_d=ZF_d+1
READ_ASCII 0x72+(ZF_c+1)*0x28+(ZF_d - 1)*ZF_h ZF_features (ZF_h)
INSERT_BYTES (0x72+(ZF_c+1)*0x28+ZF_d*ZF_h) ZF_h
WRITE_ASCIIE (0x72+(ZF_c+1)*0x28+ZF_d*ZF_h) ~%ZF_features%~
FOR (ZF_z=0;ZF_z<ZF_nb_feat;ZF_z=ZF_z+1)BEGIN
READ_LONG (0x72+(ZF_c+1)*0x28+(ZF_d - 1)*ZF_h+0x30*ZF_z+0x0e) ZF_duree_min
PATCH_IF (ZF_duree_min>4)THEN BEGIN
WRITE_LONG (0x72+(ZF_c+1)*0x28+ZF_d*ZF_h+0x30*ZF_z+0x0e) ZF_duree_min+ZF_inc_duree
END
END
WRITE_SHORT (0x72+ZF_d*0x28+0x20) ZF_d*ZF_nb_feat
END
WRITE_BYTE 0x82 1
END
Pour utiliser ce code, je crée un sort avec 1 seule habilité, en mettant le niveau de l'habilité au niveau du mage au moment ou il peut l'utiliser (par exmple niveau 7 pour un sort lvl 4). Ensuite le code me crée tous les niveaux de 8 à 20 (suivant les paramètres) en changeant les durées suivant le paramètres (en secondes). A la fin, il indique "niveau 1" à la première habilité. (Oui, j'ai compris, je devrais dire "Header")
Et voilà comment je l'appele pour mon sort :
Code : Tout sélectionner
ADD_SPELL ~Derats_Magasin_2/Sorts/pxl2aur2.spl~ 2 4 WIZARD_PX_RESISTANCE_AURA SPRINT current_spell_res "%DEST_RES%" SET ZF_max_level = 20 SET ZF_inc_level = 1 SET ZF_inc_duree = 6 LPF MULTI_LEVELS END
READ_LONG 0x64 abilities_off
READ_SHORT 0x68 num_abilities
READ_LONG 0x6a effects_off
READ_SHORT 0x90 num_effects
FOR (i=1; i<num_abilities; i+=1) BEGIN // pour chaque habileté
FOR (a=1 ; a<8 ; a+=1) BEGIN //pour chaque effet du 2ème au 8eme
WRITE_SHORT 0x2a6+a*0x30 5+i //indiquer le chiffre de 5+niveau du lanceur
END
END
pour le dukp ça marche très bien, après application du LPF MULTI_LEVELS END j'ai souvent utilisé la routine pour patcher chaque habilité. Mais je n'ai jamais combiné "patcher chaque effet dans chaque habilité". Et ça coince.