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,40 @@
using System;
using Server;
using Server.Items;
using Server.Mobiles;
namespace Server.Items
{
public class GibberHead : Item
{
[Constructable]
public GibberHead()
: base(7960)
{
Weight = 5.0;
Name = "a gibberling queen head";
Hue = 0;
}
public override void OnDoubleClick(Mobile from)
{
}
public GibberHead(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();
}
}
}

View File

@@ -0,0 +1,164 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server.Items;
using Server.Targeting;
using Server.ContextMenus;
using Server.Gumps;
using Server.Misc;
using Server.Network;
using Server.Spells;
namespace Server.Mobiles
{
[CorpseName("a corpse")]
public class GibberHunter : BaseCreature
{
[Constructable]
public GibberHunter()
: base(AIType.AI_Mage, FightMode.Closest, 10, 1, 0.2, 0.4)
{
Name = NameList.RandomName("male");
Title = "the hunter";
Body = 400;
///////////immortal and frozen to-the-spot features below:
Blessed = true;
CantWalk = true;
///////////STR/DEX/INT
InitStats(31, 41, 51);
/*
SetStr(76, 100);
SetDex(56, 75);
SetInt(11, 14);
SetHits(100);
SetDex(25);
SetInt(100);
SetDamage(11, 15);
SetDamageType(ResistanceType.Physical, 100);
SetResistance(ResistanceType.Physical, 20);
SetResistance(ResistanceType.Cold, 20);
SetResistance(ResistanceType.Poison, 20);
SetSkill(SkillName.Magery, 100.0);
SetSkill(SkillName.Meditation, 100.0);
SetSkill(SkillName.MagicResist, 100.0);
SetSkill(SkillName.Tactics, 100.0);
SetSkill(SkillName.Archery, 100.0);
SetSkill(SkillName.Anatomy, 100.0);
SetSkill(SkillName.Focus, 100.0);*/
Utility.AssignRandomHair(this);
AddItem(new Shirt());
AddItem(new LongPants());
Bow bow = new Bow();
bow.Attributes.SpellChanneling = 1;
bow.Attributes.CastSpeed = -1;
AddItem(bow);
Fame = 450;
Karma = 0;
VirtualArmor = 24;
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
AddItem(new Gold(2500));
}
public override bool OnDragDrop(Mobile from, Item dropped)
{
Mobile m = from;
PlayerMobile mobile = m as PlayerMobile;
if (mobile != null)
{
if (dropped is GibberHead)
{
dropped.Delete();
//mobile.AddToBackpack(new SoulThiefsDagger( ));
mobile.AddToBackpack(new GibberToken());
this.PrivateOverheadMessage(MessageType.Regular, 1153, false, "Thank you. as i said here is a reward.", mobile.NetState);
}
else
{
this.PrivateOverheadMessage(MessageType.Regular, 1153, false, "I have no need for this...", mobile.NetState); return true;
}
}
return false;
}
public class TheHunterEntry : ContextMenuEntry
{
private Mobile m_Mobile; private Mobile m_Giver;
public TheHunterEntry(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(HunterQuestGump)))
{
if (GibberToken.GibberTokenExistsOn(mobile))
{
mobile.SendMessage("You have already completed this task.");
}
else
{
mobile.SendGump(new HunterQuestGump());
}
}
}
}
}
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
{
base.GetContextMenuEntries(from, list);
list.Add(new TheHunterEntry(from, this));
}
public GibberHunter(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();
}
}
}

View File

