Merge branch 'main' into webSupport

This commit is contained in:
Kamron Batman 2021-12-24 16:02:16 -08:00 committed by GitHub
commit f5fef07e0c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
358 changed files with 2982 additions and 1498 deletions

View file

@ -11,7 +11,7 @@
<PublicRelease>true</PublicRelease>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<NoWarn>NU1603</NoWarn>
<RuntimeIdentifiers>win-x64;debian.9-x64;debian.10-x64;debian.11-x64;ubuntu.16.04-x64;ubuntu.18.04-x64;ubuntu.20.04-x64;centos.7-x64;centos.8-x64;fedora.32-x64;fedora.33-x64;fedora.34-x64;rhel.7-x64;rhel.8-x64;osx-x64</RuntimeIdentifiers>
<RuntimeIdentifiers>win-x64;debian.10-x64;debian.11-x64;ubuntu.16.04-x64;ubuntu.18.04-x64;ubuntu.20.04-x64;centos.7-x64;centos.8-x64;fedora.32-x64;fedora.33-x64;fedora.34-x64;rhel.7-x64;rhel.8-x64;osx-x64</RuntimeIdentifiers>
<Configurations>Debug;Release;Analyze</Configurations>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>

View file

@ -67,7 +67,11 @@ namespace SerializableMigration
ruleArguments[0] = extraOptions;
ruleArguments[1] = setTypeSymbol.ToDisplayString();
ruleArguments[2] = serializableSetType.Rule;
Array.Copy(serializableSetType.RuleArguments, 0, ruleArguments, 3, length);
if (length > 0)
{
Array.Copy(serializableSetType.RuleArguments, 0, ruleArguments, 3, length);
}
return true;
}
@ -98,7 +102,7 @@ namespace SerializableMigration
source.AppendLine($"{indent}{ruleArguments[argumentsOffset]} {propertyEntry};");
source.AppendLine($"{indent}var {propertyCount} = reader.ReadEncodedInt();");
source.AppendLine($"{indent}{property.Name} = new System.Collections.Generic.HashSet<{ruleArguments[argumentsOffset]}>({propertyCount});");
source.AppendLine($"{indent}for (var {propertyIndex} = 0; i < {propertyCount}; {propertyIndex}++)");
source.AppendLine($"{indent}for (var {propertyIndex} = 0; {propertyIndex} < {propertyCount}; {propertyIndex}++)");
source.AppendLine($"{indent}{{");
var serializableSetElement = new SerializableProperty

View file

@ -43,6 +43,7 @@ namespace SerializableMigration
_ when symbol.IsRectangle3D(compilation) => new[] { "Rect3D" },
_ when symbol.IsRace(compilation) => new[] { "Race" },
_ when symbol.IsMap(compilation) => new[] { "Map" },
_ when symbol.IsBitArray(compilation) => new[] { "BitArray" },
_ => null
};

View file

@ -1,6 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>preview</LangVersion>
<BuildOutputTargetFolder>analyzers</BuildOutputTargetFolder>
</PropertyGroup>
@ -12,6 +12,7 @@
<PackageReference Include="System.Text.Json" Version="6.0.0" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="System.Text.Encodings.Web" Version="6.0.0" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="6.0.0" GeneratePathProperty="true" PrivateAssets="all" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" GeneratePathProperty="true" PrivateAssets="all" />
</ItemGroup>
<PropertyGroup>
@ -21,9 +22,10 @@
<Target Name="GetDependencyTargetPaths">
<ItemGroup>
<TargetPathWithTargetPlatformMoniker Include="$(PKGHumanizer_Core)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGSystem_Text_Json)\lib\netstandard2.1\*.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGSystem_Text_Encodings_Web)\lib\netstandard2.1\*.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGMicrosoft_Bcl_AsyncInterfaces)\lib\netstandard2.1\*.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGSystem_Text_Json)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGSystem_Text_Encodings_Web)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGMicrosoft_Bcl_AsyncInterfaces)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
<TargetPathWithTargetPlatformMoniker Include="$(PKGSystem_Runtime_CompilerServices_Unsafe)\lib\netstandard2.0\*.dll" IncludeRuntimeDependency="false" />
</ItemGroup>
</Target>
</Project>

View file

@ -47,6 +47,8 @@ namespace SerializationGenerator
public const string SERIALIZABLE_FIELD_SAVE_FLAG_ATTRIBUTE = "Server.SerializableFieldSaveFlagAttribute";
public const string SERIALIZABLE_FIELD_DEFAULT_ATTRIBUTE = "Server.SerializableFieldDefaultAttribute";
public const string RAW_SERIALIZABLE_INTERFACE = "Server.IRawSerializable";
// ModernUO modified BitArray
public const string SERVER_BITARRAY_CLASS = "Server.Collections.BitArray";
public static bool IsTimerDrift(this AttributeData attr, Compilation compilation) =>
attr?.IsAttribute(compilation.GetTypeByMetadataName(TIMER_DRIFT_ATTRIBUTE)) == true;
@ -184,6 +186,12 @@ namespace SerializationGenerator
SymbolEqualityComparer.Default
);
public static bool IsBitArray(this ISymbol symbol, Compilation compilation) =>
symbol.Equals(
compilation.GetTypeByMetadataName(SERVER_BITARRAY_CLASS),
SymbolEqualityComparer.Default
);
public static AttributeData? GetAttribute(this ISymbol symbol, ISymbol attrSymbol) =>
symbol
.GetAttributes()

View file

@ -50,7 +50,7 @@ namespace Server.Network
{
EnsureCapacity(256);
Stream.Write(!(vendor.FindItemOnLayer(Layer.ShopBuy) is Container buyPack) ? Serial.MinusOne : buyPack.Serial);
Stream.Write(vendor.FindItemOnLayer(Layer.ShopBuy) is not Container buyPack ? Serial.MinusOne : buyPack.Serial);
Stream.Write((byte)list.Count);

View file

@ -71,7 +71,7 @@ namespace Server
return 50;
}
if (!(objs[0] is CallPriorityAttribute attr))
if (objs[0] is not CallPriorityAttribute attr)
{
return 50;
}

File diff suppressed because it is too large Load diff

View file

@ -13,33 +13,43 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
namespace Server.Collections
namespace Server.Collections;
public static class CollectionThrowStrings
{
public static class CollectionThrowStrings
{
public const string ArgumentOutOfRange_Index =
"Index was out of range. Must be non-negative and less than the size of the collection.";
public const string ArgumentOutOfRange_Index =
"Index was out of range. Must be non-negative and less than the size of the collection.";
public const string ArgumentOutOfRange_NeedNonNegNum = "Non-negative number required.";
public const string ArgumentOutOfRange_NeedNonNegNum = "Non-negative number required.";
public const string Argument_InvalidOffLen =
"Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.";
public const string Argument_InvalidOffLen =
"Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.";
public const string Argument_AddingDuplicate = "An item with the same value has already been added. Value: {0}";
public const string Argument_AddingDuplicate = "An item with the same value has already been added. Value: {0}";
public const string Arg_ArrayPlusOffTooSmall =
"Destination array is not long enough to copy all the items in the collection. Check array index and length.";
public const string Arg_ArrayPlusOffTooSmall =
"Destination array is not long enough to copy all the items in the collection. Check array index and length.";
public const string InvalidOperation_ConcurrentOperationsNotSupported =
"Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.";
public const string InvalidOperation_ConcurrentOperationsNotSupported =
"Operations that change non-concurrent collections must have exclusive access. A concurrent update was performed on this collection and corrupted its state. The collection's state is no longer correct.";
public const string InvalidOperation_EnumFailedVersion =
"Collection was modified after the enumerator was instantiated.";
public const string InvalidOperation_EnumFailedVersion =
"Collection was modified after the enumerator was instantiated.";
public const string InvalidOperation_EmptyQueue = "Queue empty.";
public const string InvalidOperation_EmptyQueue = "Queue empty.";
public const string InvalidOperation_EnumNotStarted = "Enumeration has not started. Call MoveNext.";
public const string InvalidOperation_EnumNotStarted = "Enumeration has not started. Call MoveNext.";
public const string InvalidOperation_EnumEnded = "Enumeration already finished.";
}
public const string InvalidOperation_EnumEnded = "Enumeration already finished.";
public const string Argument_ArrayTooLarge =
"The input array length must not exceed Int32.MaxValue / {0}. Otherwise BitArray.Length would exceed Int32.MaxValue.";
public const string Arg_ArrayLengthsDiffer = "Array lengths must be the same.";
public const string Arg_RankMultiDimNotSupported =
"Only single dimensional arrays are supported for the requested action.";
public const string Arg_BitArrayTypeUnsupported =
"Only supported array types for CopyTo on BitArrays are Boolean[], Int32[] and Byte[].";
}

View file

@ -451,7 +451,7 @@ namespace Server.Collections
private void ThrowEnumerationNotStartedOrEnded()
{
Debug.Assert(_index == -1 || _index == -2);
Debug.Assert(_index is -1 or -2);
throw new InvalidOperationException(_index == -1 ? CollectionThrowStrings.InvalidOperation_EnumNotStarted : CollectionThrowStrings.InvalidOperation_EnumEnded);
}

View file

