Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
256
Scripts/Quests/CloakOfHumility/Mobiles/HumilityQuestMobile.cs
Normal file
256
Scripts/Quests/CloakOfHumility/Mobiles/HumilityQuestMobile.cs
Normal file
@@ -0,0 +1,256 @@
|
||||
using System;
|
||||
using Server.Items;
|
||||
using System.Collections.Generic;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.Quests
|
||||
{
|
||||
public class HumilityQuestMobile : BaseVendor
|
||||
{
|
||||
public virtual int Greeting { get { return 0; } }
|
||||
|
||||
public override bool IsActiveVendor { get { return false; } }
|
||||
public override bool IsInvulnerable { get { return true; } }
|
||||
public override bool CanTeach { get { return false; } }
|
||||
public override bool PlayerRangeSensitive { get { return false; } }
|
||||
|
||||
private List<SBInfo> m_SBInfos = new List<SBInfo>();
|
||||
protected override List<SBInfo> SBInfos { get { return m_SBInfos; } }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
}
|
||||
|
||||
public HumilityQuestMobile(string name) : base(null)
|
||||
{
|
||||
Name = name;
|
||||
m_NextGreet = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public HumilityQuestMobile(string name, string title) : base(title)
|
||||
{
|
||||
Name = name;
|
||||
m_NextGreet = DateTime.UtcNow;
|
||||
}
|
||||
|
||||
public static List<HumilityQuestMobile> Instance { get { return m_Instances; } }
|
||||
private static List<HumilityQuestMobile> m_Instances = new List<HumilityQuestMobile>();
|
||||
|
||||
public HumilityQuestMobile(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
private DateTime m_NextGreet;
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
PlayerMobile pm = m as PlayerMobile;
|
||||
|
||||
if (pm == null || !pm.InRange(this.Location, 3))
|
||||
return;
|
||||
|
||||
WhosMostHumbleQuest quest = QuestHelper.GetQuest(pm, typeof(WhosMostHumbleQuest)) as WhosMostHumbleQuest;
|
||||
|
||||
if (quest != null)
|
||||
{
|
||||
if (m_NextGreet < DateTime.UtcNow && pm is PlayerMobile)
|
||||
{
|
||||
Item item = pm.FindItemOnLayer(Layer.Cloak);
|
||||
|
||||
if (item is GreyCloak && ((GreyCloak)item).Owner == null && Greeting > 0)
|
||||
{
|
||||
SayTo(pm, Greeting);
|
||||
|
||||
m_NextGreet = DateTime.UtcNow + TimeSpan.FromSeconds(5);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
PlayerMobile pm = from as PlayerMobile;
|
||||
|
||||
if (pm == null || !InRange(from.Location, 3))
|
||||
return;
|
||||
|
||||
WhosMostHumbleQuest quest = QuestHelper.GetQuest(pm, typeof(WhosMostHumbleQuest)) as WhosMostHumbleQuest;
|
||||
|
||||
if (quest != null && pm.Backpack != null && !quest.HasGivenTo(this))
|
||||
{
|
||||
Item item = from.FindItemOnLayer(Layer.Cloak);
|
||||
|
||||
if (item is GreyCloak && ((GreyCloak)item).Owner == null)
|
||||
{
|
||||
int idx = HumilityQuestMobileInfo.GetNPCIndex(this.GetType());
|
||||
|
||||
if (idx > -1 && quest.Infos.ContainsKey(idx) && idx < quest.Infos.Count)
|
||||
{
|
||||
Type needs = quest.Infos[idx].Needs;
|
||||
|
||||
Item need = from.Backpack.FindItemByType(needs);
|
||||
|
||||
// Found needed item
|
||||
if (need != null)
|
||||
{
|
||||
need.Delete();
|
||||
quest.RemoveQuestItem(need);
|
||||
|
||||
Item nextItem = Loot.Construct(quest.Infos[idx].Gives);
|
||||
|
||||
if (nextItem != null)
|
||||
{
|
||||
from.Backpack.DropItem(nextItem);
|
||||
quest.AddQuestItem(nextItem, this);
|
||||
|
||||
if (this is Sean)
|
||||
SayTo(from, Greeting + 3, String.Format("#{0}", quest.Infos[idx].NeedsLoc));
|
||||
else
|
||||
SayTo(from, Greeting + 4, String.Format("#{0}\t#{1}", quest.Infos[idx].NeedsLoc, quest.Infos[idx].GivesLoc));
|
||||
}
|
||||
}
|
||||
else //Didn't find needed item
|
||||
{
|
||||
from.SendGump(new HumilityItemQuestGump(this, quest, idx));
|
||||
}
|
||||
}
|
||||
else
|
||||
Console.WriteLine("Error finding index for {0}", this);
|
||||
}
|
||||
else
|
||||
base.OnDoubleClick(from);
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
m_NextGreet = DateTime.UtcNow;
|
||||
}
|
||||
}
|
||||
|
||||
public class HumilityQuestMobileInfo
|
||||
{
|
||||
// Greeting(say), Greeting2(gump), Desire(say), Gift(say), OnExchange(say)
|
||||
|
||||
private Type m_Needs;
|
||||
private Type m_Gives;
|
||||
private int m_NeedsLoc;
|
||||
private int m_GivesLoc;
|
||||
|
||||
public Type Needs { get { return m_Needs; } }
|
||||
public Type Gives { get { return m_Gives; } }
|
||||
public int NeedsLoc { get { return m_NeedsLoc; } }
|
||||
public int GivesLoc { get { return m_GivesLoc; } }
|
||||
|
||||
public HumilityQuestMobileInfo(Type needs, Type gives, int needsLoc, int givesLoc)
|
||||
{
|
||||
m_Needs = needs;
|
||||
m_Gives = gives;
|
||||
m_NeedsLoc = needsLoc;
|
||||
m_GivesLoc = givesLoc;
|
||||
}
|
||||
|
||||
public HumilityQuestMobileInfo(GenericReader reader)
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
|
||||
int needs = reader.ReadInt();
|
||||
int gives = reader.ReadInt();
|
||||
|
||||
m_Needs = m_ItemTypes[needs];
|
||||
|
||||
if (gives == -1)
|
||||
m_Gives = typeof(IronChain);
|
||||
else
|
||||
m_Gives = m_ItemTypes[gives];
|
||||
|
||||
m_NeedsLoc = reader.ReadInt();
|
||||
m_GivesLoc = reader.ReadInt();
|
||||
}
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.Write((int)0);
|
||||
|
||||
int needs = Array.IndexOf(m_ItemTypes, m_Needs);
|
||||
writer.Write(needs);
|
||||
|
||||
int gives = Array.IndexOf(m_ItemTypes, m_Gives);
|
||||
writer.Write(gives);
|
||||
|
||||
writer.Write(m_NeedsLoc);
|
||||
writer.Write(m_GivesLoc);
|
||||
}
|
||||
|
||||
public static int GetNPCIndex(Type type)
|
||||
{
|
||||
for (int i = 0; i < m_MobileTypes.Length; i++)
|
||||
{
|
||||
if (m_MobileTypes[i] == type)
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static int GetLoc(Type type)
|
||||
{
|
||||
for (int i = 0; i < m_ItemTypes.Length; i++)
|
||||
{
|
||||
if (type == m_ItemTypes[i])
|
||||
return m_ItemLocs[i];
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public static Type[] ItemTypes { get { return m_ItemTypes; } }
|
||||
private static Type[] m_ItemTypes = new Type[]
|
||||
{
|
||||
typeof(BrassRing),
|
||||
typeof(SeasonedSkillet),
|
||||
typeof(VillageCauldron),
|
||||
typeof(ShortStool),
|
||||
typeof(FriendshipMug),
|
||||
typeof(WornHammer),
|
||||
typeof(PairOfWorkGloves),
|
||||
typeof(IronChain)
|
||||
};
|
||||
|
||||
public static int[] ItemLocs { get { return m_ItemLocs; } }
|
||||
private static int[] m_ItemLocs = new int[]
|
||||
{
|
||||
1075778,
|
||||
1075774,
|
||||
1075775,
|
||||
1075776,
|
||||
1075777,
|
||||
1075779,
|
||||
1075780,
|
||||
1075788
|
||||
};
|
||||
|
||||
public static Type[] MobileTypes { get { return m_MobileTypes; } }
|
||||
private static Type[] m_MobileTypes = new Type[]
|
||||
{
|
||||
typeof(Maribel),
|
||||
typeof(Dierdre),
|
||||
typeof(Kevin),
|
||||
typeof(Jason),
|
||||
typeof(Walton),
|
||||
typeof(Nelson),
|
||||
typeof(Sean)
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user