Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,86 @@
using System;
using Server.Items;
using Server.Mobiles;
namespace Server.Mobiles
{
[CorpseName( "a gigantic snake corpse" )]
public class GiganticSnake : BaseCreature
{
[Constructable]
public GiganticSnake() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "A Huge Snake";
Body = 0x15;
Hue = 33;
BaseSoundID = 219;
SetStr( 2500, 4500 );
SetDex( 500, 800 );
SetInt( 66, 85 );
SetHits( 5000, 7000 );
SetMana( 0 );
SetDamage( 30, 40 );
SetDamageType( ResistanceType.Physical, 40 );
SetDamageType( ResistanceType.Poison, 60 );
SetResistance( ResistanceType.Physical, 100, 150 );
SetResistance( ResistanceType.Fire, 5, 10 );
SetResistance( ResistanceType.Cold, 10, 20 );
SetResistance( ResistanceType.Poison, 70, 90 );
SetResistance( ResistanceType.Energy, 10, 20 );
SetSkill( SkillName.Poisoning, 70.1, 100.0 );
SetSkill( SkillName.MagicResist, 25.1, 40.0 );
SetSkill( SkillName.Tactics, 65.1, 70.0 );
SetSkill( SkillName.Wrestling, 60.1, 80.0 );
Fame = 2500;
Karma = -2500;
VirtualArmor = 52;
PackItem( new Gold( 6000 ) );
PackItem( new Bone( 100 ) );
// TODO: Body parts
}
public override void GenerateLoot()
{
AddLoot( LootPack.Average );
}
public override Poison PoisonImmune{ get{ return Poison.Greater; } }
public override Poison HitPoison{ get{ return (0.8 >= Utility.RandomDouble() ? Poison.Greater : Poison.Deadly); } }
public override bool DeathAdderCharmable{ get{ return true; } }
public override int Meat{ get{ return 4; } }
public override int Hides{ get{ return 15; } }
//public override HideType HideType{ get{ return HideType.Dragon; } }
public GiganticSnake(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int) 0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if ( BaseSoundID == -1 )
BaseSoundID = 219;
}
}
}

View File