@ -70,7 +70,7 @@ namespace Server.ContextMenus
for (var i = 0; i < Entries.Length; ++i)
{
var number = Entries[i].Number;
if (number < 3000000 || number > 3032767)
if (number is < 3000000 or > 3032767)
{
return true;
}

View file

@ -231,7 +231,7 @@ namespace Server.Items
return container.CheckHold(m, item, message, checkItems, plusItems, plusWeight);
}
if (!(parent is Item parentItem))
if (parent is not Item parentItem)
{
break;
}
@ -504,7 +504,7 @@ namespace Server.Items
{
var item = list[i];
if (!(item is Container) && CheckHold(from, dropped, false, false) &&
if (item is not Container && CheckHold(from, dropped, false, false) &&
item.StackWith(from, dropped, playSound))
{
return true;
@ -540,7 +540,7 @@ namespace Server.Items
{
var item = list[j];
if (!(item is Container) && CheckHold(from, dropped, false, false, 0, extraWeight) &&
if (item is not Container && CheckHold(from, dropped, false, false, 0, extraWeight) &&
item.CanStackWith(dropped))
{
stackItems.Add(new ItemStackEntry(item, dropped));

View file

@ -443,7 +443,7 @@ namespace Server
var weight = TileData.ItemTable[m_ItemID].Weight;
if (weight == 255 || weight == 0)
if (weight is 255 or 0)
{
weight = 1;
}

View file

@ -78,7 +78,7 @@ namespace Server.Json
reader.Read();
if (key == "start" || key == "end")
if (key is "start" or "end")
{
if (objType > -1 && objType != 2)
{
@ -140,7 +140,7 @@ namespace Server.Json
objType = 1;
data[i - 10] = reader.GetInt32();
if (i == 12 || i == 15)
if (i is 12 or 15)
{
hasZ = true;
}

View file

@ -520,7 +520,7 @@ namespace Server
var eable = map.GetItemsInRange(new Point3D(x, y, 0), 0);
pool.AddRange(
eable.Where(item => item.ItemID <= TileData.MaxItemValue && !(item is BaseMulti))
eable.Where(item => item.ItemID <= TileData.MaxItemValue && item is not BaseMulti)
.OrderBy(item => item.Z)
.Take(pool.Capacity)
);
@ -715,7 +715,7 @@ namespace Server
{
var item = sector.Items[i];
if (!(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue && item.AtWorldPoint(p.X, p.Y) &&
if (item is not BaseMulti && item.ItemID <= TileData.MaxItemValue && item.AtWorldPoint(p.X, p.Y) &&
!item.Movable)
{
var id = item.ItemData;
@ -1145,7 +1145,7 @@ namespace Server
{
var item = items[i];
if (!(item is BaseMulti) && item.ItemID <= TileData.MaxItemValue && item.AtWorldPoint(x, y))
if (item is not BaseMulti && item.ItemID <= TileData.MaxItemValue && item.AtWorldPoint(x, y))
{
var id = item.ItemData;
surface = id.Surface;

View file

@ -1888,7 +1888,7 @@ namespace Server
item ??= FindItemOnLayer(Layer.Mount);
if (!(item is IMountItem mountItem))
if (item is not IMountItem mountItem)
{
return null;
}
@ -8397,7 +8397,7 @@ namespace Server
var n = Notoriety.Compute(this, target);
return n == Notoriety.Criminal || n == Notoriety.Murderer;
return n is Notoriety.Criminal or Notoriety.Murderer;
}
/// <summary>

View file

@ -223,7 +223,7 @@ namespace Server.Network
private void SetPacketTime(int packetID)
{
if (packetID < 0 || packetID >= 0x100)
if (packetID is < 0 or >= 0x100)
{
return;
}
@ -233,7 +233,7 @@ namespace Server.Network
public long GetPacketDelay(int packetID)
{
if (packetID < 0 || packetID >= 0x100)
if (packetID is < 0 or >= 0x100)
{
return 0;
}
@ -243,7 +243,7 @@ namespace Server.Network
private void UpdatePacketCount(int packetID)
{
if (packetID < 0 || packetID >= 0x100)
if (packetID is < 0 or >= 0x100)
{
return;
}
@ -728,7 +728,7 @@ namespace Server.Network
{
reader.Advance((uint)packetLength);
}
else if (_parserState == ParserState.AwaitingPartialPacket || _parserState == ParserState.Throttled)
else if (_parserState is ParserState.AwaitingPartialPacket or ParserState.Throttled)
{
break;
}

View file

@ -60,7 +60,7 @@ namespace Server.Network
reader.ReadInt16(); // font
var text = reader.ReadAsciiSafe().Trim();
if (text.Length <= 0 || text.Length > 128)
if (text.Length is <= 0 or > 128)
{
return;
}
@ -97,7 +97,7 @@ namespace Server.Network
var count = (value & 0xFFF0) >> 4;
var hold = value & 0xF;
if (count < 0 || count > 50)
if (count is < 0 or > 50)
{
return;
}
@ -141,7 +141,7 @@ namespace Server.Network
text = text.Trim();
if (text.Length <= 0 || text.Length > 128)
if (text.Length is <= 0 or > 128)
{
return;
}

View file

@ -16,6 +16,7 @@
using System;
using System.IO;
using System.Runtime.CompilerServices;
using Server.Collections;
namespace Server
{
@ -78,6 +79,15 @@ namespace Server
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int Read(Span<byte> buffer) => _reader.Read(buffer);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public BitArray ReadBitArray()
{
var length = ((IGenericReader)this).ReadEncodedInt();
// BinaryReader doesn't expose a Span slice of the buffer, so we use a custom ctor
return new BitArray(_reader, length);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public long Seek(long offset, SeekOrigin origin) => _reader.BaseStream.Seek(offset, origin);

View file

@ -19,6 +19,7 @@ using System.Diagnostics;
using System.IO;
using System.Runtime.CompilerServices;
using System.Text;
using Server.Collections;
using Server.Text;
namespace Server
@ -156,6 +157,19 @@ namespace Server
return length;
}
public BitArray ReadBitArray()
{
var length = ((IGenericReader)this).ReadEncodedInt();
if (length > _buffer.Length - _position)
{
throw new OutOfMemoryException();
}
var bitArray = new BitArray(_buffer.AsSpan(_position, length));
_position += length;
return bitArray;
}
public virtual long Seek(long offset, SeekOrigin origin)
{
Debug.Assert(

View file

@ -18,6 +18,7 @@ using System.Diagnostics;
using System.IO;
using System.Runtime.CompilerServices;
using System.Text;
using Server.Collections;
using Server.Text;
namespace Server
@ -134,6 +135,16 @@ namespace Server
}
}
public void Write(BitArray bitArray)
{
var byteLength = BitArray.GetByteArrayLengthFromBitLength(bitArray.Length);
FlushIfNeeded(byteLength + 4);
((IGenericWriter)this).WriteEncodedInt(byteLength);
bitArray.CopyTo(_buffer.AsSpan((int)Index, byteLength));
Index += byteLength;
}
public virtual long Seek(long offset, SeekOrigin origin)
{
Debug.Assert(

View file

@ -16,6 +16,7 @@
using System;
using System.IO;
using System.Net;
using Server.Collections;
namespace Server
{
@ -116,6 +117,8 @@ namespace Server
return new Guid(bytes);
}
BitArray ReadBitArray();
long Seek(long offset, SeekOrigin origin);
}
}

View file

@ -16,6 +16,7 @@
using System;
using System.IO;
using System.Net;
using Server.Collections;
namespace Server
{
@ -160,6 +161,8 @@ namespace Server
Write(stack);
}
void Write(BitArray bitArray);
long Seek(long offset, SeekOrigin origin);
}
}

View file

@ -40,7 +40,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SerializationGenerator\SerializationGenerator.csproj">
<SetTargetFramework>TargetFramework=netstandard2.1</SetTargetFramework>
<SetTargetFramework>TargetFramework=netstandard2.0</SetTargetFramework>
<OutputItemType>Analyzer</OutputItemType>
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
<PrivateAssets>all</PrivateAssets>

View file

@ -135,7 +135,7 @@ namespace Server
}
}
if (Lock < SkillLock.Up || Lock > SkillLock.Locked)
if (Lock is < SkillLock.Up or > SkillLock.Locked)
{
Console.WriteLine("Bad skill lock -> {0}.{1}", owner.Owner, Lock);
Lock = SkillLock.Up;
@ -323,7 +323,7 @@ namespace Server
public void SetLockNoRelay(SkillLock skillLock)
{
if (skillLock < SkillLock.Up || skillLock > SkillLock.Locked)
if (skillLock is < SkillLock.Up or > SkillLock.Locked)
{
return;
}

View file

@ -0,0 +1,242 @@
/*************************************************************************
* ModernUO *
* Copyright 2019-2021 - ModernUO Development Team *
* Email: hi@modernuo.com *
* File: Timer.DelayStateCall.cs *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* (at your option) any later version. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
using System;
using System.Runtime.CompilerServices;
namespace Server
{
public partial class Timer
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T>(Action<T> callback, T state) =>
DelayCall(TimeSpan.Zero, TimeSpan.Zero, 1, callback, state);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T>(TimeSpan delay, Action<T> callback, T state) =>
DelayCall(delay, TimeSpan.Zero, 1, callback, state);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T>(TimeSpan delay, TimeSpan interval, Action<T> callback, T state) =>
DelayCall(delay, interval, 0, callback, state);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T>(TimeSpan delay, TimeSpan interval, int count, Action<T> callback, T state) =>
new DelayStateCallTimer<T>(delay, interval, count, callback, state).Start();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2>(Action<T1, T2> callback, T1 t1, T2 t2) =>
DelayCall(TimeSpan.Zero, TimeSpan.Zero, 1, callback, t1, t2);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2>(TimeSpan delay, Action<T1, T2> callback, T1 t1, T2 t2) =>
DelayCall(delay, TimeSpan.Zero, 1, callback, t1, t2);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2>(TimeSpan delay, TimeSpan interval, Action<T1, T2> callback, T1 t1, T2 t2) =>
DelayCall(delay, interval, 0, callback, t1, t2);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2>(
TimeSpan delay, TimeSpan interval, int count, Action<T1, T2> callback,
T1 t1, T2 t2
) => new DelayStateCallTimer<T1, T2>(delay, interval, count, callback, t1, t2).Start();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3>(Action<T1, T2, T3> callback, T1 t1, T2 t2, T3 t3) =>
DelayCall(TimeSpan.Zero, TimeSpan.Zero, 1, callback, t1, t2, t3);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3>(
TimeSpan delay, Action<T1, T2, T3> callback, T1 t1, T2 t2, T3 t3
) => DelayCall(delay, TimeSpan.Zero, 1, callback, t1, t2, t3);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3>(
TimeSpan delay, TimeSpan interval, Action<T1, T2, T3> callback,
T1 t1, T2 t2, T3 t3
) => DelayCall(delay, interval, 0, callback, t1, t2, t3);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3>(
TimeSpan delay, TimeSpan interval, int count,
Action<T1, T2, T3> callback, T1 t1, T2 t2, T3 t3
) => new DelayStateCallTimer<T1, T2, T3>(delay, interval, count, callback, t1, t2, t3).Start();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3, T4>(
Action<T1, T2, T3, T4> callback, T1 t1, T2 t2, T3 t3, T4 t4
) => DelayCall(TimeSpan.Zero, TimeSpan.Zero, 1, callback, t1, t2, t3, t4);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3, T4>(
TimeSpan delay, Action<T1, T2, T3, T4> callback,
T1 t1, T2 t2, T3 t3, T4 t4
) => DelayCall(delay, TimeSpan.Zero, 1, callback, t1, t2, t3, t4);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3, T4>(
TimeSpan delay, TimeSpan interval,
Action<T1, T2, T3, T4> callback, T1 t1, T2 t2, T3 t3, T4 t4
) => DelayCall(delay, interval, 0, callback, t1, t2, t3, t4);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3, T4>(
TimeSpan delay, TimeSpan interval, int count,
Action<T1, T2, T3, T4> callback, T1 t1, T2 t2, T3 t3, T4 t4
) => new DelayStateCallTimer<T1, T2, T3, T4>(delay, interval, count, callback, t1, t2, t3, t4).Start();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3, T4, T5>(
Action<T1, T2, T3, T4, T5> callback, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5
) => new DelayStateCallTimer<T1, T2, T3, T4, T5>(TimeSpan.Zero, TimeSpan.Zero, 1, callback, t1, t2, t3, t4, t5).Start();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3, T4, T5>(
TimeSpan delay,
Action<T1, T2, T3, T4, T5> callback, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5
) => new DelayStateCallTimer<T1, T2, T3, T4, T5>(delay, TimeSpan.Zero, 1, callback, t1, t2, t3, t4, t5).Start();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3, T4, T5>(
TimeSpan delay, TimeSpan interval,
Action<T1, T2, T3, T4, T5> callback, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5
) => new DelayStateCallTimer<T1, T2, T3, T4, T5>(delay, interval, 0, callback, t1, t2, t3, t4, t5).Start();
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static Timer DelayCall<T1, T2, T3, T4, T5>(
TimeSpan delay, TimeSpan interval, int count,
Action<T1, T2, T3, T4, T5> callback, T1 t1, T2 t2, T3 t3, T4 t4, T5 t5
) => new DelayStateCallTimer<T1, T2, T3, T4, T5>(delay, interval, count, callback, t1, t2, t3, t4, t5).Start();
private class DelayStateCallTimer<T> : Timer
{
private readonly T _t1;
public DelayStateCallTimer(TimeSpan delay, TimeSpan interval, int count, Action<T> callback, T state)
: base(delay, interval, count)
{
Callback = callback;
_t1 = state;
}
public Action<T> Callback { get; }
protected override void OnTick() => Callback?.Invoke(_t1);
public override string ToString() => $"DelayStateCall[{FormatDelegate(Callback)}]";
}
private class DelayStateCallTimer<T1, T2> : Timer
{
private readonly T1 _t1;
private readonly T2 _t2;
public DelayStateCallTimer(
TimeSpan delay, TimeSpan interval, int count, Action<T1, T2> callback,
T1 t1, T2 t2
) : base(delay, interval, count)
{
Callback = callback;
_t1 = t1;
_t2 = t2;
}
public Action<T1, T2> Callback { get; }
protected override void OnTick() => Callback?.Invoke(_t1, _t2);
public override string ToString() => $"DelayStateCall[{FormatDelegate(Callback)}]";
}
private class DelayStateCallTimer<T1, T2, T3> : Timer
{
private readonly T1 _t1;
private readonly T2 _t2;
private readonly T3 _t3;
public DelayStateCallTimer(
TimeSpan delay, TimeSpan interval, int count, Action<T1, T2, T3> callback,
T1 t1, T2 t2, T3 t3
) : base(delay, interval, count)
{
Callback = callback;
_t1 = t1;
_t2 = t2;
_t3 = t3;
}
public Action<T1, T2, T3> Callback { get; }
protected override void OnTick() => Callback?.Invoke(_t1, _t2, _t3);
public override string ToString() => $"DelayStateCall[{FormatDelegate(Callback)}]";
}
private class DelayStateCallTimer<T1, T2, T3, T4> : Timer
{
private readonly T1 _t1;
private readonly T2 _t2;
private readonly T3 _t3;
private readonly T4 _t4;
public DelayStateCallTimer(
TimeSpan delay, TimeSpan interval, int count, Action<T1, T2, T3, T4> callback,
T1 t1, T2 t2, T3 t3, T4 t4
) : base(delay, interval, count)
{
Callback = callback;
_t1 = t1;
_t2 = t2;
_t3 = t3;
_t4 = t4;
}
public Action<T1, T2, T3, T4> Callback { get; }
protected override void OnTick() => Callback?.Invoke(_t1, _t2, _t3, _t4);
public override string ToString() => $"DelayStateCall[{FormatDelegate(Callback)}]";
}
private class DelayStateCallTimer<T1, T2, T3, T4, T5> : Timer
{
private readonly T1 _t1;
private readonly T2 _t2;
private readonly T3 _t3;
private readonly T4 _t4;
private readonly T5 _t5;
public DelayStateCallTimer(
TimeSpan delay, TimeSpan interval, int count, Action<T1, T2, T3, T4, T5> callback,
T1 t1, T2 t2, T3 t3, T4 t4, T5 t5
) : base(delay, interval, count)
{
Callback = callback;
_t1 = t1;
_t2 = t2;
_t3 = t3;
_t4 = t4;
_t5 = t5;
}
public Action<T1, T2, T3, T4, T5> Callback { get; }
protected override void OnTick() => Callback?.Invoke(_t1, _t2, _t3, _t4, _t5);
public override string ToString() => $"DelayStateCall[{FormatDelegate(Callback)}]";
}
}
}

View file

@ -343,7 +343,7 @@ namespace Server
if (endOfSection || i + 1 == end)
{
if (number < 0 || number > 255)
if (number is < 0 or > 255)
{
valid = false;
return false;

View file

@ -758,7 +758,7 @@ namespace Server.Accounting
private static void EventSink_Connected(Mobile m)
{
if (!(m.Account is Account acc))
if (m.Account is not Account acc)
{
return;
}

View file

@ -110,7 +110,7 @@ namespace Server.Misc
{
var from = e.Mobile;
if (!(from.Account is Account acct))
if (from.Account is not Account acct)
{
return;
}
@ -217,7 +217,7 @@ namespace Server.Misc
private static void EventSink_DeleteRequest(NetState state, int index)
{
if (!(state.Account is Account acct))
if (state.Account is not Account acct)
{
state.Disconnect("Attempted to delete a character but the account could not be found.");
return;
@ -349,7 +349,7 @@ namespace Server.Misc
e.Accepted = false;
if (!(Accounts.GetAccount(un) is Account acct))
if (Accounts.GetAccount(un) is not Account acct)
{
// To prevent someone from making an account of just '' or a bunch of meaningless spaces
if (AutoAccountCreation && un.Trim().Length > 0)

View file

@ -37,7 +37,7 @@ namespace Server
protected override void OnTarget(Mobile from, object targeted)
{
if (!(targeted is IPoint3D p))
if (targeted is not IPoint3D p)
{
return;
}

View file

@ -24,7 +24,7 @@ namespace Server.Commands
foreach (var item in World.Items.Values)
{
if ((item is Static || item is BaseFloor || item is BaseWall)
if (item is Static or BaseFloor or BaseWall
&& item.RootParent == null)
{
w.WriteLine("SECTION WORLDITEM {0}", count);

View file

@ -347,9 +347,7 @@ namespace Server.Commands.Generic
{
var result = Properties.IncreaseValue(e.Mobile, obj, e.Arguments);
if (result == "The property has been increased." || result == "The properties have been increased." ||
result == "The property has been decreased." || result == "The properties have been decreased." ||
result == "The properties have been changed.")
if (result is "The property has been increased." or "The properties have been increased." or "The property has been decreased." or "The properties have been decreased." or "The properties have been changed.")
{
AddResponse(result);
}
@ -556,7 +554,7 @@ namespace Server.Commands.Generic
public override void Execute(CommandEventArgs e, object obj)
{
if (!(obj is IPoint3D p))
if (obj is not IPoint3D p)
{
return;
}
@ -588,7 +586,7 @@ namespace Server.Commands.Generic
public override void Execute(CommandEventArgs e, object obj)
{
if (!(obj is IPoint3D p))
if (obj is not IPoint3D p)
{
return;
}
@ -787,8 +785,7 @@ namespace Server.Commands.Generic
{
var result = Properties.GetValue(e.Mobile, obj, e.GetString(i));
if (result == "Property not found." || result == "Property is write only." ||
result.StartsWithOrdinal("Getting this property"))
if (result is "Property not found." or "Property is write only." || result.StartsWithOrdinal("Getting this property"))
{
LogFailure(result);
}
@ -1285,7 +1282,7 @@ namespace Server.Commands.Generic
public override void Execute(CommandEventArgs e, object obj)
{
if (!(obj is Item item))
if (obj is not Item item)
{
return;
}

View file

@ -35,7 +35,7 @@ namespace Server.Commands.Generic
{
house = null;
if (item == null || item is BaseMulti || item is HouseSign || staticsOnly && !(item is Static))
if (item is null or BaseMulti or HouseSign || staticsOnly && item is not Static)
{
return DesignInsertResult.InvalidItem;
}

View file

@ -325,7 +325,7 @@ namespace Server.Commands.Generic
throw new InvalidOperationException("Invalid string comparison operator.");
}
if (m_Operator == StringOperator.Equal || m_Operator == StringOperator.NotEqual)
if (m_Operator is StringOperator.Equal or StringOperator.NotEqual)
{
emitter.BeginCall(
type.GetMethod(

View file

@ -44,7 +44,7 @@ namespace Server.Commands.Generic
return; // sanity check
}
if (!(targeted is Container cont))
if (targeted is not Container cont)
{
from.SendMessage("That is not a container.");
return;

View file

@ -46,7 +46,7 @@ namespace Server.Commands.Generic
{
case ObjectTypes.Both:
{
if (!(targeted is Item || targeted is Mobile))
if (!(targeted is Item or Mobile))
{
from.SendMessage("This command does not work on that.");
return;
@ -56,7 +56,7 @@ namespace Server.Commands.Generic
}
case ObjectTypes.Items:
{
if (!(targeted is Item))
if (targeted is not Item)
{
from.SendMessage("This command only works on items.");
return;
@ -66,7 +66,7 @@ namespace Server.Commands.Generic
}
case ObjectTypes.Mobiles:
{
if (!(targeted is Mobile))
if (targeted is not Mobile)
{
from.SendMessage("This command only works on mobiles.");
return;

View file

@ -52,7 +52,7 @@ namespace Server.Commands.Generic
{
case ObjectTypes.Items:
{
if (!(obj is Item))
if (obj is not Item)
{
e.Mobile.SendMessage("This command only works on items.");
return;
@ -62,7 +62,7 @@ namespace Server.Commands.Generic
}
case ObjectTypes.Mobiles:
{
if (!(obj is Mobile))
if (obj is not Mobile)
{
e.Mobile.SendMessage("This command only works on mobiles.");
return;

View file

@ -68,7 +68,7 @@ namespace Server.Commands.Generic
{
case ObjectTypes.Both:
{
if (!(targeted is Item) && !(targeted is Mobile))
if (targeted is not Item && targeted is not Mobile)
{
from.SendMessage("This command does not work on that.");
return;
@ -78,7 +78,7 @@ namespace Server.Commands.Generic
}
case ObjectTypes.Items:
{
if (!(targeted is Item))
if (targeted is not Item)
{
from.SendMessage("This command only works on items.");
return;
@ -88,7 +88,7 @@ namespace Server.Commands.Generic
}
case ObjectTypes.Mobiles:
{
if (!(targeted is Mobile))
if (targeted is not Mobile)
{
from.SendMessage("This command only works on mobiles.");
return;

View file

@ -566,7 +566,7 @@ namespace Server.Commands
{
map = Map.AllMaps[i];
if (map.MapIndex == 0x7F || map.MapIndex == 0xFF)
if (map.MapIndex is 0x7F or 0xFF)
{
continue;
}
@ -595,7 +595,7 @@ namespace Server.Commands
{
map = Map.AllMaps[i];
if (map.MapIndex == 0x7F || map.MapIndex == 0xFF || from.Map == map)
if (map.MapIndex is 0x7F or 0xFF || from.Map == map)
{
continue;
}
@ -629,7 +629,7 @@ namespace Server.Commands
from.SendMessage("Region name not found");
}
else if (e.Length == 2 || e.Length == 3)
else if (e.Length is 2 or 3)
{
var map = from.Map;

View file

@ -76,7 +76,7 @@ namespace Server.Commands
continue;
}
if (usage == null || !(attrs[0] is DescriptionAttribute desc))
if (usage == null || attrs[0] is not DescriptionAttribute desc)
{
continue;
}

View file

@ -23,14 +23,14 @@ namespace Server.Commands
public override void Execute(CommandEventArgs e, object obj)
{
if (!(obj is IPoint3D point))
if (obj is not IPoint3D point)
{
LogFailure("That cannot be located.");
return;
}
var label = $"(x:{point.X}, y:{point.Y}, z:{point.Z})";
if (obj is LandTarget || obj is StaticTarget)
if (obj is LandTarget or StaticTarget)
{
List<int> graphics;
if (e.Arguments.Length == 0)

View file

@ -73,7 +73,7 @@ namespace Server.Commands
var path = Core.BaseDirectory;
var name = !(from.Account is Account acct) ? from.Name : acct.Username;
var name = from.Account is not Account acct ? from.Name : acct.Username;
AppendPath(ref path, "Logs");
AppendPath(ref path, "Commands");

View file

@ -1107,7 +1107,7 @@ namespace Server.Commands
}
}
}
else if (srcItem is Teleporter || srcItem is FillableContainer || srcItem is BaseBook)
else if (srcItem is Teleporter or FillableContainer or BaseBook)
{
eable = map.GetItemsInRange(new Point3D(x, y, z), 0);

View file

@ -1103,7 +1103,7 @@ namespace Server.Commands
}
}
}
else if (srcItem is Teleporter || srcItem is FillableContainer || srcItem is BaseBook)
else if (srcItem is Teleporter or FillableContainer or BaseBook)
{
eable = map.GetItemsInRange(new Point3D(x, y, z), 0);

View file

@ -124,7 +124,7 @@ namespace Server.Commands
var count = 0;
foreach (var item in eable)
{
if (!(item is KeywordTeleporter || item is SkillTeleporter) && IsWithinZ(item.Z - worldLocation.Z))
if (!(item is KeywordTeleporter or SkillTeleporter) && IsWithinZ(item.Z - worldLocation.Z))
{
count++;
item.Delete();

View file

@ -263,7 +263,7 @@ namespace Server.Commands
{
var obj = realProps[i].GetValue(realObjs[i], null);
if (!(obj is IConvertible))
if (obj is not IConvertible)
{
return "Property is not IConvertable.";
}

View file

@ -168,7 +168,7 @@ namespace Server
continue;
}
if (item is Static || item is BaseFloor || item is BaseWall)
if (item is Static or BaseFloor or BaseWall)
{
var itemMap = item.Map;
@ -212,7 +212,7 @@ namespace Server
foreach (var item in eable)
{
if (item is Static || item is BaseFloor || item is BaseWall)
if (item is Static or BaseFloor or BaseWall)
{
var itemMap = item.Map;
@ -306,7 +306,7 @@ namespace Server
var xOffset = item.X - state.m_X * 8;
var yOffset = item.Y - state.m_Y * 8;
if (xOffset < 0 || xOffset >= 8 || yOffset < 0 || yOffset >= 8)
if (xOffset is < 0 or >= 8 || yOffset is < 0 or >= 8)
{
continue;
}

View file

@ -85,7 +85,7 @@ namespace Server.Commands
foreach (var obj in eable)
{
if (items && obj is Item && !(obj is BaseMulti || obj is HouseSign))
if (items && obj is Item && !(obj is BaseMulti or HouseSign))
{
toDelete.Add(obj);
}

View file

@ -709,7 +709,7 @@ namespace Server.Engines.BulkOrders
var price = Utility.ToInt32(text);
if (price < 0 || price > 250000000)
if (price is < 0 or > 250000000)
{
from.SendLocalizedMessage(1062390); // The price you requested is outrageous!
}

View file

@ -46,7 +46,7 @@ namespace Server.Engines.BulkOrders
return;
}
if (!(m_Book.RootParent is PlayerVendor pv))
if (m_Book.RootParent is not PlayerVendor pv)
{
m_From.SendLocalizedMessage(1062382); // The deed selected is not available.
return;

View file

@ -533,7 +533,7 @@ namespace Server.Engines.BulkOrders
private static Item CreatePowerScroll(int type)
{
if (type == 5 || type == 10 || type == 15 || type == 20)
if (type is 5 or 10 or 15 or 20)
{
return new PowerScroll(SkillName.Blacksmith, 100 + type);
}
@ -545,7 +545,7 @@ namespace Server.Engines.BulkOrders
private static Item CreateAncientHammer(int type)
{
if (type == 10 || type == 15 || type == 30 || type == 60)
if (type is 10 or 15 or 30 or 60)
{
return new AncientSmithyHammer(type);
}
@ -848,7 +848,7 @@ namespace Server.Engines.BulkOrders
private static Item CreatePowerScroll(int type)
{
if (type == 5 || type == 10 || type == 15 || type == 20)
if (type is 5 or 10 or 15 or 20)
{
return new PowerScroll(SkillName.Tailoring, 100 + type);
}

View file

@ -132,7 +132,7 @@ namespace Server.Engines.BulkOrders
from.SendLocalizedMessage(1045166);
}
else if (Type == null || objectType != Type && !objectType.IsSubclassOf(Type) ||
!(item is BaseWeapon) && !(item is BaseArmor) && !(item is BaseClothing))
item is not BaseWeapon && item is not BaseArmor && item is not BaseClothing)
{
from.SendLocalizedMessage(1045169); // The item is not in the request.
}

View file

@ -186,7 +186,7 @@ namespace Server.Engines.ConPVP
if (info.IsSwitched(1))
{
if (!(m_Challenged is PlayerMobile pm))
if (m_Challenged is not PlayerMobile pm)
{
return;
}

View file

@ -99,7 +99,7 @@ namespace Server.Engines.ConPVP
public static bool IsFreeConsume(Mobile mob)
{
if (!(mob is PlayerMobile pm) || pm.DuelContext?.m_EventGame == null)
if (mob is not PlayerMobile pm || pm.DuelContext?.m_EventGame == null)
{
return false;
}
@ -257,7 +257,7 @@ namespace Server.Engines.ConPVP
public static bool AllowSpecialAbility(Mobile from, string name, bool message)
{
if (!(from is PlayerMobile pm))
if (from is not PlayerMobile pm)
{
return true;
}
@ -345,7 +345,7 @@ namespace Server.Engines.ConPVP
return false;
}
if (!(weapon is BaseRanged) && !Ruleset.GetOption("Weapons", "Melee"))
if (weapon is not BaseRanged && !Ruleset.GetOption("Weapons", "Melee"))
{
return false;
}
@ -411,7 +411,7 @@ namespace Server.Engines.ConPVP
return true;
}
if (!(item is BaseRefreshPotion))
if (item is not BaseRefreshPotion)
{
if (CantDoAnything(from))
{
@ -513,7 +513,7 @@ namespace Server.Engines.ConPVP
return false;
}
if (item is BasePotion && !(item is BaseExplosionPotion) && !(item is BaseRefreshPotion) && IsSuddenDeath)
if (item is BasePotion && item is not BaseExplosionPotion && item is not BaseRefreshPotion && IsSuddenDeath)
{
from.SendMessage(0x22, "You may not drink potions in sudden death.");
return false;
@ -655,7 +655,7 @@ namespace Server.Engines.ConPVP
public void Requip(Mobile from, Container cont)
{
if (!(cont is Corpse corpse))
if (cont is not Corpse corpse)
{
return;
}
@ -670,7 +670,7 @@ namespace Server.Engines.ConPVP
{
var item = items[i];
if (item.Layer == Layer.Hair || item.Layer == Layer.FacialHair || !item.Movable)
if (item.Layer is Layer.Hair or Layer.FacialHair || !item.Movable)
{
continue;
}
@ -1295,7 +1295,7 @@ namespace Server.Engines.ConPVP
private static void EventSink_Login(Mobile m)
{
if (!(m is PlayerMobile pm))
if (m is not PlayerMobile pm)
{
return;
}
@ -1385,7 +1385,7 @@ namespace Server.Engines.ConPVP
return;
}
if (!(e.Mobile is PlayerMobile pm))
if (e.Mobile is not PlayerMobile pm)
{
return;
}
@ -2048,7 +2048,7 @@ namespace Server.Engines.ConPVP
int number = item switch
{
BaseWeapon _ => 1062001, // You can no longer wield your ~1_WEAPON~
_ when !(item is BaseShield) && (item is BaseArmor || item is BaseClothing) => 1062002, // You can no longer wear your ~1_ARMOR~
not BaseShield when item is BaseArmor or BaseClothing => 1062002, // You can no longer wear your ~1_ARMOR~
_ => 1062003 // You can no longer equip your ~1_SHIELD~
};
@ -2403,7 +2403,7 @@ namespace Server.Engines.ConPVP
m_GateFacet = Initiator.Map;
}
if (!(arena.Teleporter is ExitTeleporter tp))
if (arena.Teleporter is not ExitTeleporter tp)
{
arena.Teleporter = tp = new ExitTeleporter();
tp.MoveToWorld(arena.GateOut == Point3D.Zero ? arena.Outside : arena.GateOut, arena.Facet);

View file

@ -210,7 +210,7 @@ namespace Server.Engines.ConPVP
return false;
}
if (!(obj is IPoint3D))
if (obj is not IPoint3D)
{
return false;
}
@ -1680,7 +1680,7 @@ namespace Server.Engines.ConPVP
public int GetTeamID(Mobile mob)
{
if (!(mob is PlayerMobile pm))
if (mob is not PlayerMobile pm)
{
return mob is BaseCreature creature ? creature.Team - 1 : -1;
}

View file

@ -953,7 +953,7 @@ namespace Server.Engines.ConPVP
public int GetTeamID(Mobile mob)
{
if (!(mob is PlayerMobile pm))
if (mob is not PlayerMobile pm)
{
return -1;
}

View file

@ -553,7 +553,7 @@ namespace Server.Engines.ConPVP
public int GetTeamID(Mobile mob)
{
if (!(mob is PlayerMobile pm))
if (mob is not PlayerMobile pm)
{
return -1;
}

View file

@ -924,7 +924,7 @@ namespace Server.Engines.ConPVP
public int GetTeamID(Mobile mob)
{
if (!(mob is PlayerMobile pm))
if (mob is not PlayerMobile pm)
{
return mob is BaseCreature creature ? creature.Team - 1 : -1;
}

View file

@ -318,7 +318,7 @@ namespace Server.Engines.ConPVP
if (info.IsSwitched(1))
{
if (!(mob is PlayerMobile pm))
if (mob is not PlayerMobile pm)
{
return;
}

View file

@ -565,7 +565,7 @@ namespace Server.Engines.ConPVP
private void AddPlayer_OnTarget(Mobile from, object obj)
{
if (!(obj is Mobile mob) || mob == from)
if (obj is not Mobile mob || mob == from)
{
m_From.SendGump(new ConfirmSignupGump(m_From, m_Registrar, m_Tournament, m_Players));
@ -604,7 +604,7 @@ namespace Server.Engines.ConPVP
}
else
{
if (!(mob is PlayerMobile pm))
if (mob is not PlayerMobile pm)
{
return;
}

View file

@ -217,7 +217,7 @@ namespace Server.Engines.ConPVP
return;
}
if (!(targeted is Mobile mob))
if (targeted is not Mobile mob)
{
from.SendMessage("That is not a player.");
}
@ -238,7 +238,7 @@ namespace Server.Engines.ConPVP
}
else
{
if (!(mob is PlayerMobile pm))
if (mob is not PlayerMobile pm)
{
return;
}

View file

@ -211,7 +211,7 @@ namespace Server.Engines.ConPVP
{
case 1: // okay
{
if (!(m_From is PlayerMobile pm))
if (m_From is not PlayerMobile pm)
{
break;
}

View file

@ -306,7 +306,7 @@ namespace Server.Engines.ConPVP
}
case TourneyBracketGumpType.Participant_Info:
{
if (!(obj is TourneyParticipant part))
if (obj is not TourneyParticipant part)
{
break;
}
@ -380,7 +380,7 @@ namespace Server.Engines.ConPVP
AddLeftArrow(25, 11, ToButtonID(0, 3));
AddHtml(25, 35, 250, 20, Center("Participants"));
if (!(obj is Mobile mob))
if (obj is not Mobile mob)
{
break;
}
@ -428,7 +428,7 @@ namespace Server.Engines.ConPVP
AddLeftArrow(25, 11, ToButtonID(0, 2));
AddHtml(25, 35, 250, 20, Center("Rounds"));
if (!(m_Object is PyramidLevel level))
if (m_Object is not PyramidLevel level)
{
break;
}
@ -490,9 +490,7 @@ namespace Server.Engines.ConPVP
}
}
else if (m_Tournament.EventController != null ||
m_Tournament.TourneyType == TourneyType.RandomTeam ||
m_Tournament.TourneyType == TourneyType.RedVsBlue ||
m_Tournament.TourneyType == TourneyType.Faction)
m_Tournament.TourneyType is TourneyType.RandomTeam or TourneyType.RedVsBlue or TourneyType.Faction)
{
for (var j = 0; j < match.Participants.Count; ++j)
{
@ -572,7 +570,7 @@ namespace Server.Engines.ConPVP
}
case TourneyBracketGumpType.Match_Info:
{
if (!(obj is TourneyMatch match))
if (obj is not TourneyMatch match)
{
break;
}
@ -605,9 +603,7 @@ namespace Server.Engines.ConPVP
}
}
else if (m_Tournament.EventController != null ||
m_Tournament.TourneyType == TourneyType.RandomTeam ||
m_Tournament.TourneyType == TourneyType.RedVsBlue ||
m_Tournament.TourneyType == TourneyType.Faction)
m_Tournament.TourneyType is TourneyType.RandomTeam or TourneyType.RedVsBlue or TourneyType.Faction)
{
for (var i = 0; i < match.Participants.Count; ++i)
{
@ -840,7 +836,7 @@ namespace Server.Engines.ConPVP
}
case 5:
{
if (!(m_Object is TourneyMatch match))
if (m_Object is not TourneyMatch match)
{
break;
}
@ -990,7 +986,7 @@ namespace Server.Engines.ConPVP
break;
}
if (!(m_Object is PyramidLevel level))
if (m_Object is not PyramidLevel level)
{
break;
}

View file

@ -211,7 +211,7 @@ namespace Server.Engines.ConPVP
{
var x = ourLevel - theirLevel;
if (x < -6 || x > +6)
if (x is < -6 or > +6)
{
return 0;
}

View file

@ -16,7 +16,7 @@ namespace Server.Engines.ConPVP
{
var copy = new List<TourneyParticipant>(participants);
if (groupType == GroupingType.Nearest || groupType == GroupingType.HighVsLow)
if (groupType is GroupingType.Nearest or GroupingType.HighVsLow)
{
copy.Sort();
}

View file

@ -483,7 +483,7 @@ namespace Server.Engines.Craft
for (var j = 0; j < items[i].Length; ++j)
{
if (!(items[i][j] is IHasQuantity hq))
if (items[i][j] is not IHasQuantity hq)
{
totals[i] += items[i][j].Amount;
}
@ -512,7 +512,7 @@ namespace Server.Engines.Craft
{
var item = items[i][j];
if (!(item is IHasQuantity hq))
if (item is not IHasQuantity hq)
{
var theirAmount = item.Amount;
@ -561,7 +561,7 @@ namespace Server.Engines.Craft
for (var i = 0; i < items.Length; ++i)
{
if (!(items[i] is IHasQuantity hq))
if (items[i] is not IHasQuantity hq)
{
amount += items[i].Amount;
}

View file

@ -35,7 +35,7 @@ namespace Server.Engines.Craft
return EnhanceResult.NotInBackpack;
}
if (!(item is BaseArmor) && !(item is BaseWeapon))
if (item is not BaseArmor && item is not BaseWeapon)
{
return EnhanceResult.BadItem;
}

View file

@ -90,11 +90,7 @@ namespace Server.Engines.Craft
if (m_CraftSystem is DefTailoring)
{
return clothing is BearMask
|| clothing is DeerMask
|| clothing is TheMostKnowledgePerson
|| clothing is TheRobeOfBritanniaAri
|| clothing is EmbroideredOakLeafCloak;
return clothing is BearMask or DeerMask or TheMostKnowledgePerson or TheRobeOfBritanniaAri or EmbroideredOakLeafCloak;
}
return false;
@ -106,44 +102,23 @@ namespace Server.Engines.Craft
if (m_CraftSystem is DefTinkering)
{
return weapon is Cleaver
|| weapon is Hatchet
|| weapon is Pickaxe
|| weapon is ButcherKnife
|| weapon is SkinningKnife;
return weapon is Cleaver or Hatchet or Pickaxe or ButcherKnife or SkinningKnife;
}
if (m_CraftSystem is DefCarpentry)
{
return weapon is Club
|| weapon is BlackStaff
|| weapon is MagicWand
// TODO: Make these items craftable
|| weapon is WildStaff;
return weapon is Club or BlackStaff or MagicWand or WildStaff;
}
if (m_CraftSystem is DefBlacksmithy)
{
return weapon is Pitchfork
// TODO: Make these items craftable
|| weapon is RadiantScimitar
|| weapon is WarCleaver
|| weapon is ElvenSpellblade
|| weapon is AssassinSpike
|| weapon is Leafblade
|| weapon is RuneBlade
|| weapon is ElvenMachete
|| weapon is OrnateAxe
|| weapon is DiamondMace;
return weapon is Pitchfork or RadiantScimitar or WarCleaver or ElvenSpellblade or AssassinSpike or Leafblade or RuneBlade or ElvenMachete or OrnateAxe or DiamondMace;
}
// TODO: Make these items craftable
if (m_CraftSystem is DefBowFletching)
{
return weapon is ElvenCompositeLongbow
|| weapon is MagicalShortbow;
return weapon is ElvenCompositeLongbow or MagicalShortbow;
}
return false;
@ -156,36 +131,17 @@ namespace Server.Engines.Craft
// TODO: Make these items craftable
if (m_CraftSystem is DefTailoring)
{
return armor is LeafTonlet
|| armor is LeafArms
|| armor is LeafChest
|| armor is LeafGloves
|| armor is LeafGorget
|| armor is LeafLegs
|| armor is HideChest
|| armor is HideGloves
|| armor is HideGorget
|| armor is HidePants
|| armor is HidePauldrons;
return armor is LeafTonlet or LeafArms or LeafChest or LeafGloves or LeafGorget or LeafLegs or HideChest or HideGloves or HideGorget or HidePants or HidePauldrons;
}
if (m_CraftSystem is DefCarpentry)
{
return armor is WingedHelm
|| armor is RavenHelm
|| armor is VultureHelm
|| armor is WoodlandArms
|| armor is WoodlandChest
|| armor is WoodlandGloves
|| armor is WoodlandGorget
|| armor is WoodlandLegs;
return armor is WingedHelm or RavenHelm or VultureHelm or WoodlandArms or WoodlandChest or WoodlandGloves or WoodlandGorget or WoodlandLegs;
}
if (m_CraftSystem is DefBlacksmithy)
{
return armor is Circlet
|| armor is RoyalCirclet
|| armor is GemmedCirclet;
return armor is Circlet or RoyalCirclet or GemmedCirclet;
}
return false;
@ -448,7 +404,7 @@ namespace Server.Engines.Craft
}
if (m_CraftSystem.CraftItems.SearchForSubclass(clothing.GetType()) == null &&
!IsSpecialClothing(clothing) && !(clothing is TribalMask || clothing is HornedTribalMask))
!IsSpecialClothing(clothing) && !(clothing is TribalMask or HornedTribalMask))
{
number = usingDeed
? 1061136

View file

@ -87,7 +87,7 @@ namespace Server.Engines.Craft
int index;
// Other Items
if (Core.Expansion == Expansion.AOS || Core.Expansion == Expansion.SE)
if (Core.Expansion is Expansion.AOS or Expansion.SE)
{
index = AddCraft(typeof(Board), 1044294, 1027127, 0.0, 0.0, typeof(Log), 1044466, 1, 1044465);
SetUseAllRes(index, true);

View file

@ -235,7 +235,7 @@ namespace Server.Engines.Doom
_ => new MushroomTrap()
};
if (trap is FireColumnTrap || trap is MushroomTrap)
if (trap is FireColumnTrap or MushroomTrap)
{
trap.Hue = 0x451;
}

View file

@ -31,7 +31,7 @@ namespace Server.Engines.Doom
public override void OnEnter(Mobile m)
{
if (m == null || m is WandererOfTheVoid)
if (m is null or WandererOfTheVoid)
{
return;
}

View file

@ -160,7 +160,7 @@ namespace Server.Ethics
foreach (var item in eable)
{
if (item is AnkhNorth || item is AnkhWest)
if (item is AnkhNorth or AnkhWest)
{
found = true;
break;

View file

@ -29,7 +29,7 @@ namespace Server.Ethics.Evil
{
var fac = Faction.Find(mob);
return fac is Minax || fac is Shadowlords;
return fac is Minax or Shadowlords;
}
}
}

View file

@ -23,7 +23,7 @@ namespace Server.Ethics.Evil
private void Power_OnTarget(Mobile fromMobile, object obj, Player from)
{
if (!(obj is IPoint3D p))
if (obj is not IPoint3D p)
{
return;
}

View file

@ -22,7 +22,7 @@ namespace Server.Ethics.Evil
private void Power_OnTarget(Mobile fromMobile, object obj, Player from)
{
if (!(obj is Item item))
if (obj is not Item item)
{
from.Mobile.LocalOverheadMessage(MessageType.Regular, 0x3B2, false, "You may not imbue that.");
return;
@ -45,7 +45,7 @@ namespace Server.Ethics.Evil
return;
}
var canImbue = (item is Spellbook || item is BaseClothing || item is BaseArmor || item is BaseWeapon) &&
var canImbue = item is Spellbook or BaseClothing or BaseArmor or BaseWeapon &&
item.Name == null;
if (canImbue)

View file

@ -34,7 +34,7 @@ namespace Server.Ethics.Hero
var fac = Faction.Find(mob);
return fac is TrueBritannians || fac is CouncilOfMages;
return fac is TrueBritannians or CouncilOfMages;
}
}
}

View file

@ -23,7 +23,7 @@ namespace Server.Ethics.Hero
private void Power_OnTarget(Mobile fromMobile, object obj, Player from)
{
if (!(obj is IPoint3D p))
if (obj is not IPoint3D p)
{
return;
}

View file

@ -22,7 +22,7 @@ namespace Server.Ethics.Hero
private void Power_OnTarget(Mobile fromMobile, object obj, Player from)
{
if (!(obj is Item item))
if (obj is not Item item)
{
from.Mobile.LocalOverheadMessage(MessageType.Regular, 0x3B2, false, "You may not imbue that.");
return;
@ -45,7 +45,7 @@ namespace Server.Ethics.Hero
return;
}
var canImbue = (item is Spellbook || item is BaseClothing || item is BaseArmor || item is BaseWeapon) &&
var canImbue = item is Spellbook or BaseClothing or BaseArmor or BaseWeapon &&
item.Name == null;
if (canImbue)

View file

@ -502,7 +502,7 @@ namespace Server.Factions
public static bool IsFactionBanned(Mobile mob)
{
if (!(mob.Account is Account acct))
if (mob.Account is not Account acct)
{
return false;
}
@ -512,7 +512,7 @@ namespace Server.Factions
public void OnJoinAccepted(Mobile mob)
{
if (!(mob is PlayerMobile pm))
if (mob is not PlayerMobile pm)
{
return; // sanity
}
@ -571,7 +571,7 @@ namespace Server.Factions
for (var i = 0; i < members.Count; ++i)
{
if (!(members[i] is PlayerMobile member))
if (members[i] is not PlayerMobile member)
{
continue;
}
@ -767,7 +767,7 @@ namespace Server.Factions
foreach (var item in World.Items.Values)
{
if (item is IFactionItem && !(item is HoodedShroudOfShadows))
if (item is IFactionItem && item is not HoodedShroudOfShadows)
{
items.Add(item);
}

View file

@ -129,7 +129,7 @@ namespace Server.Factions
public static Item Imbue(Item item, Faction faction, bool expire, int hue)
{
if (!(item is IFactionItem))
if (item is not IFactionItem)
{
return item;
}

View file

@ -50,7 +50,7 @@ namespace Server.Factions
{
case 1: // continue
{
if (!(m_From.Guild is Guild guild))
if (m_From.Guild is not Guild guild)
{
var pl = PlayerState.Find(m_From);

View file

@ -32,7 +32,7 @@ namespace Server
TargetFlags.None,
(from, obj, stormsEye) =>
{
if (!stormsEye.Movable || stormsEye.Deleted || !(obj is IPoint3D pt))
if (!stormsEye.Movable || stormsEye.Deleted || obj is not IPoint3D pt)
{
return;
}

View file

@ -156,7 +156,7 @@ namespace Server.Factions
return false;
}
if (m_Guard.Weapon is Item weapon && weapon.Parent == m_Guard && !(weapon is Fists))
if (m_Guard.Weapon is Item weapon && weapon.Parent == m_Guard && weapon is not Fists)
{
pack.DropItem(weapon);
return true;

View file

@ -25,13 +25,12 @@ namespace Server.Engines.Harvest
var itemID = target.ItemID;
// grave
if (itemID == 0xED3 || itemID == 0xEDF || itemID == 0xEE0 || itemID == 0xEE1 || itemID == 0xEE2 ||
itemID == 0xEE8)
if (itemID is 0xED3 or 0xEDF or 0xEE0 or 0xEE1 or 0xEE2 or 0xEE8)
{
if (from is PlayerMobile player)
{
var qs = player.Quest;
if (!(qs is WitchApprenticeQuest))
if (qs is not WitchApprenticeQuest)
{
return;
}

View file

@ -350,7 +350,7 @@ namespace Server.Engines.Harvest
public override bool Give(Mobile m, Item item, bool placeAtFeet)
{
if (item is TreasureMap || item is MessageInABottle || item is SpecialFishingNet)
if (item is TreasureMap or MessageInABottle or SpecialFishingNet)
{
BaseCreature serp;
@ -395,7 +395,7 @@ namespace Server.Engines.Harvest
return true; // we don't want to give the item to the player, it's on the serpent
}
return base.Give(m, item, placeAtFeet || item is BigFish || item is WoodenChest || item is MetalGoldenChest);
return base.Give(m, item, placeAtFeet || item is BigFish or WoodenChest or MetalGoldenChest);
}
public override void SendSuccessTo(Mobile from, Item item, HarvestResource resource)
@ -405,7 +405,7 @@ namespace Server.Engines.Harvest
from.SendLocalizedMessage(1042635); // Your fishing pole bends as you pull a big fish from the depths!
fish.Fisher = from;
}
else if (item is WoodenChest || item is MetalGoldenChest)
else if (item is WoodenChest or MetalGoldenChest)
{
from.SendLocalizedMessage(503175); // You pull up a heavy chest from the depths of the ocean!
}

View file

@ -169,7 +169,7 @@ namespace Server.Engines.Harvest
{
item.LabelTo(from, 500464); // Use this on corpses to carve away meat and hide
}
else if (toHarvest is StaticTarget || toHarvest is LandTarget)
else if (toHarvest is StaticTarget or LandTarget)
{
from.SendLocalizedMessage(500489); // You can't use an axe on that.
}

View file

@ -225,21 +225,21 @@ namespace Server.Engines.Help
* Use this option when another player is verbally harassing your character.
* Verbal harassment behaviors include but are not limited to, using bad language, threats etc..
* Before you submit a complaint be sure you understand what constitutes harassment
* <A HREF="http://uo.custhelp.com/cgi-bin/uo.cfg/php/enduser/std_adp.php?p_faqid=40"><EFBFBD> what is verbal harassment? -</A>
* <A HREF="http://uo.custhelp.com/cgi-bin/uo.cfg/php/enduser/std_adp.php?p_faqid=40">- what is verbal harassment? -</A>
* and that you have followed these steps:<BR>
* 1. You have asked the player to stop and they have continued.<BR>
* 2. You have tried to remove yourself from the situation.<BR>
* 3. You have done nothing to instigate or further encourage the harassment.<BR>
* 4. You have added the player to your ignore list.
* <A HREF="http://uo.custhelp.com/cgi-bin/uo.cfg/php/enduser/std_adp.php?p_faqid=138">- How do I ignore a player?</A><BR>
* 5. You have read and understand Origin<EFBFBD>s definition of harassment.<BR>
* 5. You have read and understand Origin's definition of harassment.<BR>
* 6. Your account information is up to date. (Including a current email address)<BR>
* *If these steps have not been taken, GMs may be unable to take action against the offending player.<BR>
* **A chat log will be review by a GM to assess the validity of this complaint.
* Abuse of this system is a violation of the Rules of Conduct.<BR>
* EXPLOITING<BR>
* Use this option to report someone who may be exploiting or cheating.
* <A HREF="http://uo.custhelp.com/cgi-bin/uo.cfg/php/enduser/std_adp.php?p_faqid=41"><EFBFBD> What constitutes an exploit?</a>
* <A HREF="http://uo.custhelp.com/cgi-bin/uo.cfg/php/enduser/std_adp.php?p_faqid=41">- What constitutes an exploit?</a>
*/
AddHtmlLocalized(
110,
@ -259,14 +259,14 @@ namespace Server.Engines.Help
* Use this option when another player is harassing your character using game mechanics.
* Physical harassment includes but is not limited to luring, Kill Stealing, and any act that causes a players death in Trammel.
* Before you submit a complaint be sure you understand what constitutes harassment
* <A HREF="http://uo.custhelp.com/cgi-bin/uo.cfg/php/enduser/std_adp.php?p_faqid=59"> <EFBFBD> what is physical harassment?</A>
* <A HREF="http://uo.custhelp.com/cgi-bin/uo.cfg/php/enduser/std_adp.php?p_faqid=59"> - what is physical harassment?</A>
* and that you have followed these steps:<BR>
* 1. You have asked the player to stop and they have continued.<BR>
* 2. You have tried to remove yourself from the situation.<BR>
* 3. You have done nothing to instigate or further encourage the harassment.<BR>
* 4. You have added the player to your ignore list.
* <A HREF="http://uo.custhelp.com/cgi-bin/uo.cfg/php/enduser/std_adp.php?p_faqid=138"> - how do I ignore a player?</A><BR>
* 5. You have read and understand Origin<EFBFBD>s definition of harassment.<BR>
* 5. You have read and understand Origin's definition of harassment.<BR>
* 6. Your account information is up to date. (Including a current email address)<BR>
* *If these steps have not been taken, GMs may be unable to take action against the offending player.<BR>
* **This issue will be reviewed by a GM to assess the validity of this complaint.

View file

@ -128,7 +128,7 @@ namespace Server.Engines.Help
public static bool CheckAllowedToPage(Mobile from)
{
if (!(from is PlayerMobile pm))
if (from is not PlayerMobile pm)
{
return true;
}

View file

@ -90,7 +90,7 @@ namespace Server.Engines.Help
protected override void OnTarget(Mobile from, object targeted)
{
if (!(targeted is PlayerMobile pm))
if (targeted is not PlayerMobile pm)
{
from.SendMessage("Speech logs aren't supported on that target.");
}

View file

@ -42,8 +42,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
Title = 1075337; // Save His Dad
Description =
1075338; // My father, Andros, is a smith in Minoc. Last week his forge overturned and he was splashed by molten steel. He was horribly burned, and we feared he would die. An alchemist in Vesper promised to make a bandage that could heal him, but he needed the silk of a dread spider. I came here to get some, but I was careless, and succumbed to their poison. Please, won<EFBFBD>t you help my father?
RefusalMessage = 1075340; // Oh . . . that<EFBFBD>s your decision . . . OooOoooOOoo . . .
1075338; // My father, Andros, is a smith in Minoc. Last week his forge overturned and he was splashed by molten steel. He was horribly burned, and we feared he would die. An alchemist in Vesper promised to make a bandage that could heal him, but he needed the silk of a dread spider. I came here to get some, but I was careless, and succumbed to their poison. Please, won't you help my father?
RefusalMessage = 1075340; // Oh . . . that's your decision . . . OooOoooOOoo . . .
InProgressMessage =
1075341; // Thank you! Deliver it to Leon the Alchemist in Vesper. The silk crumbles easily, and much time has already passed since I died. Please! Hurry!
CompletionMessage =
@ -74,20 +74,20 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
OneTimeOnly = true;
Title = 1075343; // A Father<EFBFBD>s Gratitude
Title = 1075343; // A Father's Gratitude
Description =
1075344; // That is simply terrible. First Andros, and now his son. Well, let<EFBFBD>s make sure Frederic<69>s sacrifice wasn<73>t in vain. Will you take the bandages to his father? You can probably deliver them faster than I can, can<EFBFBD>t you?
1075344; // That is simply terrible. First Andros, and now his son. Well, let's make sure Frederic's sacrifice wasn't in vain. Will you take the bandages to his father? You can probably deliver them faster than I can, can't you?
RefusalMessage =
1075346; // Well I<EFBFBD>m sorry to hear you say that. Without your help, I don<6F>t know if I can get these to Andros quickly enough to help him.
1075346; // Well I'm sorry to hear you say that. Without your help, I don't know if I can get these to Andros quickly enough to help him.
InProgressMessage =
1075347; // I don<EFBFBD>t know how much longer Andros will survive. You<6F>d better get this to him as quick as you can. Every second counts!
1075347; // I don't know how much longer Andros will survive. You'd better get this to him as quick as you can. Every second counts!
CompletionMessage =
1075348; // Sorry, I<EFBFBD>m not accepting commissions at the moment. What? You have the bandage I need from Leon? Thank you so much! But why didn<EFBFBD>t my son bring this to me himself? . . . Oh, no! You can't be serious! *sag* My Freddie, my son! Thank you for carrying out his last wish. Here -- I made this for my son, to give to him when he became a journeyman. I want you to have it.
1075348; // Sorry, I'm not accepting commissions at the moment. What? You have the bandage I need from Leon? Thank you so much! But why didn't my son bring this to me himself? . . . Oh, no! You can't be serious! *sag* My Freddie, my son! Thank you for carrying out his last wish. Here -- I made this for my son, to give to him when he became a journeyman. I want you to have it.
CompletionNotice = CompletionNoticeShort;
Objectives.Add(new DeliverObjective(typeof(AlchemistsBandage), 1, "Alchemist's Bandage", typeof(Andros)));
Rewards.Add(new ItemReward(1075345, typeof(AndrosGratitude))); // Andros<EFBFBD> Gratitude
Rewards.Add(new ItemReward(1075345, typeof(AndrosGratitude))); // Andros' Gratitude
}
public override bool IsChainTriggered => true;

View file

@ -230,7 +230,7 @@ namespace Server.Engines.MLQuests.Definitions
// Restless spirits are known to inhabit these parts, taking the lives of unwary travelers.
// It is about time a hero put the dead back in their graves. I'm sure such a hero would be justly rewarded.
Description = 1073566;
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farewell.
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
InProgressMessage = 1073586; // The restless spirts still walk -- you must kill 15 of them.
Objectives.Add(
@ -313,7 +313,7 @@ namespace Server.Engines.MLQuests.Definitions
// Please, put them out of their misery.
// I will offer you what payment I can if you will end the torment of these undead wretches.
Description = 1073565;
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farewell.
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
InProgressMessage = 1073585; // Your task is not done. Continue putting the Skeleton and Bone Knights to rest.
Objectives.Add(
@ -1314,12 +1314,12 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1074280; // Reptilian Dentist
Description =
1074710; // I'm working on a striking necklace -- something really unique -- and I know just what I need to finish it up. A huge fang! Won't that catch the eye? I would like to employ you to find me such an item, perhaps a snake would make the ideal donor. I'll make it worth your while, of course.
// I'm working on a striking necklace -- something really unique -- and I know just what I need to finish it up. A huge fang! Won't that catch the eye? I would like to employ you to find me such an item, perhaps a snake would make the ideal donor. I'll make it worth your while, of course.
Description = 1074710;
RefusalMessage = 1074723; // I understand. I don't like snakes much either. They're so creepy.
InProgressMessage =
1074722; // Those really big snakes like swamps, I've heard. You might try the blighted grove.
CompletionMessage = 1074721; // Do you have it? *gasp* What a tooth! Here <EFBFBD> I must get right to work.
// Those really big snakes like swamps, I've heard. You might try the blighted grove.
InProgressMessage = 1074722;
CompletionMessage = 1074721; // Do you have it? *gasp* What a tooth! Here I must get right to work.
Objectives.Add(new CollectObjective(1, typeof(CoilsFang), "coil's fang"));
@ -1334,8 +1334,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073881; // Stop Harping on Me
Description =
1074071; // Humans artistry can be a remarkable thing. For instance, I have heard of a wonderful instrument which creates the most melodious of music. A lap harp. I would be ever so grateful if I could examine one in person.
// Humans artistry can be a remarkable thing. For instance, I have heard of a wonderful instrument which creates the most melodious of music. A lap harp. I would be ever so grateful if I could examine one in person.
Description = 1074071;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073927; // I will be in your debt if you bring me lap harp.
CompletionMessage = 1073969; // My thanks for your service. Now, I will show you something of elven carpentry.
@ -1353,8 +1353,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073908; // The Far Eye
Description =
1074098; // The wonders of human invention! Turning sand and metal into a far-seeing eye! This is something I must experience for myself. Bring me some of these spyglasses friend human.
// The wonders of human invention! Turning sand and metal into a far-seeing eye! This is something I must experience for myself. Bring me some of these spyglasses friend human.
Description = 1074098;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073954; // I will be in your debt if you bring me spyglasses.
CompletionMessage = 1073978; // Enjoy my thanks for your service.
@ -1372,8 +1372,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073876; // Lethal Darts
Description =
1074066; // We elves are no strangers to archery but I would be interested in learning whether there is anything to learn from the human approach. I would gladly trade you something I have if you could teach me of the deadly crossbow bolt.
// We elves are no strangers to archery but I would be interested in learning whether there is anything to learn from the human approach. I would gladly trade you something I have if you could teach me of the deadly crossbow bolt.
Description = 1074066;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073922; // I will be in your debt if you bring me crossbow bolts.
CompletionMessage = 1073968; // My thanks for your service. Now, I shall teach you of elven archery.
@ -1392,8 +1392,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073877; // A Simple Bow
Description =
1074067; // I wish to try a bow crafted in the human style. Is it possible for you to bring me such a weapon? I would be happy to return this favor.
// I wish to try a bow crafted in the human style. Is it possible for you to bring me such a weapon? I would be happy to return this favor.
Description = 1074067;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073923; // I will be in your debt if you bring me bows.
CompletionMessage = 1073968; // My thanks for your service. Now, I shall teach you of elven archery.
@ -1412,8 +1412,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073878; // Ingenious Archery, Part I
Description =
1074068; // I have heard of a curious type of bow, you call it a "crossbow". It sounds fascinating and I would very much like to examine one closely. Would you be able to obtain such an instrument for me?
// I have heard of a curious type of bow, you call it a "crossbow". It sounds fascinating and I would very much like to examine one closely. Would you be able to obtain such an instrument for me?
Description = 1074068;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073924; // I will be in your debt if you bring me crossbows.
CompletionMessage = 1073968; // My thanks for your service. Now, I shall teach you of elven archery.
@ -1432,8 +1432,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073879; // Ingenious Archery, Part II
Description =
1074069; // These human "crossbows" are complex and clever. The "heavy crossbow" is a remarkable instrument of war. I am interested in seeing one up close, if you could arrange for one to make its way to my hands.
// These human "crossbows" are complex and clever. The "heavy crossbow" is a remarkable instrument of war. I am interested in seeing one up close, if you could arrange for one to make its way to my hands.
Description = 1074069;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073925; // I will be in your debt if you bring me heavy crossbows.
CompletionMessage = 1073968; // My thanks for your service. Now, I shall teach you of elven archery.
@ -1452,8 +1452,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073880; // Ingenious Archery, Part III
Description =
1074070; // My friend, I am in search of a device, a instrument of remarkable human ingenuity. It is a repeating crossbow. If you were to obtain such a device, I would gladly reveal to you some of the secrets of elven craftsmanship.
// My friend, I am in search of a device, a instrument of remarkable human ingenuity. It is a repeating crossbow. If you were to obtain such a device, I would gladly reveal to you some of the secrets of elven craftsmanship.
Description = 1074070;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073926; // I will be in your debt if you bring me repeating crossbows.
CompletionMessage = 1073968; // My thanks for your service. Now, I shall teach you of elven archery.
@ -1471,11 +1471,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1074711; // Scale Armor
Description =
1074712; // Here's what I need ... there are some creatures called hydra, fearsome beasts, whose scales are especially suitable for a new sort of armor that I'm developing. I need a few such pieces and then some supple alligator skin for the backing. I'm going to need a really large piece that's shaped just right ... the tail I think would do nicely. I appreciate your help.
// Here's what I need ... there are some creatures called hydra, fearsome beasts, whose scales are especially suitable for a new sort of armor that I'm developing. I need a few such pieces and then some supple alligator skin for the backing. I'm going to need a really large piece that's shaped just right ... the tail I think would do nicely. I appreciate your help.
Description = 1074712;
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
InProgressMessage =
1074724; // Hydras have been spotted in the Blighted Grove. You won't get those scales without getting your feet wet, I'm afraid.
// Hydras have been spotted in the Blighted Grove. You won't get those scales without getting your feet wet, I'm afraid.
InProgressMessage = 1074724;
CompletionMessage = 1074725; // I can't wait to get to work now that you've returned with my scales.
Objectives.Add(new CollectObjective(1, typeof(ThrashersTail), "Thrasher's Tail"));
@ -1492,8 +1492,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073913; // Cuts Both Ways
Description =
1074103; // What would you say is a typical human instrument of war? Is a broadsword a typical example? I wish to see more of such human weapons, so I would gladly trade elven knowledge for human steel.
// What would you say is a typical human instrument of war? Is a broadsword a typical example? I wish to see more of such human weapons, so I would gladly trade elven knowledge for human steel.
Description = 1074103;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073959; // I will be in your debt if you bring me broadswords.
CompletionMessage = 1073978; // Enjoy my thanks for your service.
@ -1511,8 +1511,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073915; // Dragon Protection
Description =
1074105; // Mankind, I am told, knows how to take the scales of a terrible dragon and forge them into powerful armor. Such a feat of craftsmanship! I would give anything to view such a creation - I would even teach some of the prize secrets of the elven people.
// Mankind, I am told, knows how to take the scales of a terrible dragon and forge them into powerful armor. Such a feat of craftsmanship! I would give anything to view such a creation - I would even teach some of the prize secrets of the elven people.
Description = 1074105;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073961; // I will be in your debt if you bring me dragon armor.
CompletionMessage = 1073978; // Enjoy my thanks for your service.
@ -1530,8 +1530,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073911; // Nothing Fancy
Description =
1074101; // I am curious to see the results of human blacksmithing. To examine the care and quality of a simple item. Perhaps, a simple bascinet helmet? Yes, indeed -- if you could bring to me some bascinet helmets, I would demonstrate my gratitude.
// I am curious to see the results of human blacksmithing. To examine the care and quality of a simple item. Perhaps, a simple bascinet helmet? Yes, indeed -- if you could bring to me some bascinet helmets, I would demonstrate my gratitude.
Description = 1074101;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073957; // I will be in your debt if you bring me bascinets.
CompletionMessage = 1073978; // Enjoy my thanks for your service.
@ -1549,8 +1549,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073912; // The Bulwark
Description =
1074102; // The clank of human iron and steel is strange to elven ears. For instance, the metallic heater shield which human warriors carry into battle. It is odd to an elf, but nevertheless intriguing. Tell me friend, could you bring me such an example of human smithing skill?
// The clank of human iron and steel is strange to elven ears. For instance, the metallic heater shield which human warriors carry into battle. It is odd to an elf, but nevertheless intriguing. Tell me friend, could you bring me such an example of human smithing skill?
Description = 1074102;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073958; // I will be in your debt if you bring me heater shields.
CompletionMessage = 1073978; // Enjoy my thanks for your service.
@ -1568,8 +1568,8 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
HasRestartDelay = true;
Title = 1073882; // Arch Support
Description =
1074072; // How clever humans are - to understand the need of feet to rest from time to time! Imagine creating a special stool just for weary toes. I would like to examine and learn the secret of their making. Would you bring me some foot stools to examine?
// How clever humans are - to understand the need of feet to rest from time to time! Imagine creating a special stool just for weary toes. I would like to examine and learn the secret of their making. Would you bring me some foot stools to examine?
Description = 1074072;
RefusalMessage = 1073921; // I will patiently await your reconsideration.
InProgressMessage = 1073928; // I will be in your debt if you bring me foot stools.
CompletionMessage = 1073969; // My thanks for your service. Now, I will show you something of elven carpentry.
@ -1597,10 +1597,7 @@ namespace Server.Engines.MLQuests.Definitions
3,
new[] { typeof(Succubus) },
"succubi",
new QuestArea(
1074806, // The Palace of Paroxysmus
"The Palace of Paroxysmus"
)
new QuestArea(1074806, "The Palace of Paroxysmus")
)
);
@ -1627,7 +1624,7 @@ namespace Server.Engines.MLQuests.Definitions
"molochs",
new QuestArea(1074806, "The Palace of Paroxysmus")
)
); // The Palace of Paroxysmus
);
Rewards.Add(ItemReward.LargeBagOfTreasure);
}
@ -1652,7 +1649,7 @@ namespace Server.Engines.MLQuests.Definitions
"daemons",
new QuestArea(1074806, "The Palace of Paroxysmus")
)
); // The Palace of Paroxysmus
);
Rewards.Add(ItemReward.LargeBagOfTreasure);
}
@ -1677,7 +1674,7 @@ namespace Server.Engines.MLQuests.Definitions
"arcane daemons",
new QuestArea(1074806, "The Palace of Paroxysmus")
)
); // The Palace of Paroxysmus
);
Rewards.Add(ItemReward.LargeBagOfTreasure);
}
@ -1703,7 +1700,7 @@ namespace Server.Engines.MLQuests.Definitions
"poison elementals",
new QuestArea(1074806, "The Palace of Paroxysmus")
)
); // The Palace of Paroxysmus
);
Objectives.Add(
new KillObjective(
6,
@ -1781,7 +1778,7 @@ namespace Server.Engines.MLQuests.Definitions
"crystal lattice seekers",
new QuestArea(1074805, "The Prism of Light")
)
); // The Prism of Light
);
Rewards.Add(ItemReward.LargeBagOfTreasure);
}
@ -1809,7 +1806,7 @@ namespace Server.Engines.MLQuests.Definitions
"crystal daemons",
new QuestArea(1074805, "The Prism of Light")
)
); // The Prism of Light
);
Rewards.Add(ItemReward.LargeBagOfTreasure);
}
@ -1837,7 +1834,7 @@ namespace Server.Engines.MLQuests.Definitions
"crystal vortices",
new QuestArea(1074805, "The Prism of Light")
)
); // The Prism of Light
);
Rewards.Add(ItemReward.LargeBagOfTreasure);
}
@ -1945,11 +1942,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072913; // Death to the Ninja!
Description =
1072966; // I wish to make a statement of censure against the elite ninjas of the Black Order. Deliver, in the strongest manner, my disdain. But do not make war on women, even those that take arms against you. It is not ... fitting.
// I wish to make a statement of censure against the elite ninjas of the Black Order. Deliver, in the strongest manner, my disdain. But do not make war on women, even those that take arms against you. It is not ... fitting.
Description = 1072966;
RefusalMessage = 1072979; // As you wish.
InProgressMessage =
1072980; // The Black Order's fortress home is well hidden. Legend has it that a humble fishing village disguises the magical portal.
// The Black Order's fortress home is well hidden. Legend has it that a humble fishing village disguises the magical portal.
InProgressMessage = 1072980;
// TODO: Verify that this has to be males only (as per the description)
Objectives.Add(
@ -1959,7 +1956,7 @@ namespace Server.Engines.MLQuests.Definitions
"elite ninjas",
new QuestArea(1074804, "The Citadel")
)
); // The Citadel
);
Rewards.Add(ItemReward.BagOfTreasure);
}
@ -2049,9 +2046,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074186, // Come here, I have a task.
1074183
1074183 // You there! I have a job for you.
)
); // You there! I have a job for you.
);
}
public override void Serialize(IGenericWriter writer)
@ -2116,9 +2113,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074187, // Want a job?
1074210
1074210 // Hi. Looking for something to do?
)
); // Hi.<2E> Looking for something to do?
);
}
public override void Serialize(IGenericWriter writer)
@ -2180,10 +2177,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074213, // Hey buddy.<EFBFBD> Looking for work?
1074187
1074213, // Hey buddy. Looking for work?
1074187 // Want a job?
)
); // Want a job?
);
}
public override void Serialize(IGenericWriter writer)
@ -2247,9 +2244,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074211, // I could use some help.
1074218
1074218 // Hey! I want to talk to you, now.
)
); // Hey!<21> I want to talk to you, now.
);
}
public override void Serialize(IGenericWriter writer)
@ -2314,7 +2311,7 @@ namespace Server.Engines.MLQuests.Definitions
public override void Shout(PlayerMobile pm)
{
MLQuestSystem.Tell(this, pm, 1074223); // Have you done it yet?<EFBFBD> Oh, I haven<65>t told you, have I?
MLQuestSystem.Tell(this, pm, 1074223); // Have you done it yet? Oh, I haven't told you, have I?
}
public override void Serialize(IGenericWriter writer)
@ -2375,9 +2372,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074219, // Hello there, can I have a moment of your time?
1074223
1074223 // Have you done it yet? Oh, I haven't told you, have I?
)
); // Have you done it yet?<3F> Oh, I haven<65>t told you, have I?
);
}
public override void Serialize(IGenericWriter writer)
@ -2446,9 +2443,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074206, // Excuse me please traveler, might I have a little of your time?
1074186
1074186 // Come here, I have a task.
)
); // Come here, I have a task.
);
}
public override void Serialize(IGenericWriter writer)
@ -2508,10 +2505,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074220, // May I call you friend?<EFBFBD> I have a favor to beg of you.
1074222
1074220, // May I call you friend? I have a favor to beg of you.
1074222 // Could I trouble you for some assistance?
)
); // Could I trouble you for some assistance?
);
}
public override void Serialize(IGenericWriter writer)
@ -2585,10 +2582,10 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074188, // Weakling! You are not up to the task I have.
1074191, // Just keep walking away!<EFBFBD> I thought so. Coward!<21> I<>ll bite your legs off!
1074195
1074191, // Just keep walking away! I thought so. Coward! I'll bite your legs off!
1074195 // You there, in the stupid hat! Come here.
)
); // You there, in the stupid hat! Come here.
);
}
public override void Serialize(IGenericWriter writer)
@ -2645,9 +2642,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074212, // *yawn* You busy?
1074210
1074210 // Hi. Looking for something to do?
)
); // Hi.<2E> Looking for something to do?
);
}
public override void Serialize(IGenericWriter writer)
@ -2707,10 +2704,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074204, // Greetings seeker.<EFBFBD> I have an urgent matter for you, if you are willing.
1074201
1074204, // Greetings seeker. I have an urgent matter for you, if you are willing.
1074201 // Waste not a minute! There's work to be done.
)
); // Waste not a minute! There<72>s work to be done.
);
}
public override void Serialize(IGenericWriter writer)
@ -2770,9 +2767,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074211, // I could use some help.
1074186
1074186 // Come here, I have a task.
)
); // Come here, I have a task.
);
}
public override void Serialize(IGenericWriter writer)
@ -2845,9 +2842,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074185, // Hey you! Want to help me out?
1074186
1074186 // Come here, I have a task.
)
); // Come here, I have a task.
);
}
public override void Serialize(IGenericWriter writer)
@ -2927,10 +2924,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074207, // Good day to you friend! Allow me to offer you a fabulous opportunity!<EFBFBD> Thrills and adventure await!
1074209
1074207, // Good day to you friend! Allow me to offer you a fabulous opportunity! Thrills and adventure await!
1074209 // Hey, could you help me out with something?
)
); // Hey, could you help me out with something?
);
}
public override void Serialize(IGenericWriter writer)
@ -2994,10 +2991,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074210, // Hi.<EFBFBD> Looking for something to do?
1074220
1074210, // Hi. Looking for something to do?
1074220 // May I call you friend? I have a favor to beg of you.
)
); // May I call you friend?<3F> I have a favor to beg of you.
);
}
public override void Serialize(IGenericWriter writer)
@ -3126,9 +3123,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074187, // Want a job?
1074222
1074222 // Could I trouble you for some assistance?
)
); // Could I trouble you for some assistance?
);
}
public override void Serialize(IGenericWriter writer)
@ -3194,10 +3191,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074221, // Greetings!<EFBFBD> I have a small task for you good traveler.
1074201
1074221, // Greetings! I have a small task for you good traveler.
1074201 // Waste not a minute! There's work to be done.
)
); // Waste not a minute! There<72>s work to be done.
);
}
public override void Serialize(IGenericWriter writer)
@ -3257,10 +3254,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074200, // Thank goodness you are here, there<EFBFBD>s no time to lose.
1074206
1074200, // Thank goodness you are here, there's no time to lose.
1074206 // Excuse me please traveler, might I have a little of your time?
)
); // Excuse me please traveler, might I have a little of your time?
);
}
public override void Serialize(IGenericWriter writer)
@ -3440,10 +3437,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074210, // Hi.<EFBFBD> Looking for something to do?
1074213
1074210, // Hi. Looking for something to do?
1074213 // Hey buddy. Looking for work?
)
); // Hey buddy.<2E> Looking for work?
);
}
public override void Serialize(IGenericWriter writer)
@ -3502,10 +3499,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074223, // Have you done it yet?<EFBFBD> Oh, I haven<65>t told you, have I?
1074213
1074223, // Have you done it yet?' Oh, I haven't told you, have I?
1074213 // Hey buddy. Looking for work?
)
); // Hey buddy.<2E> Looking for work?
);
}
public override void Serialize(IGenericWriter writer)
@ -3698,10 +3695,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074221, // Greetings!<EFBFBD> I have a small task for you good traveler.
1074212
1074221, // Greetings! I have a small task for you good traveler.
1074212 // *yawn* You busy?
)
); // *yawn* You busy?
);
}
public override void Serialize(IGenericWriter writer)
@ -3762,9 +3759,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074206, // Excuse me please traveler, might I have a little of your time?
1074203
1074203 // Hello friend. I realize you are busy but if you would be willing to render me a service I can assure you that you will be judiciously renumerated.
)
); // Hello friend. I realize you are busy but if you would be willing to render me a service I can assure you that you will be judiciously renumerated.
);
}
public override void Serialize(IGenericWriter writer)
@ -4612,10 +4609,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074204, // Greetings seeker.<EFBFBD> I have an urgent matter for you, if you are willing.
1074200
1074204, // Greetings seeker. I have an urgent matter for you, if you are willing.
1074200 // Thank goodness you are here, there's no time to lose.
)
); // Thank goodness you are here, there<72>s no time to lose.
);
}
public override void Serialize(IGenericWriter writer)
@ -4725,7 +4722,7 @@ namespace Server.Engines.MLQuests.Definitions
public override void Shout(PlayerMobile pm)
{
MLQuestSystem.Tell(this, pm, 1074197); // Pardon me, but if you could spare some time I<EFBFBD>d greatly appreciate it.
MLQuestSystem.Tell(this, pm, 1074197); // Pardon me, but if you could spare some time I'd greatly appreciate it.
}
public override void Serialize(IGenericWriter writer)
@ -4780,7 +4777,7 @@ namespace Server.Engines.MLQuests.Definitions
public override void Shout(PlayerMobile pm)
{
MLQuestSystem.Tell(this, pm, 1074204); // Greetings seeker.<EFBFBD> I have an urgent matter for you, if you are willing.
MLQuestSystem.Tell(this, pm, 1074204); // Greetings seeker. I have an urgent matter for you, if you are willing.
}
public override void Serialize(IGenericWriter writer)

