T'as vraiment fait des trucs bizarres avec mon script....
Avec mon script originel, tu aurais du mettre les script OnEnter et OnExit sur les zones d'intérieur et de nuit éternelle, mais avec le script que t'as modifié, tu devrais les mettre sur les zones exterieur jour/nuit et c'est tout....
Mais franchement dire qu'on est à l'extérieur quand bInterieur est à TRUE, c'est pas le top....
Je te propose donc les modifs suivantes :
//Ceci est à mettre dans le OnClientEnter de ton module :
//Une fonction qui vérifie la nature de oPC et lui applique
//des effets spéciaux s'il est un vampire
void Vampire( object oPC );
void Vampire( object oPC ){
if ( GetIsPC( oPC ) && GetStringLowerCase( GetSubRace( oPC ) ) == "vampire" ){
effect eCa = ExtraordinaryEffect( EffectACIncrease(6) );
effect eForce = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_STRENGTH, 6 ) );
effect eDex = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_DEXTERITY, 4 ) );
effect eInt = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_INTELLIGENCE, 2 ) );
effect eSag = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_WISDOM, 2 ) );
effect eChar = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_CHARISMA, 4 ) );
effect eCon = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_CONSTITUTION, 4 ) );
//Attention mettre la même périodicité pour les effets que pour le
//script "ohb_vampire"
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eCa, oPC, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eForce, oPC, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eDex, oPC, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eInt, oPC, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eSag, oPC, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eChar, oPC, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eCon, oPC, 1.0f );
//On lance l'exécution du script qui grillera les vampires imprudents
//Change ici le délai entre chaque exécution du script
DelayCommand( 1.0f, ExecuteScript( "ohb_vampire" );
}
}
void main(){
//On récupère le PJ qui entre dans le module
object oPJ = GetEnteringObject();
//Si c'est un vampire, on lui applique les effets
Vampire( oPJ );
//Tu peux mettre ton code "normal" ici :-)
}
//Script "ohb_vampire"
void main(){
{
object oSelf = OBJECT_SELF;
effect eCa = ExtraordinaryEffect( EffectACIncrease(6) );
effect eForce = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_STRENGTH, 6 ) );
effect eDex = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_DEXTERITY, 4 ) );
effect eInt = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_INTELLIGENCE, 2 ) );
effect eSag = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_WISDOM, 2 ) );
effect eChar = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_CHARISMA, 4 ) );
effect eCon = ExtraordinaryEffect( EffectAbilityIncrease( ABILITY_CONSTITUTION, 4 ) );
//Attention mettre la même périodicité pour les effets que pour le
//script "ohb_vampire"
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eCa, oSelf, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eForce, oSelf, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eDex, oSelf, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eInt, oSelf, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eSag, oSelf, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eChar, oSelf, 1.0f );
ApplyEffectToObject( DURATION_TYPE_TEMPORARY, eCon, oSelf, 1.0f );
if( (GetIsDawn() || GetIsDay()) && !GetLocalInt( oSelf, "bInterieur" ) ){
ApplyEffectToObject (DURATION_TYPE_INSTANT, EffectDamage( 1, DAMAGE_TYPE_MAGICAL,DAMAGE_POWER_NORMAL), oSelf);
ApplyEffectToObject (DURATION_TYPE_INSTANT,EffectVisualEffect (VFX_FNF_SMOKE_PUFF), oSelf);
//Tu peux rajouter des effets spéciaux ou un avertissement si tu veux
}
}
//Change ici le délai entre chaque exécution du script
DelayCommand( 1.0f, ExecuteScript( "ohb_vampire" );
}
//OnEnter sur une zone d'intérieur ou de nuit éternelle :
void main(){
object oPJ = GetEnteringObject();
if( GetIsPC( oPJ ) ){
SetLocalInt( oPJ, "bInterieur", TRUE );
}
//Tu peux mettre le reste de ton code ici
}
//OnExit sur une zone d'intérieur ou de nuit éternelle :
void main(){
object oPJ = GetExitingObject();
if( GetIsPC( oPJ ) ){
DeleteLocalInt( oPJ, "bInterieur" );
}
//Tu peux mettre le reste de ton code ici
}
Remplace
tous les scripts, j'ai corrigé plusieurs petits trucs.
Ca intègre toutes tes modifications, et je t'assure que si tu fais tous bien comme c'est indiqué, ça marchera !