@@ -0,0 +1,146 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
using Server.ContextMenus;
using Server.Gumps;
using Server.Misc;
using Server.Network;
using Server.Spells;
using System.Collections.Generic;
namespace Server.Mobiles
{
[CorpseName( "Hokage Tsunade's Corpse" )]
public class Tsunade : Mobile
{
public virtual bool IsInvulnerable{ get{ return true; } }
[Constructable]
public Tsunade()
{
Name = "Hokage Tsunade";
Body = 401;
CantWalk = true;
Hue = 1751;
Item Boots = new Boots();
Boots.Hue = 1000;
Boots.Name = "Non-Leather Boots";
Boots.Movable = false;
AddItem( Boots );
Item FancyShirt = new FancyShirt();
FancyShirt.Hue = 1000;
FancyShirt.Name = "Shirt";
FancyShirt.Movable = false;
AddItem( FancyShirt );
Item LongPants = new LongPants();
LongPants.Hue = 1000;
LongPants.Name = "Pants";
LongPants.Movable = false;
AddItem( LongPants );
Item Cloak = new Cloak();
Cloak.Hue = 1000;
Cloak.Name = "Cloak";
Cloak.Movable = false;
AddItem( Cloak );
AddItem( new LongHair( 254 ) );
Blessed = true;
}
public Tsunade( Serial serial ) : base( serial )
{
}
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
{
base.GetContextMenuEntries( from, list );
list.Add( new TsunadeEntry( from, this ) );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
public class TsunadeEntry : ContextMenuEntry
{
private Mobile m_Mobile;
private Mobile m_Giver;
public TsunadeEntry( Mobile from, Mobile giver ) : base( 6146, 3 )
{
m_Mobile = from;
m_Giver = giver;
}
public override void OnClick()
{
if( !( m_Mobile is PlayerMobile ) )
return;
PlayerMobile mobile = (PlayerMobile) m_Mobile;
{
if ( ! mobile.HasGump( typeof( TsunadequestGump ) ) )
{
mobile.SendGump( new TsunadequestGump( mobile ));
mobile.AddToBackpack( new TsunadeBook() );
}
}
}
}
public override bool OnDragDrop( Mobile from, Item dropped )
{
Mobile m = from;
PlayerMobile mobile = m as PlayerMobile;
if ( mobile != null)
{
if( dropped is OrochimarusHeart)
{
if(dropped.Amount!=1)
{
this.PrivateOverheadMessage( MessageType.Regular, 1153, false, "That is not the amount I asked for.", mobile.NetState );
return false;
}
dropped.Delete();
mobile.AddToBackpack( new NecklaceOfGenesis() );
return true;
}
else if ( dropped is OrochimarusHeart)
{
this.PrivateOverheadMessage( MessageType.Regular, 1153, 1054071, mobile.NetState );
return false;
}
else
{
this.PrivateOverheadMessage( MessageType.Regular, 1153, false, "I did not ask for this item.", mobile.NetState );
}
}
return false;
}
}
}

View File

@@ -0,0 +1,66 @@
using System;
using Server;
namespace Server.Items
{
public class NecklaceOfGenesis : BaseNecklace
{
public override int ArtifactRarity{ get{ return 100; } }
[Constructable]
public NecklaceOfGenesis() : base( 0x1085 )
{
Weight = 1.0;
Name = "Necklace Of Genesis";
Hue = 2561;
Attributes.AttackChance = 10;
Attributes.BonusHits = 10;
Attributes.DefendChance = 5;
Attributes.ReflectPhysical = 10;
Attributes.SpellDamage = 5;
Attributes.RegenHits = 2;
}
public override void OnAdded( object parent )
{
base.OnAdded( parent );
if( parent is Mobile )
{
Mobile from = (Mobile)parent;
from.Skills.Swords.Base += 10;
}
}
public override void OnRemoved( object parent )
{
base.OnRemoved( parent );
if( parent is Mobile )
{
Mobile from = (Mobile)parent;
from.Skills.Swords.Base -= 10;
}
}
public NecklaceOfGenesis( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,163 @@
using System;
using Server.Items;
namespace Server.Mobiles
{
public class Orochimaru : BaseCreature
{
public override bool ClickTitle{ get{ return false; } }
private bool m_TrueForm;
[Constructable]
public Orochimaru() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Hue = 1000;
{
Body = 400;
Name = "Orochimaru";
}
SetStr( 500, 1500 );
SetDex( 300, 300 );
SetInt( 300, 300 );
SetDamage( 105, 233 );
SetHits( 10000, 12000 );
SetSkill( SkillName.Fencing, 88.8, 97.5 );
SetSkill( SkillName.Macing, 99.9, 110.0 );
SetSkill( SkillName.MagicResist, 25.0, 47.5 );
SetSkill( SkillName.Swords, 200.0, 250.5 );
SetSkill( SkillName.Tactics, 99.9, 110.0 );
SetSkill( SkillName.Wrestling, 15.0, 37.5 );
Fame = 0;
Karma = 0;
AddItem( new OrochimaruShirt() );
AddItem( new OrochimaruPants() );
AddItem( new OrochimaruBoots() );
AddItem( new OrochimaruUnderShirt() );
AddItem( new Katana() );
AddItem( new LongHair( 1 ) );
PackItem( new Gold( 6000 ) );
//PackItem( new Gold( 60000 ) );
//PackItem( new Gold( 60000 ) );
//PackItem( new Gold( 60000 ) );
//PackItem( new Gold( 60000 ) );
//PackItem( new Gold( 60000 ) );
//PackItem( new Gold( 60000 ) );
PackItem( new OrochimarusHeart() );
}
public override bool CanRummageCorpses{ get{ return true; } }
public override bool BardImmune{ get{ return true; } }
public override bool Unprovokable{ get{ return true; } }
public override bool Uncalmable{ get{ return true; } }
public override Poison PoisonImmune{ get{ return Poison.Lethal; } }
public override bool AlwaysMurderer{ get{ return true; } }
public void spawnsnakes( Mobile target )
{
Map map = this.Map;
if ( map == null )
return;
int snakes = 0;
foreach ( Mobile m in this.GetMobilesInRange( 10 ) )
{
if ( m is GiganticSnake || m is GiantSerpent || m is Snake )
++snakes;
}
if ( snakes < 4 )
{
int newsnakes = 1;
for ( int i = 0; i < newsnakes; ++i )
{
BaseCreature Snake;
switch ( Utility.Random( 6 ) )
{
default:
case 0: case 1: Snake = new GiganticSnake(); break;
case 2: case 3: Snake = new GiantSerpent(); break;
case 4: case 5: Snake = new Snake(); break;
}
Snake.Team = this.Team;
bool validLocation = false;
Point3D loc = this.Location;
for ( int j = 0; !validLocation && j < 10; ++j )
{
int x = X + Utility.Random( 3 ) - 1;
int y = Y + Utility.Random( 3 ) - 1;
int z = map.GetAverageZ( x, y );
if ( validLocation = map.CanFit( x, y, this.Z, 16, false, false ) )
loc = new Point3D( x, y, Z );
else if ( validLocation = map.CanFit( x, y, z, 16, false, false ) )
loc = new Point3D( x, y, z );
}
Snake.MoveToWorld( loc, map );
Snake.Combatant = target;
}
}
}
public void DoSpecialAbility( Mobile target )
{
if ( 0.75 >= Utility.RandomDouble() ) // 25% chance to more daemons
spawnsnakes( target );
}
public override void OnGotMeleeAttack( Mobile attacker )
{
base.OnGotMeleeAttack( attacker );
DoSpecialAbility( attacker );
}
public override void OnGaveMeleeAttack( Mobile defender )
{
base.OnGaveMeleeAttack( defender );
DoSpecialAbility( defender );
}
public Orochimaru( 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();
}
}
}

View File

@@ -0,0 +1,40 @@
using System;
namespace Server.Items
{
public class OrochimaruBoots : BaseShoes
{
[Constructable]
public OrochimaruBoots() : this( 0 )
{
}
[Constructable]
public OrochimaruBoots( int hue ) : base( 0x2307, hue )
{
Weight = 3.0;
Name = "Orochimaru boots";
Hue = 1;
LootType = LootType.Blessed;
}
public OrochimaruBoots( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,40 @@
using System;
using Server.Items;
namespace Server.Items
{
public class OrochimaruPants : BasePants
{
[Constructable]
public OrochimaruPants() : this( 0 )
{
}
[Constructable]
public OrochimaruPants( int hue ) : base( 0x1539, hue )
{
Weight = 2.0;
Hue = 1;
Name = "Orochimaru Legs";
LootType = LootType.Blessed;
}
public OrochimaruPants( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,40 @@
using System;
namespace Server.Items
{
[FlipableAttribute( 0x1F7B, 0x1F7C )]
public class OrochimaruShirt : BaseMiddleTorso
{
[Constructable]
public OrochimaruShirt() : this( 0 )
{
}
[Constructable]
public OrochimaruShirt( int hue ) : base( 0x1F7B, hue )
{
Weight = 2.0;
Name = "Orochimaru shirt";
Hue = 1;
LootType = LootType.Blessed;
}
public OrochimaruShirt( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,40 @@
using System;
namespace Server.Items
{
[FlipableAttribute( 0x1efd, 0x1efe )]
public class OrochimaruUnderShirt : BaseShirt
{
[Constructable]
public OrochimaruUnderShirt() : this( 0 )
{
}
[Constructable]
public OrochimaruUnderShirt( int hue ) : base( 0x1EFD, hue )
{
Weight = 2.0;
Name = "Orochimaru under shirt";
Hue = 1;
LootType = LootType.Blessed;
}
public OrochimaruUnderShirt( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,34 @@
using System;
using Server.Items;
namespace Server.Items
{
public class OrochimarusHeart : Item
{
[Constructable]
public OrochimarusHeart() : base( 7405 )
{
Movable = true;
Name = "Heart of Orochimaru";
Hue = 1000;
}
public OrochimarusHeart( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View File

@@ -0,0 +1,68 @@
using System;
using Server;
namespace Server.Items
{
// books: Brown 0xFEF, Tan 0xFF0, Red 0xFF1, Blue 0xFF2,
// OpenSmall 0xFF3, Open 0xFF4, OpenOld 0xFBD, 0xFBE
public class TsunadeBook: BaseBook
{
private const string TITLE = "Assassination Of Orochimaru";
private const string AUTHOR = "Hokage Tsunade";
private const int PAGES = 2;
private const bool WRITABLE = false;
[Constructable]
public TsunadeBook() : base( Utility.RandomList( 0xFEF, 0xFF0, 0xFF1, 0xFF2 ), TITLE, AUTHOR, PAGES, WRITABLE )
{
// NOTE: There are 8 lines per page and
// approx 22 to 24 characters per line.
// 0----+----1----+----2----+
int cnt = 0;
string[] lines;
lines = new string[]
{
"Track down Orochimaru",
"And kill him",
"And Bring Me His Heart",
};
Pages[cnt++].Lines = lines;
lines = new string[]
{
"",
"",
"",
"",
"",
"",
"",
"",
};
Pages[cnt++].Lines = lines;
}
public TsunadeBook( Serial serial ) : base( serial )
{
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 );
}
}
}

View File

@@ -0,0 +1,84 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Items;
using Server.Mobiles;
using Server.Commands;
namespace Server.Gumps
{
public class TsunadequestGump : Gump
{
public static void Initialize()
{
CommandSystem.Register("TsunadequestGump", AccessLevel.GameMaster, new CommandEventHandler(TsunadequestGump_OnCommand));
}
private static void TsunadequestGump_OnCommand( CommandEventArgs e )
{
e.Mobile.SendGump( new TsunadequestGump( e.Mobile ) );
}
public TsunadequestGump( Mobile owner ) : base( 50,50 )
{
//----------------------------------------------------------------------------------------------------
AddPage( 0 );
AddImageTiled( 54, 33, 369, 400, 2624 );
AddAlphaRegion( 54, 33, 369, 400 );
AddImageTiled( 416, 39, 44, 389, 203 );
//--------------------------------------Window size bar--------------------------------------------
AddImage( 97, 49, 9005 );
AddImageTiled( 58, 39, 29, 390, 10460 );
AddImageTiled( 412, 37, 31, 389, 10460 );
AddLabel( 140, 60, 0x34, "Orochimaru's Assassination" );
AddHtml( 107, 140, 300, 230, "<BODY>" +
//----------------------/----------------------------------------------/
"<BASEFONT COLOR=GREEN>Hokage Tsunade looks at you vaugly. After she puts down her paper, she says If you are brave enough, I have an urgant mission for you<BR><BR>I take it you wish for me to continue. *Tsunade clears her throat* Well, Orochimaru is said to be currently hiding out someplace in The Fire Dungeon, We must kill him... He is a great threat to us all. <BR>" +
"<BASEFONT COLOR=GREEN>Are you still interested?<BR><BR>What I would need you to do, is venture into The Fire Dungeon, Track him down, and kill him and any guards. I need you to bring me his heart, for proof, only because i haven't seen you around here." +
"</BODY>", false, true);
// <BASEFONT COLOR=#7B6D20>
// AddLabel( 113, 135, 0x34, "Tsunade puts down her Papers and asks.." );
// AddLabel( 113, 150, 0x34, "so you are going to help me?" );
// AddLabel( 113, 165, 0x34, "Remember, I need his heart as proof..." );
// AddLabel( 113, 180, 0x34, "You can find him in The Fire Dungeon." );
AddImage( 430, 9, 10441);
AddImageTiled( 40, 38, 17, 391, 9263 );
AddImage( 6, 25, 10421 );
AddImage( 34, 12, 10420 );
AddImageTiled( 94, 25, 342, 15, 10304 );
AddImageTiled( 40, 427, 415, 16, 10304 );
AddImage( -10, 314, 10402 );
AddImage( 56, 150, 10411 );
AddImage( 155, 120, 2103 );
AddImage( 136, 84, 96 );
AddButton( 225, 390, 0xF7, 0xF8, 0, GumpButtonType.Reply, 0 );
//--------------------------------------------------------------------------------------------------------------
}
public override void OnResponse( NetState state, RelayInfo info ) //Function for GumpButtonType.Reply Buttons
{
Mobile from = state.Mobile;
switch ( info.ButtonID )
{
case 0: //Case uses the ActionIDs defenied above. Case 0 defenies the actions for the button with the action id 0
{
//Cancel
from.SendMessage( "Hokage Tsunade goes back to her work." );
break;
}
}
}
}
}