View file

@ -647,9 +647,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074188, // Weakling! You are not up to the task I have.
1074195
1074195 // You there, in the stupid hat! Come here.
)
); // You there, in the stupid hat! Come here.
);
}
public override void Serialize(IGenericWriter writer)

View file

@ -16,14 +16,14 @@ namespace Server.Engines.MLQuests.Definitions
1075393; // Beg pardon, sir. I mean, madam. Uh, can I ask a favor of you? I found this jeweled ring. Most people would sell it and keep the money, but not me. I ain't never stole nothing, and I ain't about to start. I tried to take it over to Brit castle, figgerin' it must belong to some highborn lady, but the guards threw me out. You look like they might let you pass. Will you take the ring over there and see if you can find the owner?
RefusalMessage = 1075395; // I see. Too good to help an honest beggar like me, eh?
InProgressMessage =
1075396; // A jewel like this must be worth a lot, so it must belong to some noble or another. I would show it around the castle. Someone<EFBFBD>s bound to recognize it.
1075396; // A jewel like this must be worth a lot, so it must belong to some noble or another. I would show it around the castle. Someone's bound to recognize it.
CompletionMessage =
1075397; // Didst thou find my ring? I thank thee very much! It is an old ring, and a gift from my husband. I was most distraught when I realized it was missing.
CompletionNotice = CompletionNoticeShort;
Objectives.Add(new DeliverObjective(typeof(ReginasRing), 1, "Regina's Ring", typeof(Regina)));
Rewards.Add(new DummyReward(1075394)); // Find the ring<EFBFBD>s owner.
Rewards.Add(new DummyReward(1075394)); // Find the ring's owner.
}
public override Type NextQuest => typeof(ReginasThanks);
@ -35,9 +35,9 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
OneTimeOnly = true;
Title = 1075398; // Regina<EFBFBD>s Thanks
Title = 1075398; // Regina's Thanks
Description =
1075399; // What<EFBFBD>s that you say? It was a humble beggar that found my ring? Such honesty must be rewarded. Here, take this packet and return it to him, and I will be in your debt.
1075399; // What's that you say? It was a humble beggar that found my ring? Such honesty must be rewarded. Here, take this packet and return it to him, and I will be in your debt.
RefusalMessage = 1075401; // Hmph. Very well. What did you say his name was?
InProgressMessage = 1075402; // Take the packet and return it to the beggar who found my ring.
CompletionMessage =

