Guess noone seems to know - I'll dig around for the script (and hope that its the same one we use) and get an answer for ya.
Alright well it doesn't look like any of the bio's stats or skills affect the damage of its special/counter moves, with the exception of Poisoning and Acid Rain/Poison Attack (more Poisoning = higher Poison level inflicted).
: 100% Cold damage; does 30-60 damage to one target and creates a neat-looking snow patch.
: 100% Fire damage vs. Players/Pets, 25%/50%/0/25%/0 damage vs. Everything Else; does 30-60 damage on all targets (I think) up to 15 tiles away.
: Gets all (non-agressive I think) creatures 10 tiles away to attack the bio's current target.
: 100% Poison damage; does 5-25 damage to all targets up to 7 tiles away. Inflicts level 1-5 Poison on the targets, dependant on the bio's Poisoning skill.
: 100% Poison damage; does 10-25 damage to the attacker, as well as inflicting level 1-5 Poison, depentant on the bio's Poisoning skill.
Here's the code, for those who know more C# than me and feel like correcting anything I messed up on. I'll add this to the Wiki when I get some spare time, if another Scribe doesn't do it by then.
Code: Select all
if ( m_TrialByFire == true )
{
if( Utility.Random( 2500 ) < 5 )
{
if ( this.Stam <= 50 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its power attack." );
}
else
{
this.Stam -= 50;
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 6, from.Y - 6, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 4, from.Y - 6, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 6, from.Y - 4, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 7, from.Y, from.Z ), from.Map ), from, 0x36E4, 7, 0, false, true, 0, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X + 7, from.Y, from.Z ), from.Map ), from, 0x36E4, 7, 0, false, true, 0, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X, from.Y - 7, from.Z ), from.Map ), from, 0x36E4, 7, 0, false, true, 0, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X, from.Y + 7, from.Z ), from.Map ), from, 0x36E4, 7, 0, false, true, 0, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
from.FixedParticles( 0x3709, 10, 15, 5012, EffectLayer.Waist );
from.FixedParticles( 0x36B0, 10, 15, 5012, EffectLayer.Waist );
PlaySound( 776 );
PlaySound( 477 );
AOS.Damage( from, this, Utility.RandomMinMax( 30, 60 ), 0, 100, 0, 0, 0 );
AOS.Damage( from, this, Utility.RandomMinMax( 10, 30 ), 0, 100, 0, 0, 0 );
AOS.Damage( from, this, Utility.RandomMinMax( 5, 10 ), 0, 100, 0, 0, 0 );
this.Emote( "[Power Attack]" );
this.Emote( "[Trail By Fire]" );
}
}
}
if ( m_IceBlast == true )
{
Mobile cm = this.ControlMaster;
if( Utility.Random( 2500 ) < 5 )
{
if ( this.Stam <= 50 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its power attack." );
}
else
{
this.Stam -= 50;
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 6, from.Y - 6, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 1152, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 4, from.Y - 6, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 1152, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 6, from.Y - 4, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 1152, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
AOS.Damage( from, this, Utility.RandomMinMax( 20, 30 ), 0, 0, 100, 0, 0 );
IceFragments ice = new IceFragments();
ice.Location = from.Location;
ice.Map = from.Map;
ice.PetOwner = cm;
ice.Pet = this;
World.AddItem( ice );
IceSnow ices = new IceSnow();
ices.X = from.X + Utility.RandomMinMax( 3, 5 );
ices.Y = from.Y + Utility.RandomMinMax( 3, 5 );
ices.Z = from.Z;
ices.Map = from.Map;
World.AddItem( ices );
IceSnow2 is2 = new IceSnow2();
is2.X = from.X - Utility.RandomMinMax( 3, 5 );
is2.Y = from.Y - Utility.RandomMinMax( 3, 5 );
is2.Z = from.Z;
is2.Map = from.Map;
World.AddItem( is2 );
IceSnow3 is3 = new IceSnow3();
is3.X = from.X - Utility.RandomMinMax( 3, 5 );
is3.Y = from.Y + Utility.RandomMinMax( 3, 5 );
is3.Z = from.Z;
is3.Map = from.Map;
World.AddItem( is3 );
IceSnow is4 = new IceSnow();
is4.X = from.X + Utility.RandomMinMax( 3, 5 );
is4.Y = from.Y - Utility.RandomMinMax( 3, 5 );
is4.Z = from.Z;
is4.Map = from.Map;
World.AddItem( is4 );
PlaySound( 22 );
this.Emote( "[Power Attack]" );
this.Emote( "[Ice Blast]" );
}
}
}
else if ( m_CometAttack == true )
{
if( Utility.Random( 2500 ) < 5 )
{
if ( this.Stam <= 50 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its power attack." );
}
else
{
this.Stam -= 50;
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X, from.Y, from.Z + 35 ), from.Map ), from, 0x11B6, 7, 0, false, true, 1160, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
from.FixedParticles( 0x3709, 10, 15, 5012, EffectLayer.Waist );
from.FixedParticles( 0x36B0, 10, 15, 5012, EffectLayer.Waist );
PlaySound( 551 );
ArrayList targets = new ArrayList();
foreach ( Mobile m in this.GetMobilesInRange( 15 ) )
{
if ( this != m && this.ControlMaster != m )
targets.Add( m );
}
for ( int i = 0; i < targets.Count; ++i )
{
Mobile m = (Mobile)targets[i];
if ( m != null )
{
if ( m is BaseVendor || m is PlayerVendor || m.Blessed != false )
{
m.Say( "What was that?" );
}
else
{
if ( m is PlayerMobile )
{
PlayerMobile pm = (PlayerMobile)m;
if ( pm.Combatant == this || pm.Combatant == this.ControlMaster || this.Combatant == pm || this.ControlMaster.Combatant == pm )
{
AOS.Damage( m, this, Utility.RandomMinMax( 30, 60 ), 0, 100, 0, 0, 0 );
m.SendMessage( "You have been hit by a shock wave." );
this.ControlMaster.DoHarmful( m );
}
}
else if ( m is BaseCreature )
{
BaseCreature bc = (BaseCreature)m;
if ( bc.Controlled == false && bc.ControlMaster == null )
{
AOS.Damage( m, this, Utility.RandomMinMax( 30, 60 ), 25, 50, 0, 25, 0 );
this.ControlMaster.DoHarmful( m );
}
else if ( bc.Combatant == this || bc.Combatant == this.ControlMaster || this.Combatant == bc || this.ControlMaster.Combatant == bc )
{
AOS.Damage( m, this, Utility.RandomMinMax( 30, 60 ), 0, 100, 0, 0, 0 );
bc.ControlMaster.SendMessage( "Your pet has been hit by a shock wave." );
this.ControlMaster.DoHarmful( m );
}
}
}
}
}
}
this.Emote( "[Power Attack]" );
this.Emote( "[Comet Strike]" );
}
}
else if ( m_CallOfNature == true )
{
if( Utility.Random( 2500 ) < 5 )
{
if ( this.Stam <= 50 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its power attack." );
}
else
{
this.Stam -= 50;
PlaySound( 4 );
ArrayList targets = new ArrayList();
foreach ( Mobile m in this.GetMobilesInRange( 10 ) )
{
if ( m != this )
targets.Add( m );
}
for ( int i = 0; i < targets.Count; ++i )
{
Mobile m = (Mobile)targets[i];
if ( m != null )
{
if ( m is BaseVendor || m is PlayerVendor || m.Blessed != false )
{
m.Say( "Someone is calling for help!" );
}
else if ( m is BaseCreature )
{
BaseCreature bc = (BaseCreature)m;
if ( bc.Controlled != true )
{
bc.Combatant = from;
}
}
else
{
m.SendMessage( "You hear a creature give out a cry for help!" );
}
}
}
}
this.Emote( "[Power Attack]" );
this.Emote( "[Call Of Nature]" );
}
}
else if ( m_AcidRain == true )
{
if( Utility.Random( 2500 ) < 5 )
{
if ( this.Stam <= 50 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its power attack." );
}
else
{
this.Stam -= 50;
ArrayList targets = new ArrayList();
foreach ( Mobile m in this.GetMobilesInRange( 7 ) )
{
if ( this != m && this.ControlMaster != m )
targets.Add( m );
}
for ( int i = 0; i < targets.Count; ++i )
{
Mobile m = (Mobile)targets[i];
if ( m != null )
{
if ( m is BaseVendor || m is PlayerVendor || m.Blessed != false )
{
m.Say( "*resists the poison*" );
}
else
{
if ( m is PlayerMobile )
{
PlayerMobile pm = (PlayerMobile)m;
if ( pm.Combatant == this || pm.Combatant == this.ControlMaster || this.Combatant == pm || this.ControlMaster.Combatant == pm )
{
AOS.Damage( m, this, Utility.RandomMinMax( 5, 25 ), 0, 0, 0, 100, 0 );
m.SendMessage( "You have been hit by toxic rain." );
int level;
double total = this.Skills[SkillName.Poisoning].Value;
if ( total >= 99.9 )
level = 4;
else if ( total > 75.0 )
level = 3;
else if ( total > 50.0)
level = 2;
else if ( total > 35.0)
level = 1;
else
level = 0;
m.ApplyPoison( this, Poison.GetPoison( level ) );
this.ControlMaster.DoHarmful( m );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( m.X, m.Y, m.Z + 35 ), m.Map ), m, 0x35D4, 7, 0, false, true, 63, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
m.PlaySound( 551 );
}
}
else if ( m is BaseCreature )
{
BaseCreature bc = (BaseCreature)m;
if ( bc.Controlled == false && bc.ControlMaster == null )
{
AOS.Damage( bc, this, Utility.RandomMinMax( 5, 25 ), 0, 0, 0, 0, 100 );
int level;
double total = this.Skills[SkillName.Poisoning].Value;
if ( total >= 99.9 )
level = 4;
else if ( total > 75.0 )
level = 3;
else if ( total > 50.0)
level = 2;
else if ( total > 35.0)
level = 1;
else
level = 0;
bc.ApplyPoison( this, Poison.GetPoison( level ) );
this.ControlMaster.DoHarmful( m );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( m.X, m.Y, m.Z + 35 ), m.Map ), m, 0x35D4, 7, 0, false, true, 63, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
}
else if ( bc.Combatant == this || bc.Combatant == this.ControlMaster || this.Combatant == bc || this.ControlMaster.Combatant == bc )
{
AOS.Damage( bc, this, Utility.RandomMinMax( 5, 25 ), 0, 0, 0, 0, 100 );
bc.ControlMaster.SendMessage( "Your pet has been hit by toxic rain." );
int level;
double total = this.Skills[SkillName.Poisoning].Value;
if ( total >= 99.9 )
level = 4;
else if ( total > 75.0 )
level = 3;
else if ( total > 50.0)
level = 2;
else if ( total > 35.0)
level = 1;
else
level = 0;
bc.ApplyPoison( this, Poison.GetPoison( level ) );
this.ControlMaster.DoHarmful( m );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( m.X, m.Y, m.Z + 35 ), m.Map ), m, 0x35D4, 7, 0, false, true, 63, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
}
}
}
}
}
this.Emote( "[Power Attack]" );
this.Emote( "[Acid Rain]" );
}
}
}
}
}
public override void OnDamagedBySpell( Mobile caster )
{
if ( caster != this && this.ControlMaster != null )
{
int damagemin = this.Hits / 20;
int damagemax = this.Hits / 25;
if ( m_BluntAttack == true )
{
if( Utility.Random( 100 ) < 15 )
{
if ( this.Stam <= 10 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its counter attack." );
}
else
{
this.Stam -= 10;
this.Emote( "[Counter] [Blunt Attack]" );
AOS.Damage( caster, this, Utility.RandomMinMax( 10, 25 ), 100, 0, 0, 0, 0 );
caster.FixedParticles( 0x373A, 10, 15, 5012, EffectLayer.Waist );
PlaySound( 562 );
}
}
}
if ( m_Healing == true )
{
if( Utility.Random( 100 ) < 15 )
{
if ( this.Stam <= 25 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its counter attack." );
}
else
{
this.Stam -= 25;
this.Emote( "[Counter] [Healing]" );
this.FixedParticles( 0x373A, 10, 15, 5012, EffectLayer.Waist );
PlaySound( 498 );
this.Hits += Utility.RandomMinMax( 75, 150 );
}
}
}
if ( m_PoisonAttack == true )
{
if( Utility.Random( 100 ) < 15 )
{
if ( this.Stam <= 10 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its counter attack." );
}
else
{
this.Stam -= 10;
this.Emote( "[Counter] [Poison Attack]" );
this.FixedParticles( 4518, 10, 15, 5012, EffectLayer.Waist );
AOS.Damage( caster, this, Utility.RandomMinMax( 10, 25 ), 0, 0, 0, 100, 0 );
PlaySound( 560 );
int level;
double total = this.Skills[SkillName.Poisoning].Value;
if ( total >= 99.9 )
level = 4;
else if ( total > 75.0 )
level = 3;
else if ( total > 50.0)
level = 2;
else if ( total > 35.0)
level = 1;
else
level = 0;
caster.ApplyPoison( this, Poison.GetPoison( level ) );
}
}
}
}
base.OnDamagedBySpell( caster );
}
public override void OnGotMeleeAttack( Mobile attacker )
{
base.OnGotMeleeAttack( attacker );
if ( this.ControlMaster != null )
{
int damagemin = this.Hits / 20;
int damagemax = this.Hits / 25;
if ( m_BluntAttack == true )
{
if( Utility.Random( 100 ) < 15 )
{
if ( this.Stam <= 10 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its counter attack." );
}
else
{
this.Stam -= 10;
this.Emote( "[Counter] [Blunt Attack]" );
AOS.Damage( attacker, this, Utility.RandomMinMax( 10, 25 ), 100, 0, 0, 0, 0 );
attacker.FixedParticles( 0x373A, 10, 15, 5012, EffectLayer.Waist );
PlaySound( 562 );
}
}
}
if ( m_Healing == true )
{
if( Utility.Random( 100 ) < 15 )
{
if ( this.Stam <= 25 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its counter attack." );
}
else
{
this.Stam -= 25;
this.Emote( "[Counter] [Healing]" );
this.FixedParticles( 0x373A, 10, 15, 5012, EffectLayer.Waist );
PlaySound( 498 );
this.Hits += Utility.RandomMinMax( 75, 150 );
}
}
}
if ( m_PoisonAttack == true )
{
if( Utility.Random( 100 ) < 15 )
{
if ( this.Stam <= 10 )
{
if ( this.ControlMaster != null )
this.ControlMaster.SendMessage( "You pet lacks the stamina to preform its counter attack." );
}
else
{
this.Stam -= 10;
this.Emote( "[Counter] [Poison Attack]" );
this.FixedParticles( 4518, 10, 15, 5012, EffectLayer.Waist );
AOS.Damage( attacker, this, Utility.RandomMinMax( 10, 25 ), 0, 0, 0, 100, 0 );
PlaySound( 560 );
int level;
double total = this.Skills[SkillName.Poisoning].Value;
if ( total >= 99.9 )
level = 4;
else if ( total > 75.0 )
level = 3;
else if ( total > 50.0)
level = 2;
else if ( total > 35.0)
level = 1;
else
level = 0;
attacker.ApplyPoison( this, Poison.GetPoison( level ) );
}
}