Cette forme marche très bien, toutes ses fonctions sont effectuées sous leurs conditions, sans aucun problèmes:
Spoiler
Mais cette variante là ne marche pas, le test " if ( GetSpellEffects "RG_lier_familier" == 1 ) " n'est pas validé (c'est celui qui lance le dialogue du rituel de liaison, à l'issue duquel la variable "familier" sera mise à 2).begin RG_2_Chat_cre ;Script Original par Lord Mortim ;Corrigé et Réutilisé par l'équipe ;Ce script est attribué au chat Eusèbe Short doOnce Short niveau short test float vie float magie float fatigue Short vitesse short dead short instance short jour float curetimer float posX float posY float posZ short RituelActive short outcell short requete short follow short go float timer ; globales : familier, RG_niveau, RG_nivTEST, RG_del_fam, rituel, ritueldone, RG_follow, DernierJour if ( CellChanged == 1 ) If ( familier == 2 ) if ( follow == 1 ) disable If ( instance == RG_Del_Fam ); si c'est bien le même exemplaire du famillier set RG_follow to 1; cf script NM_GLO_concordiamagica (place une nouvelle instance AtPc) endif endif endif else if ( menumode == 1 ) return endif If ( familier == 2 ) if ( OnActivate == 1 ) Activate endif if ( GetDistance, Player < 1024 ) set posx to ( "player"->Getpos x ) set posy to ( "player"->Getpos y ) set posz to ( "player"->Getpos z ) if ( doonce == 2 ) if ( "Player"->GetLevel > RG_niveau ) set test to ( "Player"->GetLevel - RG_niveau ) set test to ( test * 2 ) set vie to vie+test set fatigue to fatigue+test setHealth vie setFatigue fatigue set test to ( test * 2 ) set magie to magie+test setMagicka magie set RG_niveau to ( "player"->GetLevel ) set niveau to RG_niveau setlevel niveau endif if ( "Player"->Getspeed != vitesse ) Set vitesse to ( "Player"->GetSpeed + 15 ) setspeed vitesse set vitesse to ( vitesse - 15 ) endif if ( instance < RG_Del_Fam ); si un autre exemplaire a été produit (cf dial "ralliement" ) if ( getdisabled == 0 ) disable endif endif elseif ( doonce == 1 ) set doonce to 2 setHealth vie setFatigue fatigue set test to ( test * 2 ) set magie to magie+test setMagicka magie setspeed vitesse set niveau to ( "player"->GetLevel ) setlevel niveau set vitesse to ( vitesse - 15 ) return elseif ( doOnce == 0 ) set telepathie to 0 set instance to RG_Del_Fam; stockage du N° d'exemplaire produit (cf dial "ralliement" ) Set doOnce to 1 Set vie to getHealth Set magie to getMagicka Set fatigue to getFatigue Set vitesse to ( "Player"->GetSpeed + 15 ) set test to ( "Player"->GetLevel ) set test to ( test * 2 ) set vie to vie+test set fatigue to fatigue+test AIFollow "player" 0 0 0 0 set follow to 1 return endif ;***************** (forme 1) *************************** if ( RituelDone <= 7 ); cf dial "devenir mon familier" if ( RG_niveau >= RG_nivTEST ) set RG_nivTEST to RG_nivTEST+10 set rituel to rituel+1 endif endif if ( GetHealthGetRatio < 1.0 ) set curetimer to ( curetimer + GetSecondsPassed ) if ( curetimer >= 1 ) ModCurrentHealth 0.5 set curetimer to 0 endif endif if ( OnDeath == 1 ) if ( dead == 0 ) startscript RG_mort set dead to 1 endif endif else if ( requete == 0 ); cf topic "requêtes" if ( follow > 0 ) if ( "player"->GetFlying == 0 ) setpos x posx setpos y posy setpos z posz else Set requete to 3 messagebox "Eusèbe ne vole pas. Il a sauté dans votre barda." "player"->additem "RG_Misc_Fam_chat" 1 disable endif endif endif endif else if ( GetSpellEffects "RG_lier_familier" == 1 ) set RG_niveau to ( "Player"->GetLevel ) set RG_nivTEST to RG_niveau+10 MessageBox "Vous débutez le rituel de liaison avec Eusèbe" set RituelActive to 1 set DernierJour to Day+1 ForceGreeting endif endif endif if ( requete != 0 ) if ( requete == 2 ); gestion des positioncell / disable / setDelete if ( timer <= 2 ) set timer to ( timer + GetSecondsPassed ) return endif set timer to 0 set requete to 0 elseif ( requete == 1 ); cf dialogue "requêtes" if ( timer < 2 ) set timer to ( timer + GetSecondsPassed ) return endif set timer to 0 set go to 0 set requete to 2 playsound "mysticism cast" if ( go == 1 ) PositionCell 24, 400, 46, 225, "Ald'ruhn, la Marmite du Rat" elseif ( go == 2 ) PositionCell -151, -221, 255, 0, "Sadrith Mora, Cercle de Muriel la Fripouille" elseif ( go == 3 ) PositionCell 298, -48, 90, 0, "Balmora, Cercle du Mur du Sud" elseif ( go == 4 ) PositionCell 127, -50, 250, 0, "Caldéra, la Pelle de Shenk" elseif ( go == 5 ) PositionCell -513, 21, -150, 0, "Vivec, Club Sans Nom" endif return endif endif if ( outcell < 10 ) set outcell to outcell+1 return else set outcell to 0 if ( DernierJour != day ) set jour to 1 endif if ( GetDisabled ) setDelete 1 endif endif end
(cette variante ne fait que déplacer 2 corps de tests/commandes en fin de script, cherchant à ne les effectuer qu'une fois toutes les 30 frames. Les "**********************" indiquent à partir d'où c'est modifié).
Spoiler
begin RG_2_Chat_cre ;Script Original par Lord Mortim ;Corrigé et Réutilisé par l'équipe ;Ce script est attribué au chat Eusèbe Short doOnce Short niveau short test float vie float magie float fatigue Short vitesse short dead short instance short jour float curetimer float posX float posY float posZ short RituelActive short outcell short requete short follow short go float timer ; globales : familier, RG_niveau, RG_nivTEST, RG_del_fam, rituel, ritueldone, RG_follow, DernierJour if ( CellChanged == 1 ) If ( familier == 2 ) set outcell to 25 if ( follow == 1 ) disable If ( instance == RG_Del_Fam ); si c'est bien le même exemplaire du famillier set RG_follow to 1; cf script NM_GLO_concordiamagica (place une nouvelle instance AtPc) endif endif endif else if ( menumode == 1 ) return endif If ( familier == 2 ) if ( OnActivate == 1 ) Activate endif if ( GetDistance, Player < 1024 ) set posx to ( "player"->Getpos x ) set posy to ( "player"->Getpos y ) set posz to ( "player"->Getpos z ) if ( doonce == 2 ) if ( "Player"->GetLevel > RG_niveau ) set test to ( "Player"->GetLevel - RG_niveau ) set test to ( test * 2 ) set vie to vie+test set fatigue to fatigue+test setHealth vie setFatigue fatigue set test to ( test * 2 ) set magie to magie+test setMagicka magie set RG_niveau to ( "player"->GetLevel ) set niveau to RG_niveau setlevel niveau endif if ( "Player"->Getspeed != vitesse ) Set vitesse to ( "Player"->GetSpeed + 15 ) setspeed vitesse set vitesse to ( vitesse - 15 ) endif if ( instance < RG_Del_Fam ); si un autre exemplaire a été produit (cf dial "ralliement" ) if ( getdisabled == 0 ) disable endif endif elseif ( doonce == 1 ) set doonce to 2 setHealth vie setFatigue fatigue set test to ( test * 2 ) set magie to magie+test setMagicka magie setspeed vitesse set niveau to ( "player"->GetLevel ) setlevel niveau set vitesse to ( vitesse - 15 ) return elseif ( doOnce == 0 ) set telepathie to 0 set instance to RG_Del_Fam; stockage du N° d'exemplaire produit (cf dial "ralliement" ) Set doOnce to 1 Set vie to getHealth Set magie to getMagicka Set fatigue to getFatigue Set vitesse to ( "Player"->GetSpeed + 15 ) set test to ( "Player"->GetLevel ) set test to ( test * 2 ) set vie to vie+test set fatigue to fatigue+test AIFollow "player" 0 0 0 0 set follow to 1 return endif ;************************** (forme2) ****************************************** if ( GetHealthGetRatio < 1.0 ) set curetimer to ( curetimer + GetSecondsPassed ) if ( curetimer >= 1 ) ModCurrentHealth 0.5 set curetimer to 0 endif endif else if ( requete == 0 ); cf topic "requêtes" if ( follow > 0 ) if ( "player"->GetFlying == 0 ) setpos x posx setpos y posy setpos z posz else Set requete to 3 messagebox "Eusèbe ne vole pas. Il a sauté dans votre barda." "player"->additem "RG_Misc_Fam_chat" 1 disable endif endif endif endif else if ( GetSpellEffects "RG_lier_familier" == 1 ) set RG_niveau to ( "Player"->GetLevel ) set RG_nivTEST to RG_niveau+10 MessageBox "Vous débutez le rituel de liaison avec Eusèbe" set RituelActive to 1 set DernierJour to Day+1 ForceGreeting endif endif endif if ( requete != 0 ) if ( requete == 2 ); gestion des positioncell / disable / setDelete if ( timer <= 2 ) set timer to ( timer + GetSecondsPassed ) return endif set timer to 0 set requete to 0 set outcell to 25 elseif ( requete == 1 ); cf dialogue "requêtes" if ( timer < 2 ) set timer to ( timer + GetSecondsPassed ) return endif set timer to 0 set go to 0 set requete to 2 playsound "mysticism cast" if ( go == 1 ) PositionCell 24, 400, 46, 225, "Ald'ruhn, la Marmite du Rat" elseif ( go == 2 ) PositionCell -151, -221, 255, 0, "Sadrith Mora, Cercle de Muriel la Fripouille" elseif ( go == 3 ) PositionCell 298, -48, 90, 0, "Balmora, Cercle du Mur du Sud" elseif ( go == 4 ) PositionCell 127, -50, 250, 0, "Caldéra, la Pelle de Shenk" elseif ( go == 5 ) PositionCell -513, 21, -150, 0, "Vivec, Club Sans Nom" endif return endif endif if ( outcell < 30 ) set outcell to outcell+1 return endif set outcell to 0 if ( RituelDone <= 7 ); cf dial "devenir mon familier" if ( RG_niveau >= RG_nivTEST ) set RG_nivTEST to RG_nivTEST+10 set rituel to rituel+1 endif endif if ( DernierJour != day ) set jour to 1 endif if ( GetDeadcount "RG_fam_chat" == 1 ) if ( dead == 0 ) startscript RG_mort set dead to 1 endif endif if ( GetDisabled ) setDelete 1 endif end
Quelqu'un saurait-il expliquer ça?