View file

@ -127,10 +127,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074204, // Greetings seeker.  I have an urgent matter for you, if you are willing.
1074222
1074204, // Greetings seeker. I have an urgent matter for you, if you are willing.
1074222 // Could I trouble you for some assistance?
)
); // Could I trouble you for some assistance?
);
}
public override void InitBody()
@ -254,7 +254,7 @@ namespace Server.Engines.MLQuests.Definitions
public override void Shout(PlayerMobile pm)
{
MLQuestSystem.Tell(this, pm, 1074221); // Greetings!  I have a small task for you good traveler.
MLQuestSystem.Tell(this, pm, 1074221); // Greetings! I have a small task for you good traveler.
}
public override void Serialize(IGenericWriter writer)
@ -305,7 +305,7 @@ namespace Server.Engines.MLQuests.Definitions
public override void Shout(PlayerMobile pm)
{
MLQuestSystem.Tell(this, pm, 1074218); // Hey!  I want to talk to you, now.
MLQuestSystem.Tell(this, pm, 1074218); // Hey! I want to talk to you, now.
}
public override void Serialize(IGenericWriter writer)

View file

@ -273,10 +273,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074200, // Thank goodness you are here, there<EFBFBD>s no time to lose.
1074203
1074200, // Thank goodness you are here, there's no time to lose.
1074203 // Hello friend. I realize you are busy but if you would be willing to render me a service I can assure you that you will be judiciously renumerated.
)
); // Hello friend. I realize you are busy but if you would be willing to render me a service I can assure you that you will be judiciously renumerated.
);
}
public override void Serialize(IGenericWriter writer)

