158 lines
3.6 KiB
C#
158 lines
3.6 KiB
C#
|
|
//////////////////////
|
|
//Created by KyleMan//
|
|
//////////////////////
|
|
using System;
|
|
using System.Collections;
|
|
using Server.Items;
|
|
using Server.ContextMenus;
|
|
using Server.Misc;
|
|
using Server.Network;
|
|
|
|
namespace Server.Mobiles
|
|
{
|
|
public class Goku : BaseCreature
|
|
{
|
|
public override bool ClickTitle{ get{ return false; } }
|
|
private bool m_TrueForm;
|
|
|
|
[Constructable]
|
|
public Goku() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
|
|
{
|
|
SpeechHue = Utility.RandomDyedHue();
|
|
Title = "the legendary hero";
|
|
Hue = 33770;
|
|
|
|
{
|
|
Body = 0x190;
|
|
Name = "Goku";
|
|
}
|
|
|
|
SetStr( 250, 255 );
|
|
SetDex( 100, 125 );
|
|
SetInt( 61, 75 );
|
|
|
|
SetDamage( 15, 23 );
|
|
|
|
SetHits( 2500, 3500 );
|
|
|
|
SetSkill( SkillName.Fencing, 88.8, 97.5 );
|
|
SetSkill( SkillName.Macing, 99.9, 110.0 );
|
|
SetSkill( SkillName.MagicResist, 25.0, 47.5 );
|
|
SetSkill( SkillName.Swords, 65.0, 87.5 );
|
|
SetSkill( SkillName.Tactics, 99.9, 110.0 );
|
|
SetSkill( SkillName.Wrestling, 15.0, 37.5 );
|
|
|
|
Fame = 10000;
|
|
Karma = -10000;
|
|
|
|
PackItem( new GokusDeath() );
|
|
|
|
AddItem( new GokusPants() );
|
|
AddItem( new GokusOutterShirt() );
|
|
AddItem( new GokusUnderShirt() );
|
|
AddItem( new GokusBoots() );
|
|
AddItem( new PowerPole() ); //Change to AddItem( new PowerPoleUnblessed() ); for the axe to be in loot.
|
|
|
|
AddItem( new ShortHair( 1 ) );
|
|
}
|
|
private double[] m_Offsets = new double[]
|
|
{
|
|
Math.Cos( 000.0 / 180.0 * Math.PI ), Math.Sin( 000.0 / 180.0 * Math.PI ),
|
|
Math.Cos( 040.0 / 180.0 * Math.PI ), Math.Sin( 040.0 / 180.0 * Math.PI ),
|
|
Math.Cos( 080.0 / 180.0 * Math.PI ), Math.Sin( 080.0 / 180.0 * Math.PI ),
|
|
Math.Cos( 120.0 / 180.0 * Math.PI ), Math.Sin( 120.0 / 180.0 * Math.PI ),
|
|
Math.Cos( 160.0 / 180.0 * Math.PI ), Math.Sin( 160.0 / 180.0 * Math.PI ),
|
|
Math.Cos( 200.0 / 180.0 * Math.PI ), Math.Sin( 200.0 / 180.0 * Math.PI ),
|
|
Math.Cos( 240.0 / 180.0 * Math.PI ), Math.Sin( 240.0 / 180.0 * Math.PI ),
|
|
Math.Cos( 280.0 / 180.0 * Math.PI ), Math.Sin( 280.0 / 180.0 * Math.PI ),
|
|
Math.Cos( 320.0 / 180.0 * Math.PI ), Math.Sin( 320.0 / 180.0 * Math.PI ),
|
|
};
|
|
|
|
|
|
public void Morph()
|
|
{
|
|
if ( m_TrueForm )
|
|
return;
|
|
|
|
m_TrueForm = true;
|
|
|
|
Name = "Super Saiyan Goku";
|
|
BodyValue = 0x190;
|
|
Hue = 33770;
|
|
AddItem( new ShortHair( 1174 ) );
|
|
|
|
Hits = HitsMax;
|
|
Stam = StamMax;
|
|
Mana = ManaMax;
|
|
|
|
ProcessDelta();
|
|
|
|
Say( 1049499 ); // Behold my true form!
|
|
|
|
Map map = this.Map;
|
|
|
|
if ( map != null )
|
|
{
|
|
for ( int i = 0; i < m_Offsets.Length; i += 2 )
|
|
{
|
|
double rx = m_Offsets[i];
|
|
double ry = m_Offsets[i + 1];
|
|
|
|
int dist = 0;
|
|
bool ok = false;
|
|
int x = 0, y = 0, z = 0;
|
|
|
|
while ( !ok && dist < 10 )
|
|
{
|
|
int rdist = 10 + dist;
|
|
|
|
x = this.X + (int)(rx * rdist);
|
|
y = this.Y + (int)(ry * rdist);
|
|
z = map.GetAverageZ( x, y );
|
|
|
|
if ( !(ok = map.CanFit( x, y, this.Z, 16, false, false ) ) )
|
|
ok = map.CanFit( x, y, z, 16, false, false );
|
|
|
|
if ( dist >= 0 )
|
|
dist = -(dist + 1);
|
|
else
|
|
dist = -(dist - 1);
|
|
if ( !ok )
|
|
continue;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void GenerateLoot()
|
|
{
|
|
AddLoot( LootPack.SuperBoss );
|
|
}
|
|
|
|
public override bool AlwaysMurderer{ get{ return true; } }
|
|
|
|
public Goku( Serial serial ) : base( serial )
|
|
{
|
|
}
|
|
|
|
public override void Serialize( GenericWriter writer )
|
|
{
|
|
base.Serialize( writer );
|
|
|
|
writer.Write( (int) 0 ); // version
|
|
|
|
writer.Write( m_TrueForm );
|
|
}
|
|
|
|
public override void Deserialize( GenericReader reader )
|
|
{
|
|
base.Deserialize( reader );
|
|
|
|
int version = reader.ReadInt();
|
|
|
|
m_TrueForm = reader.ReadBool();
|
|
}
|
|
}
|
|
} |