@@ -0,0 +1,118 @@
using System;
using Server;
using Server.Items;
namespace Server.Mobiles
{
[CorpseName( "a gibberling corpse" )]
public class GibberlingQueen : BaseCreature
{
public override WeaponAbility GetWeaponAbility()
{
return WeaponAbility.Dismount;
}
private Mobile spawn;
private Point3D spawnloc;
private Map spawnmap;
[Constructable]
public GibberlingQueen() : base( AIType.AI_Melee, FightMode.Closest, 10, 1, 0.2, 0.4 )
{
Name = "a gibberling queen";
Body = 307;
BaseSoundID = 422;
SetStr( 350 );
SetDex( 120 );
SetInt( 120 );
SetHits( 750 );
SetDamage( 17, 24 );
SetDamageType( ResistanceType.Physical, 0 );
SetDamageType( ResistanceType.Fire, 40 );
SetDamageType( ResistanceType.Energy, 60 );
SetResistance( ResistanceType.Physical, 40 );
SetResistance( ResistanceType.Fire, 60 );
SetResistance( ResistanceType.Cold, 25, 35 );
SetResistance( ResistanceType.Poison, 60 );
SetResistance( ResistanceType.Energy, 60 );
SetSkill( SkillName.MagicResist, 120.0 );
SetSkill( SkillName.Tactics, 120.0 );
SetSkill( SkillName.Wrestling, 120.0 );
Fame = 1500;
Karma = -1500;
VirtualArmor = 37;
}
public override void OnDeath(Container c)
{
base.OnDeath(c);
c.AddItem(new GibberHead());
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich, 6 );
}
public override void OnDamage(int amount, Mobile from, bool willKill)
{
if (0.30 > Utility.RandomDouble())
{
GibberSpawn(from);
}
else if (amount > 10)
{
GibberSpawn(from);
GibberSpawn(from);
GibberSpawn(from);
GibberSpawn(from);
}
}
public void GibberSpawn(Mobile attacker)
{
spawn = new Gibberling();
switch (Utility.Random(2))
{
case 0:
spawnloc = new Point3D(this.X + 1, this.Y + 1, this.Z);
break;
case 1:
spawnloc = new Point3D(attacker.X + 1, attacker.Y + 1, attacker.Z);
break;
}
spawnmap = attacker.Map;
spawn.Combatant = attacker;
spawn.MoveToWorld(spawnloc, spawnmap);
return;
}
public GibberlingQueen(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();
}
}
}

View File

@@ -0,0 +1,48 @@
using System;
using Server;
using Server.Items;
using Server.Mobiles;
namespace Server.Items
{
public class GibberToken : Item
{
[Constructable]
public GibberToken()
: base(7960)
{
Weight = 0.0;
Hue = 0;
Movable = false;
Visible = false;
}
public override void OnDoubleClick(Mobile from)
{
}
public static bool GibberTokenExistsOn(Mobile mob)
{
Container pack = mob.Backpack;
return (pack != null && pack.FindItemByType(typeof(GibberToken)) != null);
}
public GibberToken(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();
}
}
}

View File

@@ -0,0 +1,63 @@
using System;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.Gumps;
using Server.Network;
namespace Server.Gumps
{
public class HunterQuestGump : Gump
{
public HunterQuestGump()
: base(0, 0)
{
this.Closable = false;
this.Disposable = false;
this.Dragable = true;
this.Resizable = false;
this.AddPage(0);
this.AddBackground(232, 113, 289, 364, 9250);
this.AddLabel(332, 146, 0, @"Gibberling Hunter");
// Quest text
this.AddHtml(252, 190, 250, 225, "< BODY > " +
"Usually i have no trouble fighting the gibberling "+
"by my self, but now that has changed.<BR><BR> "+
"They are being organised by a queen, "+
"The Gibberling Queen, she is the strongest "+
"gibberling i have ever fought, i am lucky "+
"to have escaped with my life!, hordes of "+
"gibberling follow her into battle "+
"like nothing i have ever seen. "+
"<BR><BR> "+
"I will reward you if you disperse of "+
"this beast for me, with a special dagger. "+
"just bring me her head when you are done, "+
"she was last seen South of Umbra in the desert thru the mountain passage "+
"gathering more gibberling, may you survive "+
"your task and live to reap the reward. "+
" </BODY> ", (bool)true, (bool)true);// Quest text
this.AddImage(246, 124, 9004);
this.AddImage(469, 124, 9004);
this.AddImage(246, 431, 9005);
this.AddButton(339, 421, 1149, 1148, 0, GumpButtonType.Reply, 0);
}
public override void OnResponse(NetState state, RelayInfo info)
{
Mobile from = state.Mobile;
switch (info.ButtonID)
{
case 0: // Close/Cancel
{
break;
}
}
}
}
}