View file

@ -1995,9 +1995,9 @@ namespace Server.Engines.MLQuests.Definitions
Utility.RandomList(
1078213, // I don't sleep. I wait.
1078212, // There is no theory of evolution. Just a list of creatures I allow to live.
1078214
1078214 // I can lead a horse to water and make it drink.
)
); // I can lead a horse to water and make it drink.
);
}
public override void Serialize(IGenericWriter writer)

View file

@ -114,7 +114,7 @@ namespace Server.Engines.MLQuests.Definitions
1075529; // Have a pickaxe? My supplier is late and I need some iron ore so I can complete a bulk order for another merchant. If you can get me some soon I'll pay you double what it's worth on the market. Just find a cave or mountainside and try to use your pickaxe there, maybe you'll strike a good vein! 5 large pieces should do it.
RefusalMessage =
1075531; // Not feeling strong enough today? Its alright, I didn't need a bucket of rocks anyway.
InProgressMessage = 1075532; // Hmmm<EFBFBD> we need some more Ore. Try finding a mountain or cave, and give it a whack.
InProgressMessage = 1075532; // Hmmm' we need some more Ore. Try finding a mountain or cave, and give it a whack.
CompletionMessage =
1075533; // I see you found a good vien! Great! This will help get this order out on time. Good work!
@ -317,9 +317,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
1074213
1074213 // Hey buddy. Looking for work?
)
); // Hey buddy.<2E> Looking for work?
);
}
public override void Serialize(IGenericWriter writer)
@ -438,9 +438,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
1074213
1074213 // Hey buddy. Looking for work?
)
); // Hey buddy.<2E> Looking for work?
);
}
public override void Serialize(IGenericWriter writer)
@ -495,9 +495,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
1074213
1074213 // Hey buddy. Looking for work?
)
); // Hey buddy.<2E> Looking for work?
);
}
public override void Serialize(IGenericWriter writer)
@ -562,10 +562,10 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
1074213, // Hey buddy.<EFBFBD> Looking for work?
1074211
1074213, // Hey buddy. Looking for work?
1074211 // I could use some help.
)
); // I could use some help.
);
}
public override void Serialize(IGenericWriter writer)
@ -674,9 +674,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
1074213
1074213 // Hey buddy. Looking for work?
)
); // Hey buddy.<2E> Looking for work?
);
}
public override void Serialize(IGenericWriter writer)
@ -730,9 +730,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
1074213
1074213 // Hey buddy. Looking for work?
)
); // Hey buddy.<2E> Looking for work?
);
}
public override void Serialize(IGenericWriter writer)
@ -832,10 +832,10 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
1074213, // Hey buddy.<EFBFBD> Looking for work?
1074211
1074213, // Hey buddy. Looking for work?
1074211 // I could use some help.
)
); // I could use some help.
);
}
public override void Serialize(IGenericWriter writer)
@ -892,10 +892,10 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074205, // Oh great adventurer, would you please assist a weak soul in need of aid?
1074213, // Hey buddy.<EFBFBD> Looking for work?
1074211
1074213, // Hey buddy. Looking for work?
1074211 // I could use some help.
)
); // I could use some help.
);
}
public override void Serialize(IGenericWriter writer)
@ -957,10 +957,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074213, // Hey buddy.<EFBFBD> Looking for work?
1074211
1074213, // Hey buddy. Looking for work?
1074211 // I could use some help.
)
); // I could use some help.
);
}
public override void Serialize(IGenericWriter writer)

