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,221 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Prompts;
using Server.Mobiles;
using Server.Items;
using Server.SkillHandlers;
using Server.Network;
using Server.Engines.Quests;
namespace Server.Engines.Khaldun
{
public class TrapDoor : Item, IRevealableItem, IForensicTarget
{
//public static readonly Point3D TeleportDestination1 = new Point3D(6242, 2892, 17);
public Timer HideTimer { get; set; }
public bool CheckWhenHidden { get { return true; } }
[CommandProperty(AccessLevel.GameMaster)]
public Map DestinationMap { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public Point3D Destination { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public string Keyword { get; set; }
private bool _HasBeenExamined;
[CommandProperty(AccessLevel.GameMaster)]
public bool HasBeenExamined
{
get
{
return _HasBeenExamined;
}
set
{
bool current = _HasBeenExamined;
_HasBeenExamined = value;
if (!current && _HasBeenExamined)
{
HideTimer = Timer.DelayCall(TimeSpan.FromMinutes(20), () => Hide() );
}
}
}
public TrapDoor(string keyword, Point3D dest, Map destMap)
: base(0xA1CD)
{
Keyword = keyword;
Destination = dest;
DestinationMap = destMap;
Movable = false;
Visible = false;
}
public override void Delete()
{
base.Delete();
if (HideTimer != null)
{
HideTimer.Stop();
HideTimer = null;
}
}
private void Hide()
{
Visible = false;
HasBeenExamined = false;
ItemID = 0xA1CD;
if (HideTimer != null)
{
HideTimer.Stop();
HideTimer = null;
}
}
public bool CheckReveal(Mobile m)
{
return true;
}
public bool CheckPassiveDetect(Mobile m)
{
if (m.InRange(Location, 4))
{
if (Utility.Random(100) < 10)
return true;
}
return false;
}
public void OnRevealed(Mobile m)
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1158556, m.NetState); // *You notice something hidden in the floor...*
Visible = true;
}
public void OnForensicEval(Mobile m)
{
if (!m.Player)
return;
var quest = QuestHelper.GetQuest<GoingGumshoeQuest2>((PlayerMobile)m);
if (quest != null && CheckPrerequisite(quest))
{
m.PrivateOverheadMessage(MessageType.Regular, 0x47E, 1158559, m.NetState); // *You discover a hidden trap door!*
m.SendLocalizedMessage(1158611, null, 0x23); // It seems a trap door has been hidden in some false pavers. The heavy wooden door is secured with a rotating combination lock that accepts alpha-numeric characters. You'll need to figure out the passcode to unlock it...
m.SendSound(quest.UpdateSound);
HasBeenExamined = true;
ItemID = 0xA1CC;
if (HideTimer != null)
{
HideTimer.Stop();
HideTimer = null;
HideTimer = Timer.DelayCall(TimeSpan.FromMinutes(20), () => Hide());
}
}
}
private bool CheckPrerequisite(GoingGumshoeQuest2 quest)
{
switch (Keyword.ToLower())
{
case "boreas": return quest.VisitedHeastone1; // brit
case "moriens": return quest.VisitedHeastone2; // vesper
case "carthax": return quest.VisitedHeastone3; // moonglow
case "tenebrae": return quest.VisitedHeastone4; // yew
}
return false;
}
public override void OnDoubleClick(Mobile m)
{
if (Destination == Point3D.Zero || DestinationMap == null || DestinationMap == Map.Internal || String.IsNullOrEmpty(Keyword))
return;
if (m.InRange(GetWorldLocation(), 2) && _HasBeenExamined)
{
m.Prompt = new TrapDoorPrompt(this);
}
}
private class TrapDoorPrompt : Prompt
{
public override int MessageCliloc { get { return 1158557; } }
public TrapDoor Door { get; set; }
public TrapDoorPrompt(TrapDoor door)
{
Door = door;
}
public override void OnResponse(Mobile from, string text)
{
if (Door.Destination == Point3D.Zero || Door.DestinationMap == null || Door.DestinationMap == Map.Internal || String.IsNullOrEmpty(Door.Keyword))
return;
if (!string.IsNullOrEmpty(text) && text.Trim().ToLower() == Door.Keyword.ToLower())
{
Effects.SendLocationParticles(EffectItem.Create(from.Location, from.Map, EffectItem.DefaultDuration), 0x3728, 10, 10, 2023);
from.MoveToWorld(Door.Destination, Door.DestinationMap);
Effects.SendLocationParticles(EffectItem.Create(Door.Destination, Door.DestinationMap, EffectItem.DefaultDuration), 0x3728, 10, 10, 5023);
}
else
{
from.SendLocalizedMessage(1155663); // Nothign Happens
}
}
public override void OnCancel(Mobile from)
{
}
}
public TrapDoor(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
writer.Write(Keyword);
writer.Write(Destination);
writer.Write(DestinationMap);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Keyword = reader.ReadString();
Destination = reader.ReadPoint3D();
DestinationMap = reader.ReadMap();
Hide();
}
}
}