Bio Pets questions and topics for discussion....

Name says it all
Locked
Hanarg
Adept Scribe
Posts: 42
Joined: Sun Jan 10, 2010 5:50 pm

Bio Pets questions and topics for discussion....

Post by Hanarg »

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
Hanarg
Adept Scribe
Posts: 42
Joined: Sun Jan 10, 2010 5:50 pm

Re: Bio Pets questions and topics for discussion....

Post by Hanarg »

bump for possible answers
Hanarg
Adept Scribe
Posts: 42
Joined: Sun Jan 10, 2010 5:50 pm

Re: Bio Pets questions and topics for discussion....

Post by Hanarg »

have I stumped our panel of experts?
User avatar
BlaZe
Legendary Scribe
Posts: 402
Joined: Thu Dec 25, 2008 12:54 am
Location: Ann Arbor, MI; USA

Re: Bio Pets questions and topics for discussion....

Post by BlaZe »

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. :D

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 ) );
						}
					}
EasyUO Devotee
Download
My Popular ScripZ
Pet FightR | Doorman | TrainR: Lockpicking | HealR
Tectum
Apprentice Scribe
Posts: 17
Joined: Wed Mar 03, 2010 5:27 pm

Re: Bio Pets questions and topics for discussion....

Post by Tectum »

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?
User avatar
Licos
Elder Scribe
Posts: 124
Joined: Wed Jun 18, 2008 9:55 am

Re: Bio Pets questions and topics for discussion....

Post by Licos »

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?
A: No. The only way it goes bye-bye is when you leave it out and it goes wild.
"Lead me not to temptation, I can find it myself."
Hanarg
Adept Scribe
Posts: 42
Joined: Sun Jan 10, 2010 5:50 pm

Re: Bio Pets questions and topics for discussion....

Post by Hanarg »

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
Hanarg
Adept Scribe
Posts: 42
Joined: Sun Jan 10, 2010 5:50 pm

Re: Bio Pets questions and topics for discussion....

Post by Hanarg »

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 )
User avatar
Licos
Elder Scribe
Posts: 124
Joined: Wed Jun 18, 2008 9:55 am

Re: Bio Pets questions and topics for discussion....

Post by Licos »

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."
User avatar
BlaZe
Legendary Scribe
Posts: 402
Joined: Thu Dec 25, 2008 12:54 am
Location: Ann Arbor, MI; USA

Re: Bio Pets questions and topics for discussion....

Post by BlaZe »

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. :roll:
EasyUO Devotee
Download
My Popular ScripZ
Pet FightR | Doorman | TrainR: Lockpicking | HealR
Locked