View file

@ -389,7 +389,7 @@ namespace Server.Engines.MLQuests.Definitions
Activated = true;
Title = 1073085; // Arch Enemies
Description =
1073575; // Vermin! They get into everything! I told the boy to leave out some poisoned cheese -- and they shot him. What else can I do? Unless<EFBFBD>these ratmen are skilled with a bow, but I'd lay a wager you're better, eh? Could you skin a few of the wretches for me?
1073575; // Vermin! They get into everything! I told the boy to leave out some poisoned cheese -- and they shot him. What else can I do? Unless these ratmen are skilled with a bow, but I'd lay a wager you're better, eh? Could you skin a few of the wretches for me?
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
InProgressMessage =
1073595; // I don't see 10 tails from Ratman Archers on your belt -- and until I do, no reward for you.
@ -804,9 +804,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074187, // Want a job?
1074184
1074184 // Come here, I have work for you.
)
); // Come here, I have work for you.
);
}
public override void Serialize(IGenericWriter writer)
@ -864,7 +864,7 @@ namespace Server.Engines.MLQuests.Definitions
public override void Shout(PlayerMobile pm)
{
MLQuestSystem.Tell(this, pm, 1074197); // Pardon me, but if you could spare some time I<EFBFBD>d greatly appreciate it.
MLQuestSystem.Tell(this, pm, 1074197); // Pardon me, but if you could spare some time I'd greatly appreciate it.
}
public override void Serialize(IGenericWriter writer)
@ -923,9 +923,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074188, // Weakling! You are not up to the task I have.
1074211
1074211 // I could use some help.
)
); // I could use some help.
);
}
public override void Serialize(IGenericWriter writer)
@ -993,11 +993,10 @@ namespace Server.Engines.MLQuests.Definitions
MLQuestSystem.Tell(
this,
pm,
Utility.RandomList(
1074214, // Knave! Come here right now!
1074218
)
); // Hey!<21> I want to talk to you, now.
// Knave! Come here right now!
// Hey! I want to talk to you, now.
1074214 + Utility.Random(2)
);
}
public override void Serialize(IGenericWriter writer)
@ -1119,10 +1118,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074196, // Excuse me! I<EFBFBD>m sorry to interrupt but I urgently need some assistance.
1074197
1074196, // Excuse me! I'm sorry to interrupt but I urgently need some assistance.
1074197 // Pardon me, but if you could spare some time I'd greatly appreciate it.
)
); // Pardon me, but if you could spare some time I<>d greatly appreciate it.
);
}
public override void Serialize(IGenericWriter writer)
@ -1183,9 +1182,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074185, // Hey you! Want to help me out?
1074195
1074195 // You there, in the stupid hat! Come here.
)
); // You there, in the stupid hat! Come here.
);
}
public override void Serialize(IGenericWriter writer)
@ -1245,9 +1244,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074193, // You there! Yes you. Stop looking about like a toadie and come here.
1074186
1074186 // Come here, I have a task.
)
); // Come here, I have a task.
);
}
public override void Serialize(IGenericWriter writer)
@ -1350,10 +1349,10 @@ namespace Server.Engines.MLQuests.Definitions
this,
pm,
Utility.RandomList(
1074217, // I want to make you an offer you<EFBFBD>d be a fool to <20>refuse.
1074218
1074217, // I want to make you an offer you'd be a fool to 'refuse.
1074218 // Hey! I want to talk to you, now.
)
); // Hey!<21> I want to talk to you, now.
);
}
public override void Serialize(IGenericWriter writer)

