////////////////////////////////////////////////////////////////////////////// // // File : equip_enchantment.skrit // Author(s): Witness (Lisa Hui) // Purpose : monitors character macro-able skills and updates equipped // enchantment bonuses when the bonuses are supposed to change // // There are a limited number of skills macros, so this script should // execute faster if all possibilities are represented with booleans // rather than strings that must be parsed repeatedly. // //---------------------------------------------------------------------------- // Version: 1.0 Date: August 26, 2003 //---------------------------------------------------------------------------- ////////////////////////////////////////////////////////////////////////////// property int enchantments$ = 0 doc = "number of enchantments to toggle"; property bool check_strength$ = false doc = "do any of the enchantments scale based on strength?"; property bool check_dexterity$ = false doc = "do any of the enchantments scale based on dexterity?"; property bool check_intelligence$ = false doc = "do any of the enchantments scale based on intelligence?"; property bool check_uber$ = false doc = "do any of the enchantments scale based on uber level?"; property bool check_melee$ = false doc = "do any of the enchantments scale based on melee?"; property bool check_ranged$ = false doc = "do any of the enchantments scale based on ranged?"; property bool check_combat_magic$ = false doc = "do any of the enchantments scale based on combat magic?"; property bool check_nature_magic$ = false doc = "do any of the enchantments scale based on nature magic?"; property float check_interval$ = 1.5 doc = ""; owner = GoSkritComponent; ////////////////////////////////////////////////////////////////////////////// // GLOBALS ////////////////////////////////////////////////////////////////////////////// Goid user$; bool check_stats$, check_skills$; void ToggleEnchantments$() { int index$ = enchantments$; string state_name$ = owner.Go.Magic.StateName; while ( index$ > 0 ) { owner.Go.Magic.SApplyEnchantmentsByName( user$, user$, MakeStringF( "%s_%d", state_name$, index$ ) ); index$ -= 1; } } ////////////////////////////////////////////////////////////////////////////// // STATES ////////////////////////////////////////////////////////////////////////////// startup State Init$ { event OnEnterState$ { if ( enchantments$ <= 0 ) { SetState Done$; return; } check_stats$ = (check_strength$ || check_dexterity$ || check_intelligence$ || check_uber$); check_skills$ = (check_melee$ || check_ranged$ || check_combat_magic$ || check_nature_magic$); SetState Unequipped$; } } State Unequipped$ { event OnGoHandleMessage$( eWorldEvent e$, WorldMessage msg$ ) { if( e$ == WE_EQUIPPED ) { user$ = msg$.GetSendFrom(); SetState Equipped$; } } } State Equipped$ { int level_strength$, level_dexterity$, level_intelligence$, level_uber$, level_melee$, level_ranged$, level_combat_magic$, level_nature_magic$; event OnEnterState$ { if ( !user$.IsValid ) { SetState Unequipped$; } //store the current values if ( check_stats$ ) { if ( check_strength$ ) { level_strength$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "strength" ) ) ); } if ( check_dexterity$ ) { level_dexterity$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "dexterity" ) ) ); } if ( check_intelligence$ ) { level_intelligence$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "intelligence" ) ) ); } if ( check_uber$ ) { level_uber$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "uber" ) ) ); } } if ( check_skills$ ) { if ( check_melee$ ) { level_melee$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "melee" ) ) ); } if ( check_ranged$ ) { level_ranged$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "ranged" ) ) ); } if ( check_combat_magic$ ) { level_combat_magic$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "combat magic" ) ) ); } if ( check_nature_magic$ ) { level_nature_magic$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "nature magic" ) ) ); } } //set the delay interval this.CreateTimer( 1, check_interval$ ); this.SetTimerRepeatCount( 1, -1 ); } trigger OnTimer$( 1 ) { //check for change in values bool toggle$ = false; int level$; if ( check_stats$ ) { if ( check_strength$ ) { level$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "strength" ) ) ); if ( level$ != level_strength$ ) { toggle$ = true; level_strength$ = level$; } } if ( check_dexterity$ ) { level$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "dexterity" ) ) ); if ( level$ != level_dexterity$ ) { toggle$ = true; level_dexterity$ = level$; } } if ( check_intelligence$ ) { level$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "intelligence" ) ) ); if ( level$ != level_intelligence$ ) { toggle$ = true; level_intelligence$ = level$; } } if ( check_uber$ ) { level$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "uber" ) ) ); if ( level$ != level_uber$ ) { toggle$ = true; level_uber$ = level$; } } } if ( check_skills$ ) { if ( check_melee$ ) { level$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "melee" ) ) ); if ( level$ != level_melee$ ) { toggle$ = true; level_melee$ = level$; } } if ( check_ranged$ ) { level$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "ranged" ) ) ); if ( level$ != level_ranged$ ) { toggle$ = true; level_ranged$ = level$; } } if ( check_combat_magic$ ) { level$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "combat magic" ) ) ); if ( level$ != level_combat_magic$ ) { toggle$ = true; level_combat_magic$ = level$; } } if ( check_nature_magic$ ) { level$ = Math.ToInt( Math.Floor( user$.Go.Actor.GetSkillLevel( "nature magic" ) ) ); if ( level$ != level_nature_magic$ ) { toggle$ = true; level_nature_magic$ = level$; } } } //toggle off if ( toggle$ ) { ToggleEnchantments$; this.CreateTimer( 2, 0.1 ); } } trigger OnTimer$( 2 ) { //toogle on ToggleEnchantments$; } transition -> Unequipped$ : OnGoHandleMessage( WE_UNEQUIPPED ); } State Done$ {}