Bio Pets questions and topics for discussion....
Bio Pets questions and topics for discussion....
What determines the dmg for a bio pets power attack and counter attack? (magery, str, int, some unidentified quotient?)
Has something been put forward about raising a bio pets poisoning skill after it dies? If not how about using 10 organics with an ointment to create a biointment then use a reagent of some type like nightshade to bring it back up. This keeps with the high cost of bio creation/maintenence.
Also this is more of a general question has anyone found out if plat armor reduces more dmg than say leather I know it used to but that goes back to AR rating on other pets as well and I never saw an answer anywhere
Has something been put forward about raising a bio pets poisoning skill after it dies? If not how about using 10 organics with an ointment to create a biointment then use a reagent of some type like nightshade to bring it back up. This keeps with the high cost of bio creation/maintenence.
Also this is more of a general question has anyone found out if plat armor reduces more dmg than say leather I know it used to but that goes back to AR rating on other pets as well and I never saw an answer anywhere
Re: Bio Pets questions and topics for discussion....
bump for possible answers
Re: Bio Pets questions and topics for discussion....
have I stumped our panel of experts?
Re: Bio Pets questions and topics for discussion....
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.
EDIT:
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).
Power Attacks
Trial By Fire: 100% Fire damage; does 30-60, then 10-30, then 5-10 damage to one target.
Ice Blast: 100% Cold damage; does 30-60 damage to one target and creates a neat-looking snow patch.
Comet Strike: 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.
Call Of Nature: Gets all (non-agressive I think) creatures 10 tiles away to attack the bio's current target.
Acid Rain: 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.
Counter Attacks
Blunt Attack: 100% Physical damage; does 10-25 damage to the attacker.
Healing: Heals the bio for 75-150 points.
Poison Attack: 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.
EDIT:
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).
Power Attacks
Trial By Fire: 100% Fire damage; does 30-60, then 10-30, then 5-10 damage to one target.
Ice Blast: 100% Cold damage; does 30-60 damage to one target and creates a neat-looking snow patch.
Comet Strike: 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.
Call Of Nature: Gets all (non-agressive I think) creatures 10 tiles away to attack the bio's current target.
Acid Rain: 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.
Counter Attacks
Blunt Attack: 100% Physical damage; does 10-25 damage to the attacker.
Healing: Heals the bio for 75-150 points.
Poison Attack: 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 ) );
}
}
Re: Bio Pets questions and topics for discussion....
Question: Does the Bio really vanish from the stable after 1 week? What are the countermeasures for people who go away for more than 1 week?
Re: Bio Pets questions and topics for discussion....
A: No. The only way it goes bye-bye is when you leave it out and it goes wild.Question: Does the Bio really vanish from the stable after 1 week? What are the countermeasures for people who go away for more than 1 week?
"Lead me not to temptation, I can find it myself."
Re: Bio Pets questions and topics for discussion....
if you dont have enough gold in the bank (gold not checks) to cover the stable fee then they will get kicked out of the stables and after 24 hours of not being fed they will go poof
Re: Bio Pets questions and topics for discussion....
oh and thank you for looking that up for me Blaze.
oh could you also explain these lines to me since Im a C# idiot
I know they are a random number generator to determine if they will use the skill or not but thats as far as I can get
if( Utility.Random( 2500 ) < 5 )
oh could you also explain these lines to me since Im a C# idiot
I know they are a random number generator to determine if they will use the skill or not but thats as far as I can get
if( Utility.Random( 2500 ) < 5 )
Re: Bio Pets questions and topics for discussion....
OMG, that's right! I totally forgot about the weekly fee for holding them. Good job, that's a really important point to remember.
"Lead me not to temptation, I can find it myself."
Re: Bio Pets questions and topics for discussion....
if( Utility.Random( 2500 ) < 5 ) means "picking a number between 1 and 2500, if said number is less than 5, then.."
I'm not sure if this check is done on each attack or a timer, but either way its a 5 in 2500 (1 in 500) chance to activate, or 0.2%. Its likely that this was changed by +Colibri and Friends though, so don't assume this is all correct.
I'm not sure if this check is done on each attack or a timer, but either way its a 5 in 2500 (1 in 500) chance to activate, or 0.2%. Its likely that this was changed by +Colibri and Friends though, so don't assume this is all correct.