View file

@ -347,11 +347,8 @@ namespace Server.Engines.MLQuests.Definitions
Objectives.Add(new CollectObjective(1, typeof(Beads), 1024235)); // beads
Objectives.Add(new CollectObjective(1, typeof(JarHoney), 1022540)); // jar of honey
Rewards.Add(
new DummyReward(
1074874
)
); // The opportunity to prove yourself worthy of learning to Summon Fey. (Sufficient spellweaving skill is required to cast the spell)
// The opportunity to prove yourself worthy of learning to Summon Fey. (Sufficient spellweaving skill is required to cast the spell)
Rewards.Add(new DummyReward(1074874));
}
public override Type NextQuest => typeof(TokenOfFriendship);
@ -372,11 +369,8 @@ namespace Server.Engines.MLQuests.Definitions
Objectives.Add(new DeliverObjective(typeof(GiftForArielle), 1, "gift for Arielle", typeof(Arielle)));
Rewards.Add(
new DummyReward(
1074874
)
); // The opportunity to prove yourself worthy of learning to Summon Fey. (Sufficient spellweaving skill is required to cast the spell)
// The opportunity to prove yourself worthy of learning to Summon Fey. (Sufficient spellweaving skill is required to cast the spell)
Rewards.Add(new DummyReward(1074874));
}
public override Type NextQuest => typeof(Alliance);
@ -455,11 +449,8 @@ namespace Server.Engines.MLQuests.Definitions
Objectives.Add(new CollectObjective(1, typeof(StoutWhip), "Stout Whip"));
Rewards.Add(
new DummyReward(
1074873
)
); // The opportunity to prove yourself worthy of learning to Summon Fiends. (Sufficient spellweaving skill is required to cast the spell)
// The opportunity to prove yourself worthy of learning to Summon Fiends. (Sufficient spellweaving skill is required to cast the spell)
Rewards.Add(new DummyReward(1074873));
}
public override Type NextQuest => typeof(CrackingTheWhipII);
@ -607,9 +598,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074186, // Come here, I have a task.
1074218
1074218 // Hey! I want to talk to you, now.
)
); // Hey! I want to talk to you, now.
);
}
public override void Serialize(IGenericWriter writer)
@ -728,9 +719,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074215, // Dont test my patience you sniveling worm!
1074218
1074218 // Hey! I want to talk to you, now.
)
); // Hey!  I want to talk to you, now.
);
}
public override void Serialize(IGenericWriter writer)

View file

@ -130,7 +130,7 @@ namespace Server.Engines.MLQuests.Definitions
public override void Shout(PlayerMobile pm)
{
MLQuestSystem.Tell(this, pm, 1074200); // Thank goodness you are here, there<EFBFBD>s no time to lose.
MLQuestSystem.Tell(this, pm, 1074200); // Thank goodness you are here, there's no time to lose.
}
public override void Serialize(IGenericWriter writer)

Some files were not shown because too many files have changed in this diff Show more