Updates formatting rules (#199)

This commit is contained in:
Kamron Batman 2020-08-25 18:00:51 -07:00 committed by GitHub
parent 8caf5a422f
commit 1f651992d7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
1752 changed files with 203904 additions and 203367 deletions

View file

@ -1,8 +1,247 @@
[*]
charset=utf-8
end_of_line=crlf
# We don't specify so people can use their native
# end_of_line = crlf
trim_trailing_whitespace=true
insert_final_newline=true
indent_style=space
indent_size=2
indent_size=4
tab_width=4
max_line_length=125
# Microsoft .NET properties
csharp_new_line_before_members_in_object_initializers=false
csharp_preferred_modifier_order=public, private, protected, internal, new, abstract, virtual, sealed, override, static, readonly, extern, unsafe, volatile, async:suggestion
csharp_space_after_cast=false
dotnet_diagnostic.bc42024.severity=suggestion
dotnet_diagnostic.cs0078.severity=none
dotnet_diagnostic.cs0108.severity=none
dotnet_diagnostic.cs0109.severity=none
dotnet_diagnostic.cs0114.severity=none
dotnet_diagnostic.cs0162.severity=none
dotnet_diagnostic.cs0168.severity=suggestion
dotnet_diagnostic.cs0183.severity=none
dotnet_diagnostic.cs0184.severity=none
dotnet_diagnostic.cs0197.severity=none
dotnet_diagnostic.cs0252.severity=none
dotnet_diagnostic.cs0253.severity=none
dotnet_diagnostic.cs0420.severity=none
dotnet_diagnostic.cs0465.severity=none
dotnet_diagnostic.cs0469.severity=none
dotnet_diagnostic.cs0612.severity=none
dotnet_diagnostic.cs0618.severity=none
dotnet_diagnostic.cs0628.severity=none
dotnet_diagnostic.cs0642.severity=none
dotnet_diagnostic.cs0657.severity=none
dotnet_diagnostic.cs0658.severity=none
dotnet_diagnostic.cs0659.severity=none
dotnet_diagnostic.cs0660.severity=none
dotnet_diagnostic.cs0661.severity=none
dotnet_diagnostic.cs0665.severity=none
dotnet_diagnostic.cs0672.severity=none
dotnet_diagnostic.cs0693.severity=none
dotnet_diagnostic.cs1030.severity=none
dotnet_diagnostic.cs1058.severity=none
dotnet_diagnostic.cs1066.severity=none
dotnet_diagnostic.cs1522.severity=none
dotnet_diagnostic.cs1570.severity=none
dotnet_diagnostic.cs1571.severity=none
dotnet_diagnostic.cs1572.severity=none
dotnet_diagnostic.cs1573.severity=none
dotnet_diagnostic.cs1574.severity=none
dotnet_diagnostic.cs1580.severity=none
dotnet_diagnostic.cs1581.severity=none
dotnet_diagnostic.cs1584.severity=none
dotnet_diagnostic.cs1587.severity=none
dotnet_diagnostic.cs1589.severity=none
dotnet_diagnostic.cs1590.severity=none
dotnet_diagnostic.cs1591.severity=none
dotnet_diagnostic.cs1592.severity=none
dotnet_diagnostic.cs1710.severity=none
dotnet_diagnostic.cs1711.severity=none
dotnet_diagnostic.cs1712.severity=none
dotnet_diagnostic.cs1717.severity=none
dotnet_diagnostic.cs1723.severity=none
dotnet_diagnostic.cs1957.severity=none
dotnet_diagnostic.cs1981.severity=none
dotnet_diagnostic.cs1998.severity=none
dotnet_diagnostic.cs4014.severity=none
dotnet_diagnostic.cs7095.severity=none
dotnet_diagnostic.cs8094.severity=none
dotnet_diagnostic.cs8123.severity=none
dotnet_diagnostic.cs8383.severity=none
dotnet_diagnostic.cs8424.severity=none
dotnet_diagnostic.cs8425.severity=none
dotnet_diagnostic.cs8509.severity=none
dotnet_diagnostic.cs8597.severity=none
dotnet_diagnostic.cs8600.severity=none
dotnet_diagnostic.cs8601.severity=none
dotnet_diagnostic.cs8602.severity=none
dotnet_diagnostic.cs8603.severity=none
dotnet_diagnostic.cs8604.severity=none
dotnet_diagnostic.cs8605.severity=none
dotnet_diagnostic.cs8607.severity=none
dotnet_diagnostic.cs8608.severity=none
dotnet_diagnostic.cs8609.severity=none
dotnet_diagnostic.cs8610.severity=none
dotnet_diagnostic.cs8611.severity=none
dotnet_diagnostic.cs8612.severity=none
dotnet_diagnostic.cs8613.severity=none
dotnet_diagnostic.cs8614.severity=none
dotnet_diagnostic.cs8615.severity=none
dotnet_diagnostic.cs8616.severity=none
dotnet_diagnostic.cs8617.severity=none
dotnet_diagnostic.cs8618.severity=none
dotnet_diagnostic.cs8619.severity=none
dotnet_diagnostic.cs8620.severity=none
dotnet_diagnostic.cs8621.severity=none
dotnet_diagnostic.cs8622.severity=none
dotnet_diagnostic.cs8624.severity=none
dotnet_diagnostic.cs8625.severity=none
dotnet_diagnostic.cs8629.severity=none
dotnet_diagnostic.cs8631.severity=none
dotnet_diagnostic.cs8632.severity=none
dotnet_diagnostic.cs8633.severity=none
dotnet_diagnostic.cs8634.severity=none
dotnet_diagnostic.cs8643.severity=none
dotnet_diagnostic.cs8644.severity=none
dotnet_diagnostic.cs8645.severity=none
dotnet_diagnostic.cs8655.severity=none
dotnet_diagnostic.cs8656.severity=none
dotnet_diagnostic.cs8667.severity=none
dotnet_diagnostic.cs8670.severity=none
dotnet_diagnostic.cs8714.severity=none
dotnet_diagnostic.cs8762.severity=none
dotnet_diagnostic.cs8763.severity=none
dotnet_diagnostic.cs8764.severity=none
dotnet_diagnostic.cs8765.severity=none
dotnet_diagnostic.cs8766.severity=none
dotnet_diagnostic.cs8767.severity=none
dotnet_diagnostic.cs8768.severity=none
dotnet_diagnostic.cs8769.severity=none
dotnet_diagnostic.cs8770.severity=none
dotnet_diagnostic.cs8774.severity=none
dotnet_diagnostic.cs8775.severity=none
dotnet_diagnostic.cs8776.severity=none
dotnet_diagnostic.cs8777.severity=none
dotnet_style_parentheses_in_arithmetic_binary_operators=never_if_unnecessary:none
dotnet_style_parentheses_in_other_binary_operators=never_if_unnecessary:none
dotnet_style_parentheses_in_relational_binary_operators=never_if_unnecessary:none
dotnet_style_predefined_type_for_locals_parameters_members=true:suggestion
dotnet_style_predefined_type_for_member_access=true:warning
dotnet_style_qualification_for_event=false:suggestion
dotnet_style_qualification_for_field=false:suggestion
dotnet_style_qualification_for_method=false:suggestion
dotnet_style_qualification_for_property=false:suggestion
dotnet_style_require_accessibility_modifiers=for_non_interface_members:suggestion
# ReSharper properties
resharper_apply_auto_detected_rules=false
resharper_case_block_braces=next_line_shifted_2
resharper_constructor_or_destructor_body=expression_body
resharper_csharp_int_align_comments=true
resharper_csharp_stick_comment=false
resharper_csharp_wrap_after_declaration_lpar=true
resharper_csharp_wrap_after_invocation_lpar=true
resharper_csharp_wrap_arguments_style=chop_if_long
resharper_csharp_wrap_before_declaration_rpar=true
resharper_csharp_wrap_before_invocation_rpar=true
# resharper_int_align_assignments=true
# resharper_int_align_variables=true
resharper_int_align_switch_expressions=true
resharper_int_align_switch_sections=true
resharper_max_enum_members_on_line=1
resharper_wrap_before_extends_colon=true
# Nested statements
resharper_indent_nested_fixed_stmt=true
resharper_indent_nested_foreach_stmt=true
resharper_indent_nested_for_stmt=true
resharper_indent_nested_lock_stmt=true
resharper_indent_nested_usings_stmt=true
resharper_indent_nested_while_stmt=true
resharper_local_function_body=expression_body
resharper_max_array_initializer_elements_on_line=10
resharper_method_or_operator_body=expression_body
resharper_nested_ternary_style=compact
resharper_space_after_cast=false
resharper_space_within_single_line_array_initializer_braces=true
resharper_use_indent_from_vs=false
resharper_wrap_chained_method_calls=chop_if_long
resharper_wrap_lines=true
# ReSharper inspection severities https://www.jetbrains.com/help/resharper/EditorConfig_Index.html
resharper_arrange_constructor_or_destructor_body_highlighting=suggestion
resharper_arrange_local_function_body_highlighting=suggestion
resharper_arrange_method_or_operator_body_highlighting=suggestion
resharper_arrange_redundant_parentheses_highlighting=suggestion
resharper_arrange_this_qualifier_highlighting=hint
resharper_arrange_type_member_modifiers_highlighting=hint
resharper_arrange_type_modifiers_highlighting=hint
resharper_bad_control_braces_indent_highlighting=warning
resharper_bad_declaration_braces_indent_highlighting=warning
resharper_bad_expression_braces_indent_highlighting=warning
resharper_bad_namespace_braces_indent_highlighting=warning
resharper_bad_preprocessor_indent_highlighting=warning
resharper_built_in_type_reference_style_highlighting=hint
resharper_check_namespace_highlighting=hint
resharper_compare_of_floats_by_equality_operator_highlighting=suggestion
resharper_convert_conditional_ternary_expression_to_switch_expression_highlighting=warning
resharper_convert_if_statement_to_switch_statement_highlighting=none
resharper_convert_switch_statement_to_switch_expression_highlighting=warning
resharper_foreach_can_be_partly_converted_to_query_using_another_get_enumerator_highlighting=none
resharper_for_can_be_converted_to_foreach_highlighting=none
resharper_inconsistent_naming_highlighting=none
resharper_invert_if_highlighting=none
resharper_member_can_be_private_global_highlighting=none
resharper_member_can_be_private_local_highlighting=none
resharper_member_can_be_protected_global_highlighting=none
resharper_member_can_be_protected_local_highlighting=none
resharper_merge_conditional_expression_highlighting=warning
resharper_merge_conditional_expression_when_possible_highlighting=warning
resharper_merge_sequential_checks_highlighting=warning
resharper_merge_sequential_checks_when_possible_highlighting=warning
resharper_missing_indent_highlighting=warning
resharper_outdent_is_off_prev_level_highlighting=warning
resharper_possible_null_reference_exception_highlighting=error
resharper_redundant_base_qualifier_highlighting=warning
resharper_redundant_empty_object_creation_argument_list_highlighting=warning
resharper_redundant_type_specification_in_default_expression_highlighting=warning
resharper_remove_redundant_braces_highlighting=warning
resharper_remove_redundant_or_statement_false_highlighting=warning
resharper_remove_redundant_or_statement_true_highlighting=warning
resharper_specify_a_culture_in_string_conversion_explicitly_highlighting=hint
resharper_string_compare_is_culture_specific_1_highlighting=hint
resharper_string_compare_is_culture_specific_2_highlighting=hint
resharper_string_compare_is_culture_specific_3_highlighting=hint
resharper_string_compare_is_culture_specific_4_highlighting=hint
resharper_string_compare_is_culture_specific_5_highlighting=hint
resharper_string_compare_is_culture_specific_6_highlighting=hint
resharper_string_compare_to_is_culture_specific_highlighting=hint
resharper_string_index_of_is_culture_specific_1_highlighting=hint
resharper_string_index_of_is_culture_specific_2_highlighting=hint
resharper_string_index_of_is_culture_specific_3_highlighting=hint
resharper_string_last_index_of_is_culture_specific_1_highlighting=hint
resharper_string_last_index_of_is_culture_specific_2_highlighting=hint
resharper_string_last_index_of_is_culture_specific_3_highlighting=hint
resharper_suggest_discard_declaration_var_style_highlighting=none
resharper_suggest_var_or_type_built_in_types_highlighting=none
resharper_suggest_var_or_type_elsewhere_highlighting=none
resharper_suggest_var_or_type_simple_types_highlighting=none
resharper_tabs_and_spaces_mismatch_highlighting=warning
resharper_unused_auto_property_accessor_global_highlighting=none
resharper_unused_auto_property_accessor_local_highlighting=none
resharper_unused_variable_highlighting=suggestion
resharper_virtual_member_call_in_constructor_highlighting=hint
resharper_web_config_module_not_resolved_highlighting=warning
resharper_web_config_type_not_resolved_highlighting=warning
resharper_web_config_wrong_module_highlighting=warning
resharper_wrong_indent_size_highlighting=warning
[*.{sln,csproj,bat}]
end_of_line=crlf
[*.{yml,json,md,sh}]
end_of_line=lf
indent_size=2
tab_width=2

8
.gitattributes vendored Normal file
View file

@ -0,0 +1,8 @@
* text=auto
*.cs text diff=csharp
*.json text diff=json
*.sln text eol=crlf
*.csproj text eol=crlf
*.bat text eol=crlf
*.sh text eol=lf
publish.cmd text eol=lf

View file

@ -1,20 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>
<PropertyGroup>
<Authors>Kamron Batman</Authors>
<Company>ModernUO</Company>
<Copyright>2019-2020</Copyright>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<Platforms>x64</Platforms>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>8.0</LangVersion>
<DefineConstants Condition="$(RuntimeIdentifier.StartsWith('win'))">WINDOWS</DefineConstants>
<DefineConstants Condition="$(RuntimeIdentifier.StartsWith(`win`)) != true">UNIX</DefineConstants>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
<RestoreLockedMode>true</RestoreLockedMode>
<NoWarn>NU1603</NoWarn>
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
<RuntimeIdentifiers>win-x64;debian.10-x64;debian.9-x64;ubuntu.16.04-x64;ubuntu.18.04-x64;ubuntu.20.04-x64;centos.7-x64;centos.8-x64;osx-x64</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup>
<Authors>Kamron Batman</Authors>
<Company>ModernUO</Company>
<Copyright>2019-2020</Copyright>
<TargetFrameworks>netcoreapp3.1;net5.0</TargetFrameworks>
<Platforms>x64</Platforms>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>8.0</LangVersion>
<DefineConstants Condition="$(RuntimeIdentifier.StartsWith('win'))">WINDOWS</DefineConstants>
<DefineConstants Condition="$(RuntimeIdentifier.StartsWith(`win`)) != true">UNIX</DefineConstants>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
<RestoreLockedMode>true</RestoreLockedMode>
<NoWarn>NU1603</NoWarn>
<DisableImplicitNuGetFallbackFolder>true</DisableImplicitNuGetFallbackFolder>
<RuntimeIdentifiers>win-x64;debian.10-x64;debian.9-x64;ubuntu.16.04-x64;ubuntu.18.04-x64;ubuntu.20.04-x64;centos.7-x64;centos.8-x64;osx-x64</RuntimeIdentifiers>
<Configurations>Debug;Release;Analyze</Configurations>
<RunCodeAnalysis>true</RunCodeAnalysis>
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
</PropertyGroup>
<ItemGroup Condition="'$(Configuration)'=='Analyze'">
<PackageReference Include="StyleCop.Analyzers" Version="1.2.0-beta.205" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers">
<Version>3.0.0</Version>
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<AdditionalFiles Include=".\stylecop.json" />
<AdditionalFiles Include=".\Rules.ruleset" />
</ItemGroup>
</Project>

View file

@ -1,203 +1,202 @@
/***************************************************************************
* AggressorInfo.cs
* -------------------
* begin : May 1, 2002
* copyright : (C) The RunUO Software Team
* email : info@runuo.com
*
* $Id$
*
***************************************************************************/
/***************************************************************************
*
* 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 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
namespace Server
{
public class AggressorInfo
{
private static readonly Queue<AggressorInfo> m_Pool = new Queue<AggressorInfo>();
private Mobile m_Attacker, m_Defender;
private bool m_CanReportMurder;
private bool m_CriminalAggression;
private DateTime m_LastCombatTime;
private bool m_Queued;
private bool m_Reported;
private AggressorInfo(Mobile attacker, Mobile defender, bool criminal)
{
m_Attacker = attacker;
m_Defender = defender;
m_CanReportMurder = criminal;
m_CriminalAggression = criminal;
Refresh();
}
public static TimeSpan ExpireDelay { get; set; } = TimeSpan.FromMinutes(2.0);
public bool Expired
{
get
{
if (m_Queued)
DumpAccess();
return m_Attacker.Deleted || m_Defender.Deleted || DateTime.UtcNow >= m_LastCombatTime + ExpireDelay;
}
}
public bool CriminalAggression
{
get
{
if (m_Queued)
DumpAccess();
return m_CriminalAggression;
}
set
{
if (m_Queued)
DumpAccess();
m_CriminalAggression = value;
}
}
public Mobile Attacker
{
get
{
if (m_Queued)
DumpAccess();
return m_Attacker;
}
}
public Mobile Defender
{
get
{
if (m_Queued)
DumpAccess();
return m_Defender;
}
}
public DateTime LastCombatTime
{
get
{
if (m_Queued)
DumpAccess();
return m_LastCombatTime;
}
}
public bool Reported
{
get
{
if (m_Queued)
DumpAccess();
return m_Reported;
}
set
{
if (m_Queued)
DumpAccess();
m_Reported = value;
}
}
public bool CanReportMurder
{
get
{
if (m_Queued)
DumpAccess();
return m_CanReportMurder;
}
set
{
if (m_Queued)
DumpAccess();
m_CanReportMurder = value;
}
}
public static AggressorInfo Create(Mobile attacker, Mobile defender, bool criminal)
{
AggressorInfo info;
if (m_Pool.Count > 0)
{
info = m_Pool.Dequeue();
info.m_Attacker = attacker;
info.m_Defender = defender;
info.m_CanReportMurder = criminal;
info.m_CriminalAggression = criminal;
info.m_Queued = false;
info.Refresh();
}
else
{
info = new AggressorInfo(attacker, defender, criminal);
}
return info;
}
public void Free()
{
if (m_Queued)
return;
m_Queued = true;
m_Pool.Enqueue(this);
}
public static void DumpAccess()
{
using var op = new StreamWriter("warnings.log", true);
op.WriteLine("Warning: Access to queued AggressorInfo:");
op.WriteLine(new StackTrace());
op.WriteLine();
op.WriteLine();
}
public void Refresh()
{
if (m_Queued)
DumpAccess();
m_LastCombatTime = DateTime.UtcNow;
m_Reported = false;
}
}
}
/***************************************************************************
* AggressorInfo.cs
* -------------------
* begin : May 1, 2002
* copyright : (C) The RunUO Software Team
* email : info@runuo.com
*
* $Id$
*
***************************************************************************/
/***************************************************************************
*
* 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 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
namespace Server
{
public class AggressorInfo {
private static readonly Queue<AggressorInfo> m_Pool = new Queue<AggressorInfo>();
private Mobile m_Attacker, m_Defender;
private bool m_CanReportMurder;
private bool m_CriminalAggression;
private DateTime m_LastCombatTime;
private bool m_Queued;
private bool m_Reported;
private AggressorInfo(Mobile attacker, Mobile defender, bool criminal)
{
m_Attacker = attacker;
m_Defender = defender;
m_CanReportMurder = criminal;
m_CriminalAggression = criminal;
Refresh();
}
public static TimeSpan ExpireDelay { get; set; } = TimeSpan.FromMinutes(2.0);
public bool Expired
{
get
{
if (m_Queued)
DumpAccess();
return m_Attacker.Deleted || m_Defender.Deleted || DateTime.UtcNow >= m_LastCombatTime + ExpireDelay;
}
}
public bool CriminalAggression
{
get
{
if (m_Queued)
DumpAccess();
return m_CriminalAggression;
}
set
{
if (m_Queued)
DumpAccess();
m_CriminalAggression = value;
}
}
public Mobile Attacker
{
get
{
if (m_Queued)
DumpAccess();
return m_Attacker;
}
}
public Mobile Defender
{
get
{
if (m_Queued)
DumpAccess();
return m_Defender;
}
}
public DateTime LastCombatTime
{
get
{
if (m_Queued)
DumpAccess();
return m_LastCombatTime;
}
}
public bool Reported
{
get
{
if (m_Queued)
DumpAccess();
return m_Reported;
}
set
{
if (m_Queued)
DumpAccess();
m_Reported = value;
}
}
public bool CanReportMurder
{
get
{
if (m_Queued)
DumpAccess();
return m_CanReportMurder;
}
set
{
if (m_Queued)
DumpAccess();
m_CanReportMurder = value;
}
}
public static AggressorInfo Create(Mobile attacker, Mobile defender, bool criminal)
{
AggressorInfo info;
if (m_Pool.Count > 0)
{
info = m_Pool.Dequeue();
info.m_Attacker = attacker;
info.m_Defender = defender;
info.m_CanReportMurder = criminal;
info.m_CriminalAggression = criminal;
info.m_Queued = false;
info.Refresh();
}
else
{
info = new AggressorInfo(attacker, defender, criminal);
}
return info;
}
public void Free()
{
if (m_Queued)
return;
m_Queued = true;
m_Pool.Enqueue(this);
}
public static void DumpAccess()
{
using var op = new StreamWriter("warnings.log", true);
op.WriteLine("Warning: Access to queued AggressorInfo:");
op.WriteLine(new StackTrace());
op.WriteLine();
op.WriteLine();
}
public void Refresh()
{
if (m_Queued)
DumpAccess();
m_LastCombatTime = DateTime.UtcNow;
m_Reported = false;
}
}
}

View file

@ -1,85 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
<PropertyGroup>
<OutputType>Exe</OutputType>
<ApplicationIcon>MUO.ico</ApplicationIcon>
<StartupObject>Server.Core</StartupObject>
<AssemblyName>ModernUO</AssemblyName>
<Win32Resource />
<Version>0.5.0</Version>
<Product>ModernUO Server</Product>
<PublishDir>..\..\Distribution</PublishDir>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<Configurations>Debug;Release;Analyze</Configurations>
<UseNETCoreGenerator>true</UseNETCoreGenerator>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningsAsErrors />
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
<Target Name="CleanPub" AfterTargets="Clean">
<Message Text="Removing distribution files..." />
<Delete Files="..\..\Distribution\libuv.dylib" ContinueOnError="true" />
<Delete Files="..\..\Distribution\libuv.so" ContinueOnError="true" />
<Delete Files="..\..\Distribution\libuv.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\zlib.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\libz.dylib" ContinueOnError="true" />
<Delete Files="..\..\Distribution\libz.so" ContinueOnError="true" />
<Delete Files="..\..\Distribution\ZLib.Bindings.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Connections.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Http.Features.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Configuration.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.DependencyInjection.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.FileProviders.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Hosting.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Logging.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Options.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Primitives.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName)" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).dll.config" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).exe" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).deps.json" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).pdb" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).runtimeconfig.dev.json" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).runtimeconfig.json" ContinueOnError="true" />
<Delete Files="..\..\Distribution\System.IO.Pipelines.dll" ContinueOnError="true" />
</Target>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<DefineConstants>TRACE;DEBUG</DefineConstants>
<Optimize>false</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<Optimize>true</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Analyze'">
<RunCodeAnalysis>true</RunCodeAnalysis>
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
<CodeAnalysisRuleSet>..\..\Rules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<AdditionalFiles Include="..\..\Rules.ruleset">
<Link>Rules.rulest</Link>
</AdditionalFiles>
<AdditionalFiles Include="..\..\stylecop.json">
<Link>stylecop.json</Link>
</AdditionalFiles>
<PackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.5" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.5" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.5" />
<PackageReference Include="System.IO.Pipelines" Version="4.7.2" />
<PackageReference Include="Zlib.Bindings" Version="1.2.0" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Analyze'">
<PackageReference Include="StyleCop.Analyzers">
<Version>1.1.118</Version>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.FxCopAnalyzers">
<Version>3.0.0</Version>
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
<PropertyGroup>
<OutputType>Exe</OutputType>
<ApplicationIcon>MUO.ico</ApplicationIcon>
<StartupObject>Server.Core</StartupObject>
<AssemblyName>ModernUO</AssemblyName>
<Win32Resource />
<Version>0.5.0</Version>
<Product>ModernUO Server</Product>
<PublishDir>..\..\Distribution</PublishDir>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<UseNETCoreGenerator>true</UseNETCoreGenerator>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<WarningsAsErrors />
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<RunCodeAnalysis>true</RunCodeAnalysis>
<RunAnalyzersDuringBuild>true</RunAnalyzersDuringBuild>
</PropertyGroup>
<Target Name="CleanPub" AfterTargets="Clean">
<Message Text="Removing distribution files..." />
<Delete Files="..\..\Distribution\libuv.dylib" ContinueOnError="true" />
<Delete Files="..\..\Distribution\libuv.so" ContinueOnError="true" />
<Delete Files="..\..\Distribution\libuv.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\zlib.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\libz.dylib" ContinueOnError="true" />
<Delete Files="..\..\Distribution\libz.so" ContinueOnError="true" />
<Delete Files="..\..\Distribution\ZLib.Bindings.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Connections.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Http.Features.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Configuration.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.DependencyInjection.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.FileProviders.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Hosting.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Logging.Abstractions.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Options.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\Microsoft.Extensions.Primitives.dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName)" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).dll" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).dll.config" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).exe" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).deps.json" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).pdb" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).runtimeconfig.dev.json" ContinueOnError="true" />
<Delete Files="..\..\Distribution\$(AssemblyName).runtimeconfig.json" ContinueOnError="true" />
<Delete Files="..\..\Distribution\System.IO.Pipelines.dll" ContinueOnError="true" />
</Target>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<DefineConstants>TRACE;DEBUG</DefineConstants>
<Optimize>false</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<Optimize>true</Optimize>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Analyze'">
<CodeAnalysisRuleSet>..\..\Rules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Connections.Abstractions" Version="3.1.5" />
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Version="3.1.5" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="3.1.5" />
<PackageReference Include="System.IO.Pipelines" Version="4.7.2" />
<PackageReference Include="Zlib.Bindings" Version="1.2.0" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Analyze'">
<AdditionalFiles Include="..\..\stylecop.json" />
<AdditionalFiles Include="..\..\Rules.ruleset" />
</ItemGroup>
</Project>

View file

@ -1,210 +1,210 @@
using System;
using System.Collections.Generic;
using Server.Network;
namespace Server.Items
{
public class WarningItem : Item
{
private bool m_Broadcasting;
private DateTime m_LastBroadcast;
private int m_Range;
[Constructible]
public WarningItem(int itemID, int range, int warning) : base(itemID)
{
if (range > 18)
range = 18;
Movable = false;
WarningNumber = warning;
m_Range = range;
}
[Constructible]
public WarningItem(int itemID, int range, string warning) : base(itemID)
{
if (range > 18)
range = 18;
Movable = false;
WarningString = warning;
m_Range = range;
}
public WarningItem(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public string WarningString { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public int WarningNumber { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public int Range
{
get => m_Range;
set
{
if (value > 18) value = 18;
m_Range = value;
}
}
[CommandProperty(AccessLevel.GameMaster)]
public TimeSpan ResetDelay { get; set; }
public virtual bool OnlyToTriggerer => false;
public virtual int NeighborRange => 5;
public override bool HandlesOnMovement => true;
public virtual void SendMessage(Mobile triggerer, bool onlyToTriggerer, string messageString, int messageNumber)
{
if (onlyToTriggerer)
{
if (messageString != null)
triggerer.SendMessage(messageString);
else
triggerer.SendLocalizedMessage(messageNumber);
}
else
{
if (messageString != null)
PublicOverheadMessage(MessageType.Regular, 0x3B2, false, messageString);
else
PublicOverheadMessage(MessageType.Regular, 0x3B2, messageNumber);
}
}
public virtual void Broadcast(Mobile triggerer)
{
if (m_Broadcasting || DateTime.UtcNow < m_LastBroadcast + ResetDelay)
return;
m_LastBroadcast = DateTime.UtcNow;
m_Broadcasting = true;
SendMessage(triggerer, OnlyToTriggerer, WarningString, WarningNumber);
if (NeighborRange >= 0)
{
List<WarningItem> list = new List<WarningItem>();
foreach (Item item in GetItemsInRange(NeighborRange))
if (item != this && item is WarningItem warningItem)
list.Add(warningItem);
for (int i = 0; i < list.Count; i++)
list[i].Broadcast(triggerer);
}
Timer.DelayCall(StopBroadcasting);
}
private void StopBroadcasting()
{
m_Broadcasting = false;
}
public override void OnMovement(Mobile m, Point3D oldLocation)
{
if (m.Player && Utility.InRange(m.Location, Location, m_Range) &&
!Utility.InRange(oldLocation, Location, m_Range))
Broadcast(m);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(WarningString);
writer.Write(WarningNumber);
writer.Write(m_Range);
writer.Write(ResetDelay);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
WarningString = reader.ReadString();
WarningNumber = reader.ReadInt();
m_Range = reader.ReadInt();
ResetDelay = reader.ReadTimeSpan();
break;
}
}
}
}
public class HintItem : WarningItem
{
[Constructible]
public HintItem(int itemID, int range, int warning, int hint) : base(itemID, range, warning) => HintNumber = hint;
[Constructible]
public HintItem(int itemID, int range, string warning, string hint) : base(itemID, range, warning) => HintString = hint;
public HintItem(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public string HintString { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public int HintNumber { get; set; }
public override bool OnlyToTriggerer => true;
public override void OnDoubleClick(Mobile from)
{
SendMessage(from, true, HintString, HintNumber);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(HintString);
writer.Write(HintNumber);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
HintString = reader.ReadString();
HintNumber = reader.ReadInt();
break;
}
}
}
}
}
using System;
using System.Collections.Generic;
using Server.Network;
namespace Server.Items
{
public class WarningItem : Item
{
private bool m_Broadcasting;
private DateTime m_LastBroadcast;
private int m_Range;
[Constructible]
public WarningItem(int itemID, int range, int warning) : base(itemID)
{
if (range > 18)
range = 18;
Movable = false;
WarningNumber = warning;
m_Range = range;
}
[Constructible]
public WarningItem(int itemID, int range, string warning) : base(itemID)
{
if (range > 18)
range = 18;
Movable = false;
WarningString = warning;
m_Range = range;
}
public WarningItem(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public string WarningString { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public int WarningNumber { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public int Range
{
get => m_Range;
set
{
if (value > 18) value = 18;
m_Range = value;
}
}
[CommandProperty(AccessLevel.GameMaster)]
public TimeSpan ResetDelay { get; set; }
public virtual bool OnlyToTriggerer => false;
public virtual int NeighborRange => 5;
public override bool HandlesOnMovement => true;
public virtual void SendMessage(Mobile triggerer, bool onlyToTriggerer, string messageString, int messageNumber)
{
if (onlyToTriggerer)
{
if (messageString != null)
triggerer.SendMessage(messageString);
else
triggerer.SendLocalizedMessage(messageNumber);
}
else
{
if (messageString != null)
PublicOverheadMessage(MessageType.Regular, 0x3B2, false, messageString);
else
PublicOverheadMessage(MessageType.Regular, 0x3B2, messageNumber);
}
}
public virtual void Broadcast(Mobile triggerer)
{
if (m_Broadcasting || DateTime.UtcNow < m_LastBroadcast + ResetDelay)
return;
m_LastBroadcast = DateTime.UtcNow;
m_Broadcasting = true;
SendMessage(triggerer, OnlyToTriggerer, WarningString, WarningNumber);
if (NeighborRange >= 0)
{
List<WarningItem> list = new List<WarningItem>();
foreach (Item item in GetItemsInRange(NeighborRange))
if (item != this && item is WarningItem warningItem)
list.Add(warningItem);
for (int i = 0; i < list.Count; i++)
list[i].Broadcast(triggerer);
}
Timer.DelayCall(StopBroadcasting);
}
private void StopBroadcasting()
{
m_Broadcasting = false;
}
public override void OnMovement(Mobile m, Point3D oldLocation)
{
if (m.Player && Utility.InRange(m.Location, Location, m_Range) &&
!Utility.InRange(oldLocation, Location, m_Range))
Broadcast(m);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(WarningString);
writer.Write(WarningNumber);
writer.Write(m_Range);
writer.Write(ResetDelay);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
WarningString = reader.ReadString();
WarningNumber = reader.ReadInt();
m_Range = reader.ReadInt();
ResetDelay = reader.ReadTimeSpan();
break;
}
}
}
}
public class HintItem : WarningItem
{
[Constructible]
public HintItem(int itemID, int range, int warning, int hint) : base(itemID, range, warning) => HintNumber = hint;
[Constructible]
public HintItem(int itemID, int range, string warning, string hint) : base(itemID, range, warning) => HintString = hint;
public HintItem(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public string HintString { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public int HintNumber { get; set; }
public override bool OnlyToTriggerer => true;
public override void OnDoubleClick(Mobile from)
{
SendMessage(from, true, HintString, HintNumber);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(HintString);
writer.Write(HintNumber);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
HintString = reader.ReadString();
HintNumber = reader.ReadInt();
break;
}
}
}
}
}

View file

@ -1,139 +1,139 @@
using Server.Targeting;
namespace Server.Items
{
[Flippable(0x1f14, 0x1f15, 0x1f16, 0x1f17)]
public class WayPoint : Item
{
private WayPoint m_Next;
[Constructible]
public WayPoint(WayPoint prev = null) : base(0x1f14)
{
Hue = 0x498;
Visible = false;
// this.Movable = false;
if (prev != null)
prev.NextPoint = this;
}
public WayPoint(Serial serial) : base(serial)
{
}
public override string DefaultName => "AI Way Point";
[CommandProperty(AccessLevel.GameMaster)]
public WayPoint NextPoint
{
get => m_Next;
set
{
if (m_Next != this)
m_Next = value;
}
}
public static void Initialize()
{
CommandSystem.Register("WayPointSeq", AccessLevel.GameMaster, WayPointSeq_OnCommand);
}
public static void WayPointSeq_OnCommand(CommandEventArgs arg)
{
arg.Mobile.SendMessage("Target the position of the first way point.");
arg.Mobile.Target = new WayPointSeqTarget(null);
}
public override void OnDoubleClick(Mobile from)
{
if (from.AccessLevel >= AccessLevel.GameMaster)
{
from.SendMessage("Target the next way point in the sequence.");
from.Target = new NextPointTarget(this);
}
}
public override void OnSingleClick(Mobile from)
{
base.OnSingleClick(from);
if (m_Next == null)
LabelTo(from, "(Unlinked)");
else
LabelTo(from, "(Linked: {0})", m_Next.Location);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Next = reader.ReadItem() as WayPoint;
break;
}
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(m_Next);
}
}
public class NextPointTarget : Target
{
private readonly WayPoint m_Point;
public NextPointTarget(WayPoint pt) : base(-1, false, TargetFlags.None) => m_Point = pt;
protected override void OnTarget(Mobile from, object target)
{
if (target is WayPoint point && m_Point != null)
m_Point.NextPoint = point;
else
from.SendMessage("Target a way point.");
}
}
public class WayPointSeqTarget : Target
{
private readonly WayPoint m_Last;
public WayPointSeqTarget(WayPoint last) : base(-1, true, TargetFlags.None) => m_Last = last;
protected override void OnTarget(Mobile from, object targeted)
{
if (targeted is WayPoint wayPoint)
{
if (m_Last != null)
m_Last.NextPoint = wayPoint;
}
else if (targeted is IPoint3D d)
{
Point3D p = new Point3D(d);
WayPoint point = new WayPoint(m_Last);
point.MoveToWorld(p, from.Map);
from.Target = new WayPointSeqTarget(point);
from.SendMessage(
"Target the position of the next way point in the sequence, or target a way point link the newest way point to.");
}
else
{
from.SendMessage("Target a position, or another way point.");
}
}
}
}
using Server.Targeting;
namespace Server.Items
{
[Flippable(0x1f14, 0x1f15, 0x1f16, 0x1f17)]
public class WayPoint : Item
{
private WayPoint m_Next;
[Constructible]
public WayPoint(WayPoint prev = null) : base(0x1f14)
{
Hue = 0x498;
Visible = false;
// this.Movable = false;
if (prev != null)
prev.NextPoint = this;
}
public WayPoint(Serial serial) : base(serial)
{
}
public override string DefaultName => "AI Way Point";
[CommandProperty(AccessLevel.GameMaster)]
public WayPoint NextPoint
{
get => m_Next;
set
{
if (m_Next != this)
m_Next = value;
}
}
public static void Initialize()
{
CommandSystem.Register("WayPointSeq", AccessLevel.GameMaster, WayPointSeq_OnCommand);
}
public static void WayPointSeq_OnCommand(CommandEventArgs arg)
{
arg.Mobile.SendMessage("Target the position of the first way point.");
arg.Mobile.Target = new WayPointSeqTarget(null);
}
public override void OnDoubleClick(Mobile from)
{
if (from.AccessLevel >= AccessLevel.GameMaster)
{
from.SendMessage("Target the next way point in the sequence.");
from.Target = new NextPointTarget(this);
}
}
public override void OnSingleClick(Mobile from)
{
base.OnSingleClick(from);
if (m_Next == null)
LabelTo(from, "(Unlinked)");
else
LabelTo(from, "(Linked: {0})", m_Next.Location);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Next = reader.ReadItem() as WayPoint;
break;
}
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(m_Next);
}
}
public class NextPointTarget : Target
{
private readonly WayPoint m_Point;
public NextPointTarget(WayPoint pt) : base(-1, false, TargetFlags.None) => m_Point = pt;
protected override void OnTarget(Mobile from, object target)
{
if (target is WayPoint point && m_Point != null)
m_Point.NextPoint = point;
else
from.SendMessage("Target a way point.");
}
}
public class WayPointSeqTarget : Target
{
private readonly WayPoint m_Last;
public WayPointSeqTarget(WayPoint last) : base(-1, true, TargetFlags.None) => m_Last = last;
protected override void OnTarget(Mobile from, object targeted)
{
if (targeted is WayPoint wayPoint)
{
if (m_Last != null)
m_Last.NextPoint = wayPoint;
}
else if (targeted is IPoint3D d)
{
Point3D p = new Point3D(d);
WayPoint point = new WayPoint(m_Last);
point.MoveToWorld(p, from.Map);
from.Target = new WayPointSeqTarget(point);
from.SendMessage(
"Target the position of the next way point in the sequence, or target a way point link the newest way point to.");
}
else
{
from.SendMessage("Target a position, or another way point.");
}
}
}
}

View file

@ -1,176 +1,176 @@
using Server.Gumps;
using Server.Multis;
using Server.Network;
namespace Server.Items
{
public abstract class BaseWindChimes : Item
{
private bool m_TurnedOn;
public BaseWindChimes(int itemID) : base(itemID)
{
}
public BaseWindChimes(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public bool TurnedOn
{
get => m_TurnedOn;
set
{
m_TurnedOn = value;
InvalidateProperties();
}
}
public static int[] Sounds { get; } = { 0x505, 0x506, 0x507 };
public override bool HandlesOnMovement => m_TurnedOn && IsLockedDown;
public override void OnMovement(Mobile m, Point3D oldLocation)
{
if (m_TurnedOn && IsLockedDown && (!m.Hidden || m.AccessLevel == AccessLevel.Player) &&
Utility.InRange(m.Location, Location, 2) && !Utility.InRange(oldLocation, Location, 2))
Effects.PlaySound(Location, Map, Sounds.RandomElement());
base.OnMovement(m, oldLocation);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (m_TurnedOn)
list.Add(502695); // turned on
else
list.Add(502696); // turned off
}
public bool IsOwner(Mobile mob) => BaseHouse.FindHouseAt(this)?.IsOwner(mob) == true;
public override void OnDoubleClick(Mobile from)
{
if (IsOwner(from))
from.SendGump(new OnOffGump(this));
else
from.SendLocalizedMessage(502691); // You must be the owner to use this.
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_TurnedOn);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_TurnedOn = reader.ReadBool();
break;
}
}
}
private class OnOffGump : Gump
{
private readonly BaseWindChimes m_Chimes;
public OnOffGump(BaseWindChimes chimes) : base(150, 200)
{
m_Chimes = chimes;
AddBackground(0, 0, 300, 150, 0xA28);
AddHtmlLocalized(45, 20, 300, 35, chimes.TurnedOn ? 1011035 : 1011034); // [De]Activate this item
AddButton(40, 53, 0xFA5, 0xFA7, 1);
AddHtmlLocalized(80, 55, 65, 35, 1011036); // OKAY
AddButton(150, 53, 0xFA5, 0xFA7, 0);
AddHtmlLocalized(190, 55, 100, 35, 1011012); // CANCEL
}
public override void OnResponse(NetState sender, RelayInfo info)
{
Mobile from = sender.Mobile;
if (info.ButtonID == 1)
{
bool newValue = !m_Chimes.TurnedOn;
m_Chimes.TurnedOn = newValue;
if (newValue && !m_Chimes.IsLockedDown)
from.SendLocalizedMessage(502693); // Remember, this only works when locked down.
}
else
{
from.SendLocalizedMessage(502694); // Cancelled action.
}
}
}
}
public class WindChimes : BaseWindChimes
{
[Constructible]
public WindChimes() : base(0x2832)
{
}
public WindChimes(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1030290;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class FancyWindChimes : BaseWindChimes
{
[Constructible]
public FancyWindChimes() : base(0x2833)
{
}
public FancyWindChimes(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1030291;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
using Server.Gumps;
using Server.Multis;
using Server.Network;
namespace Server.Items
{
public abstract class BaseWindChimes : Item
{
private bool m_TurnedOn;
public BaseWindChimes(int itemID) : base(itemID)
{
}
public BaseWindChimes(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public bool TurnedOn
{
get => m_TurnedOn;
set
{
m_TurnedOn = value;
InvalidateProperties();
}
}
public static int[] Sounds { get; } = { 0x505, 0x506, 0x507 };
public override bool HandlesOnMovement => m_TurnedOn && IsLockedDown;
public override void OnMovement(Mobile m, Point3D oldLocation)
{
if (m_TurnedOn && IsLockedDown && (!m.Hidden || m.AccessLevel == AccessLevel.Player) &&
Utility.InRange(m.Location, Location, 2) && !Utility.InRange(oldLocation, Location, 2))
Effects.PlaySound(Location, Map, Sounds.RandomElement());
base.OnMovement(m, oldLocation);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (m_TurnedOn)
list.Add(502695); // turned on
else
list.Add(502696); // turned off
}
public bool IsOwner(Mobile mob) => BaseHouse.FindHouseAt(this)?.IsOwner(mob) == true;
public override void OnDoubleClick(Mobile from)
{
if (IsOwner(from))
from.SendGump(new OnOffGump(this));
else
from.SendLocalizedMessage(502691); // You must be the owner to use this.
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_TurnedOn);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_TurnedOn = reader.ReadBool();
break;
}
}
}
private class OnOffGump : Gump
{
private readonly BaseWindChimes m_Chimes;
public OnOffGump(BaseWindChimes chimes) : base(150, 200)
{
m_Chimes = chimes;
AddBackground(0, 0, 300, 150, 0xA28);
AddHtmlLocalized(45, 20, 300, 35, chimes.TurnedOn ? 1011035 : 1011034); // [De]Activate this item
AddButton(40, 53, 0xFA5, 0xFA7, 1);
AddHtmlLocalized(80, 55, 65, 35, 1011036); // OKAY
AddButton(150, 53, 0xFA5, 0xFA7, 0);
AddHtmlLocalized(190, 55, 100, 35, 1011012); // CANCEL
}
public override void OnResponse(NetState sender, RelayInfo info)
{
Mobile from = sender.Mobile;
if (info.ButtonID == 1)
{
bool newValue = !m_Chimes.TurnedOn;
m_Chimes.TurnedOn = newValue;
if (newValue && !m_Chimes.IsLockedDown)
from.SendLocalizedMessage(502693); // Remember, this only works when locked down.
}
else
{
from.SendLocalizedMessage(502694); // Cancelled action.
}
}
}
}
public class WindChimes : BaseWindChimes
{
[Constructible]
public WindChimes() : base(0x2832)
{
}
public WindChimes(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1030290;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class FancyWindChimes : BaseWindChimes
{
[Constructible]
public FancyWindChimes() : base(0x2833)
{
}
public FancyWindChimes(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1030291;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,32 +1,32 @@
namespace Server.Items
{
public class AmeliasToolbox : TinkerTools
{
[Constructible]
public AmeliasToolbox() : base(500)
{
LootType = LootType.Blessed;
Hue = 1895; // TODO check
}
public AmeliasToolbox(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077749; // Amelias Toolbox
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class AmeliasToolbox : TinkerTools
{
[Constructible]
public AmeliasToolbox() : base(500)
{
LootType = LootType.Blessed;
Hue = 1895; // TODO check
}
public AmeliasToolbox(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077749; // Amelias Toolbox
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,40 +1,40 @@
namespace Server.Items
{
public class ArmsOfArmstrong : LeatherArms
{
[Constructible]
public ArmsOfArmstrong()
{
LootType = LootType.Blessed;
Attributes.BonusStr = 3;
Attributes.RegenHits = 1;
}
public ArmsOfArmstrong(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077675; // Arms of Armstrong
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class ArmsOfArmstrong : LeatherArms
{
[Constructible]
public ArmsOfArmstrong()
{
LootType = LootType.Blessed;
Attributes.BonusStr = 3;
Attributes.RegenHits = 1;
}
public ArmsOfArmstrong(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077675; // Arms of Armstrong
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,33 +1,33 @@
namespace Server.Items
{
public class BagOfNecromancerReagents : Bag
{
[Constructible]
public BagOfNecromancerReagents(int amount = 50)
{
DropItem(new BatWing(amount));
DropItem(new GraveDust(amount));
DropItem(new DaemonBlood(amount));
DropItem(new NoxCrystal(amount));
DropItem(new PigIron(amount));
}
public BagOfNecromancerReagents(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}
namespace Server.Items
{
public class BagOfNecromancerReagents : Bag
{
[Constructible]
public BagOfNecromancerReagents(int amount = 50)
{
DropItem(new BatWing(amount));
DropItem(new GraveDust(amount));
DropItem(new DaemonBlood(amount));
DropItem(new NoxCrystal(amount));
DropItem(new PigIron(amount));
}
public BagOfNecromancerReagents(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,30 +1,30 @@
namespace Server.Items
{
public class BagOfSmokeBombs : Bag
{
[Constructible]
public BagOfSmokeBombs(int amount = 20)
{
for (int i = 0; i < amount; ++i)
DropItem(new SmokeBomb());
}
public BagOfSmokeBombs(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}
namespace Server.Items
{
public class BagOfSmokeBombs : Bag
{
[Constructible]
public BagOfSmokeBombs(int amount = 20)
{
for (int i = 0; i < amount; ++i)
DropItem(new SmokeBomb());
}
public BagOfSmokeBombs(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,37 +1,37 @@
namespace Server.Items
{
public class BraceletOfResilience : GoldBracelet
{
[Constructible]
public BraceletOfResilience()
{
LootType = LootType.Blessed;
Attributes.DefendChance = 5;
Resistances.Fire = 5;
Resistances.Cold = 5;
Resistances.Poison = 5;
Resistances.Energy = 5;
}
public BraceletOfResilience(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077627; // Bracelet of Resilience
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class BraceletOfResilience : GoldBracelet
{
[Constructible]
public BraceletOfResilience()
{
LootType = LootType.Blessed;
Attributes.DefendChance = 5;
Resistances.Fire = 5;
Resistances.Cold = 5;
Resistances.Poison = 5;
Resistances.Energy = 5;
}
public BraceletOfResilience(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077627; // Bracelet of Resilience
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,40 +1,40 @@
namespace Server.Items
{
public class BulwarkLeggings : RingmailLegs
{
[Constructible]
public BulwarkLeggings()
{
LootType = LootType.Blessed;
Attributes.RegenStam = 1;
Attributes.RegenMana = 1;
}
public BulwarkLeggings(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077727; // Bulwark Leggings
public override int BasePhysicalResistance => 9;
public override int BaseFireResistance => 5;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 3;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class BulwarkLeggings : RingmailLegs
{
[Constructible]
public BulwarkLeggings()
{
LootType = LootType.Blessed;
Attributes.RegenStam = 1;
Attributes.RegenMana = 1;
}
public BulwarkLeggings(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077727; // Bulwark Leggings
public override int BasePhysicalResistance => 9;
public override int BaseFireResistance => 5;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 3;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,36 +1,36 @@
namespace Server.Items
{
public class ChurchillsWarMace : WarMace
{
[Constructible]
public ChurchillsWarMace()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
WeaponAttributes.LowerStatReq = 70;
}
public ChurchillsWarMace(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078062; // Churchill's War Mace
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class ChurchillsWarMace : WarMace
{
[Constructible]
public ChurchillsWarMace()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
WeaponAttributes.LowerStatReq = 70;
}
public ChurchillsWarMace(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078062; // Churchill's War Mace
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,36 +1,36 @@
namespace Server.Items
{
public class ClaspOfConcentration : SilverBracelet
{
[Constructible]
public ClaspOfConcentration()
{
LootType = LootType.Blessed;
Attributes.RegenStam = 2;
Attributes.RegenMana = 1;
Resistances.Fire = 5;
Resistances.Cold = 5;
}
public ClaspOfConcentration(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077695; // Clasp of Concentration
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class ClaspOfConcentration : SilverBracelet
{
[Constructible]
public ClaspOfConcentration()
{
LootType = LootType.Blessed;
Attributes.RegenStam = 2;
Attributes.RegenMana = 1;
Resistances.Fire = 5;
Resistances.Cold = 5;
}
public ClaspOfConcentration(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077695; // Clasp of Concentration
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,37 +1,37 @@
namespace Server.Items
{
public class EmberStaff : QuarterStaff
{
[Constructible]
public EmberStaff()
{
LootType = LootType.Blessed;
WeaponAttributes.HitFireball = 15;
WeaponAttributes.MageWeapon = 10;
Attributes.SpellChanneling = 1;
Attributes.CastSpeed = -1;
WeaponAttributes.LowerStatReq = 50;
}
public EmberStaff(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077582; // Ember Staff
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class EmberStaff : QuarterStaff
{
[Constructible]
public EmberStaff()
{
LootType = LootType.Blessed;
WeaponAttributes.HitFireball = 15;
WeaponAttributes.MageWeapon = 10;
Attributes.SpellChanneling = 1;
Attributes.CastSpeed = -1;
WeaponAttributes.LowerStatReq = 50;
}
public EmberStaff(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077582; // Ember Staff
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,41 +1,41 @@
namespace Server.Items
{
public class EscutcheonDeAriadne : MetalKiteShield
{
[Constructible]
public EscutcheonDeAriadne()
{
LootType = LootType.Blessed;
Hue = 0x8A5;
ArmorAttributes.DurabilityBonus = 49;
Attributes.ReflectPhysical = 5;
Attributes.DefendChance = 5;
}
public EscutcheonDeAriadne(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077694; // Escutcheon de Ariadne
public override int BasePhysicalResistance => 5;
public override int BaseEnergyResistance => 1;
public override int AosStrReq => 14;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class EscutcheonDeAriadne : MetalKiteShield
{
[Constructible]
public EscutcheonDeAriadne()
{
LootType = LootType.Blessed;
Hue = 0x8A5;
ArmorAttributes.DurabilityBonus = 49;
Attributes.ReflectPhysical = 5;
Attributes.DefendChance = 5;
}
public EscutcheonDeAriadne(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077694; // Escutcheon de Ariadne
public override int BasePhysicalResistance => 5;
public override int BaseEnergyResistance => 1;
public override int AosStrReq => 14;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,40 +1,40 @@
namespace Server.Items
{
public class GlovesOfSafeguarding : LeatherGloves
{
[Constructible]
public GlovesOfSafeguarding()
{
LootType = LootType.Blessed;
Attributes.BonusStam = 3;
Attributes.RegenHits = 1;
}
public GlovesOfSafeguarding(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077614; // Gloves of Safeguarding
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class GlovesOfSafeguarding : LeatherGloves
{
[Constructible]
public GlovesOfSafeguarding()
{
LootType = LootType.Blessed;
Attributes.BonusStam = 3;
Attributes.RegenHits = 1;
}
public GlovesOfSafeguarding(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077614; // Gloves of Safeguarding
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,33 +1,33 @@
namespace Server.Items
{
public class HallowedSpellbook : Spellbook
{
[Constructible]
public HallowedSpellbook() : base(0x3FFFFFFFF)
{
LootType = LootType.Blessed;
Slayer = SlayerName.Silver;
}
public HallowedSpellbook(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077620; // Hallowed Spellbook
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class HallowedSpellbook : Spellbook
{
[Constructible]
public HallowedSpellbook() : base(0x3FFFFFFFF)
{
LootType = LootType.Blessed;
Slayer = SlayerName.Silver;
}
public HallowedSpellbook(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077620; // Hallowed Spellbook
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,73 +1,73 @@
using System;
namespace Server.Items
{
[Flippable(0x13E3, 0x13E4)]
public class HammerOfHephaestus : SmithHammer
{
public static readonly TimeSpan RechargeDelay = TimeSpan.FromMinutes(5);
[Constructible]
public HammerOfHephaestus()
{
UsesRemaining = 20;
LootType = LootType.Blessed;
// TODO: Blacksmith +10 bonus when equipped
StartRechargeTimer();
}
public HammerOfHephaestus(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1077740; // Hammer of Hephaestus
public override bool BreakOnDepletion => false;
/* Note:
* On EA, it also leaves the crafting gump open when it reaches 0 charges.
* When crafting again, only then the crafting gump closes with the 1072306 system message.
*/
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack) && Parent != from) // TODO: These checks don't match EA, but they match BaseTool for now
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
else if (UsesRemaining <= 0)
from.SendLocalizedMessage(1072306); // You must wait a moment for it to recharge.
else
base.OnDoubleClick(from);
}
private void StartRechargeTimer()
{
// TODO: Needs work
// Timer.DelayCall( RechargeDelay, RechargeDelay, new TimerCallback( Recharge ) );
}
public void Recharge()
{
// TODO: Stop timer at 20? Count downtime? Something more generic so we can use it for JacobsPickaxe too (both are IUsesRemaining)?
if (UsesRemaining < 20)
++UsesRemaining;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
StartRechargeTimer();
}
}
using System;
namespace Server.Items
{
[Flippable(0x13E3, 0x13E4)]
public class HammerOfHephaestus : SmithHammer
{
public static readonly TimeSpan RechargeDelay = TimeSpan.FromMinutes(5);
[Constructible]
public HammerOfHephaestus()
{
UsesRemaining = 20;
LootType = LootType.Blessed;
// TODO: Blacksmith +10 bonus when equipped
StartRechargeTimer();
}
public HammerOfHephaestus(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1077740; // Hammer of Hephaestus
public override bool BreakOnDepletion => false;
/* Note:
* On EA, it also leaves the crafting gump open when it reaches 0 charges.
* When crafting again, only then the crafting gump closes with the 1072306 system message.
*/
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack) && Parent != from) // TODO: These checks don't match EA, but they match BaseTool for now
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
else if (UsesRemaining <= 0)
from.SendLocalizedMessage(1072306); // You must wait a moment for it to recharge.
else
base.OnDoubleClick(from);
}
private void StartRechargeTimer()
{
// TODO: Needs work
// Timer.DelayCall( RechargeDelay, RechargeDelay, new TimerCallback( Recharge ) );
}
public void Recharge()
{
// TODO: Stop timer at 20? Count downtime? Something more generic so we can use it for JacobsPickaxe too (both are IUsesRemaining)?
if (UsesRemaining < 20)
++UsesRemaining;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
StartRechargeTimer();
}
}
}

View file

@ -1,40 +1,40 @@
namespace Server.Items
{
public class HealersTouch : LeatherGloves
{
[Constructible]
public HealersTouch()
{
LootType = LootType.Blessed;
Attributes.BonusStam = 3;
Attributes.ReflectPhysical = 5;
}
public HealersTouch(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077684; // Healer's Touch
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class HealersTouch : LeatherGloves
{
[Constructible]
public HealersTouch()
{
LootType = LootType.Blessed;
Attributes.BonusStam = 3;
Attributes.ReflectPhysical = 5;
}
public HealersTouch(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077684; // Healer's Touch
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,36 +1,36 @@
namespace Server.Items
{
public class Heartseeker : CompositeBow
{
[Constructible]
public Heartseeker()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
WeaponAttributes.LowerStatReq = 70;
}
public Heartseeker(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078210; // Heartseeker
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class Heartseeker : CompositeBow
{
[Constructible]
public Heartseeker()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
WeaponAttributes.LowerStatReq = 70;
}
public Heartseeker(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078210; // Heartseeker
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,37 +1,37 @@
namespace Server.Items
{
public class JacobsPickaxe : Pickaxe
{
// TODO: Recharges 1 use every 5 minutes. Doesn't break when it reaches 0, you get a system message "You must wait a moment for it to recharge" 1072306 if you attempt to use it with no uses remaining.
[Constructible]
public JacobsPickaxe()
{
UsesRemaining = 20;
LootType = LootType.Blessed;
SkillBonuses.SetValues(0, SkillName.Mining, 10.0);
}
public JacobsPickaxe(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1077758; // Jacob's Pickaxe
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class JacobsPickaxe : Pickaxe
{
// TODO: Recharges 1 use every 5 minutes. Doesn't break when it reaches 0, you get a system message "You must wait a moment for it to recharge" 1072306 if you attempt to use it with no uses remaining.
[Constructible]
public JacobsPickaxe()
{
UsesRemaining = 20;
LootType = LootType.Blessed;
SkillBonuses.SetValues(0, SkillName.Mining, 10.0);
}
public JacobsPickaxe(Serial serial)
: base(serial)
{
}
public override int LabelNumber => 1077758; // Jacob's Pickaxe
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,35 +1,35 @@
namespace Server.Items
{
public class JocklesQuicksword : Longsword
{
[Constructible]
public JocklesQuicksword()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
}
public JocklesQuicksword(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077666; // Jockles' Quicksword
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class JocklesQuicksword : Longsword
{
[Constructible]
public JocklesQuicksword()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
}
public JocklesQuicksword(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077666; // Jockles' Quicksword
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,40 +1,40 @@
namespace Server.Items
{
public class PhilosophersHat : WizardsHat
{
[Constructible]
public PhilosophersHat()
{
LootType = LootType.Blessed;
Attributes.RegenMana = 1;
Attributes.LowerRegCost = 7;
}
public PhilosophersHat(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077602; // Philosopher's Hat
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class PhilosophersHat : WizardsHat
{
[Constructible]
public PhilosophersHat()
{
LootType = LootType.Blessed;
Attributes.RegenMana = 1;
Attributes.LowerRegCost = 7;
}
public PhilosophersHat(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077602; // Philosopher's Hat
public override int BasePhysicalResistance => 5;
public override int BaseFireResistance => 5;
public override int BaseColdResistance => 9;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,35 +1,35 @@
namespace Server.Items
{
public class RecarosRiposte : WarFork
{
[Constructible]
public RecarosRiposte()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
}
public RecarosRiposte(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078195; // Recaro's Riposte
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class RecarosRiposte : WarFork
{
[Constructible]
public RecarosRiposte()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
}
public RecarosRiposte(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078195; // Recaro's Riposte
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,35 +1,35 @@
namespace Server.Items
{
public class RingOfTheSavant : GoldRing
{
[Constructible]
public RingOfTheSavant()
{
LootType = LootType.Blessed;
Attributes.BonusInt = 3;
Attributes.CastRecovery = 1;
Attributes.CastSpeed = 1;
}
public RingOfTheSavant(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077608; // Ring of the Savant
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class RingOfTheSavant : GoldRing
{
[Constructible]
public RingOfTheSavant()
{
LootType = LootType.Blessed;
Attributes.BonusInt = 3;
Attributes.CastRecovery = 1;
Attributes.CastSpeed = 1;
}
public RingOfTheSavant(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077608; // Ring of the Savant
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,35 +1,35 @@
namespace Server.Items
{
public class SilverSerpentBlade : Kryss
{
[Constructible]
public SilverSerpentBlade()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
}
public SilverSerpentBlade(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078163; // Silver Serpent Blade
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class SilverSerpentBlade : Kryss
{
[Constructible]
public SilverSerpentBlade()
{
LootType = LootType.Blessed;
Attributes.AttackChance = 5;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
}
public SilverSerpentBlade(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078163; // Silver Serpent Blade
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,38 +1,38 @@
namespace Server.Items
{
public class TheDragonsTail : NoDachi
{
[Constructible]
public TheDragonsTail()
{
LootType = LootType.Blessed;
WeaponAttributes.HitLeechStam = 16;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
}
public TheDragonsTail(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078015; // The Dragon's Tail
public override int InitMinHits => 80;
public override int InitMaxHits => 80;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class TheDragonsTail : NoDachi
{
[Constructible]
public TheDragonsTail()
{
LootType = LootType.Blessed;
WeaponAttributes.HitLeechStam = 16;
Attributes.WeaponSpeed = 10;
Attributes.WeaponDamage = 25;
}
public TheDragonsTail(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078015; // The Dragon's Tail
public override int InitMinHits => 80;
public override int InitMaxHits => 80;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,40 +1,40 @@
namespace Server.Items
{
public class TunicOfGuarding : LeatherChest
{
[Constructible]
public TunicOfGuarding()
{
LootType = LootType.Blessed;
Attributes.BonusHits = 2;
Attributes.ReflectPhysical = 5;
}
public TunicOfGuarding(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077693; // Tunic of Guarding
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class TunicOfGuarding : LeatherChest
{
[Constructible]
public TunicOfGuarding()
{
LootType = LootType.Blessed;
Attributes.BonusHits = 2;
Attributes.ReflectPhysical = 5;
}
public TunicOfGuarding(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1077693; // Tunic of Guarding
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 5;
public override int BasePoisonResistance => 5;
public override int BaseEnergyResistance => 5;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,39 +1,39 @@
namespace Server.Items
{
public class TwilightJacket : LeatherNinjaJacket
{
[Constructible]
public TwilightJacket()
{
LootType = LootType.Blessed;
Attributes.ReflectPhysical = 5;
}
public TwilightJacket(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078183; // Twilight Jacket
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 12;
public override int BaseColdResistance => 3;
public override int BasePoisonResistance => 3;
public override int BaseEnergyResistance => 3;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class TwilightJacket : LeatherNinjaJacket
{
[Constructible]
public TwilightJacket()
{
LootType = LootType.Blessed;
Attributes.ReflectPhysical = 5;
}
public TwilightJacket(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078183; // Twilight Jacket
public override int BasePhysicalResistance => 6;
public override int BaseFireResistance => 12;
public override int BaseColdResistance => 3;
public override int BasePoisonResistance => 3;
public override int BaseEnergyResistance => 3;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,34 +1,34 @@
namespace Server.Items
{
public class WalkersLeggings : LeatherNinjaPants
{
[Constructible]
public WalkersLeggings() => LootType = LootType.Blessed;
public WalkersLeggings(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078222; // Walker's Leggings
public override int BasePhysicalResistance => 10;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 3;
public override int BaseEnergyResistance => 3;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class WalkersLeggings : LeatherNinjaPants
{
[Constructible]
public WalkersLeggings() => LootType = LootType.Blessed;
public WalkersLeggings(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1078222; // Walker's Leggings
public override int BasePhysicalResistance => 10;
public override int BaseFireResistance => 6;
public override int BaseColdResistance => 6;
public override int BasePoisonResistance => 3;
public override int BaseEnergyResistance => 3;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,50 +1,50 @@
namespace Server.Items
{
public class SmallEmptyPot : Item
{
[Constructible]
public SmallEmptyPot() : base(0x11C6) => Weight = 100;
public SmallEmptyPot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class LargeEmptyPot : Item
{
[Constructible]
public LargeEmptyPot() : base(0x11C7) => Weight = 6;
public LargeEmptyPot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
namespace Server.Items
{
public class SmallEmptyPot : Item
{
[Constructible]
public SmallEmptyPot() : base(0x11C6) => Weight = 100;
public SmallEmptyPot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class LargeEmptyPot : Item
{
[Constructible]
public LargeEmptyPot() : base(0x11C7) => Weight = 6;
public LargeEmptyPot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,146 +1,146 @@
namespace Server.Items
{
public class PottedCactus : Item
{
[Constructible]
public PottedCactus() : base(0x1E0F) => Weight = 100;
public PottedCactus(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus1 : Item
{
[Constructible]
public PottedCactus1() : base(0x1E10) => Weight = 100;
public PottedCactus1(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus2 : Item
{
[Constructible]
public PottedCactus2() : base(0x1E11) => Weight = 100;
public PottedCactus2(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus3 : Item
{
[Constructible]
public PottedCactus3() : base(0x1E12) => Weight = 100;
public PottedCactus3(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus4 : Item
{
[Constructible]
public PottedCactus4() : base(0x1E13) => Weight = 100;
public PottedCactus4(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus5 : Item
{
[Constructible]
public PottedCactus5() : base(0x1E14) => Weight = 100;
public PottedCactus5(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
namespace Server.Items
{
public class PottedCactus : Item
{
[Constructible]
public PottedCactus() : base(0x1E0F) => Weight = 100;
public PottedCactus(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus1 : Item
{
[Constructible]
public PottedCactus1() : base(0x1E10) => Weight = 100;
public PottedCactus1(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus2 : Item
{
[Constructible]
public PottedCactus2() : base(0x1E11) => Weight = 100;
public PottedCactus2(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus3 : Item
{
[Constructible]
public PottedCactus3() : base(0x1E12) => Weight = 100;
public PottedCactus3(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus4 : Item
{
[Constructible]
public PottedCactus4() : base(0x1E13) => Weight = 100;
public PottedCactus4(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedCactus5 : Item
{
[Constructible]
public PottedCactus5() : base(0x1E14) => Weight = 100;
public PottedCactus5(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,74 +1,74 @@
namespace Server.Items
{
public class PottedPlant : Item
{
[Constructible]
public PottedPlant() : base(0x11CA) => Weight = 100;
public PottedPlant(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedPlant1 : Item
{
[Constructible]
public PottedPlant1() : base(0x11CB) => Weight = 100;
public PottedPlant1(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedPlant2 : Item
{
[Constructible]
public PottedPlant2() : base(0x11CC) => Weight = 100;
public PottedPlant2(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
namespace Server.Items
{
public class PottedPlant : Item
{
[Constructible]
public PottedPlant() : base(0x11CA) => Weight = 100;
public PottedPlant(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedPlant1 : Item
{
[Constructible]
public PottedPlant1() : base(0x11CB) => Weight = 100;
public PottedPlant1(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedPlant2 : Item
{
[Constructible]
public PottedPlant2() : base(0x11CC) => Weight = 100;
public PottedPlant2(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,50 +1,50 @@
namespace Server.Items
{
public class PottedTree : Item
{
[Constructible]
public PottedTree() : base(0x11C8) => Weight = 100;
public PottedTree(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedTree1 : Item
{
[Constructible]
public PottedTree1() : base(0x11C9) => Weight = 100;
public PottedTree1(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
namespace Server.Items
{
public class PottedTree : Item
{
[Constructible]
public PottedTree() : base(0x11C8) => Weight = 100;
public PottedTree(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PottedTree1 : Item
{
[Constructible]
public PottedTree1() : base(0x11C9) => Weight = 100;
public PottedTree1(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,441 +1,441 @@
using System;
using Server.Engines.Craft;
namespace Server.Items
{
public class BaseQuiver : Container, ICraftable
{
private static readonly Type[] m_Ammo =
{
typeof(Arrow), typeof(Bolt)
};
private int m_Capacity;
private Mobile m_Crafter;
private int m_DamageIncrease;
private int m_LowerAmmoCost;
private ClothingQuality m_Quality;
private int m_WeightReduction;
public BaseQuiver(int itemID = 0x2FB7) : base(itemID)
{
Weight = 2.0;
Capacity = 500;
Layer = Layer.Cloak;
Attributes = new AosAttributes(this);
DamageIncrease = 10;
}
public BaseQuiver(Serial serial) : base(serial)
{
}
public override int DefaultGumpID => 0x108;
public override int DefaultMaxItems => 1;
public override int DefaultMaxWeight => 50;
public override double DefaultWeight => 2.0;
[CommandProperty(AccessLevel.GameMaster)]
public AosAttributes Attributes { get; private set; }
[CommandProperty(AccessLevel.GameMaster)]
public int Capacity
{
get => m_Capacity;
set
{
m_Capacity = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int LowerAmmoCost
{
get => m_LowerAmmoCost;
set
{
m_LowerAmmoCost = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int WeightReduction
{
get => m_WeightReduction;
set
{
m_WeightReduction = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int DamageIncrease
{
get => m_DamageIncrease;
set
{
m_DamageIncrease = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Crafter
{
get => m_Crafter;
set
{
m_Crafter = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public ClothingQuality Quality
{
get => m_Quality;
set
{
m_Quality = value;
InvalidateProperties();
}
}
public Item Ammo => Items.Count > 0 ? Items[0] : null;
public virtual int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes,
BaseTool tool, CraftItem craftItem, int resHue)
{
Quality = (ClothingQuality)quality;
if (makersMark)
Crafter = from;
return quality;
}
public override void OnAfterDuped(Item newItem)
{
if (!(newItem is BaseQuiver quiver))
return;
quiver.Attributes = new AosAttributes(newItem, Attributes);
}
public override void UpdateTotal(Item sender, TotalType type, int delta)
{
InvalidateProperties();
base.UpdateTotal(sender, type, delta);
}
public override int GetTotal(TotalType type)
{
int total = base.GetTotal(type);
if (type == TotalType.Weight)
total -= total * m_WeightReduction / 100;
return total;
}
public bool CheckType(Item item)
{
Type type = item.GetType();
Item ammo = Ammo;
if (ammo != null)
{
if (ammo.GetType() == type)
return true;
}
else
{
for (int i = 0; i < m_Ammo.Length; i++)
if (type == m_Ammo[i])
return true;
}
return false;
}
public override bool CheckHold(Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight)
{
if (CheckType(item))
return (Items.Count >= DefaultMaxItems && !checkItems && Ammo?.Deleted == false &&
Ammo.Amount + item.Amount <= m_Capacity) || (item.Amount <= m_Capacity &&
base.CheckHold(m, item, message, checkItems, plusItems, plusWeight));
if (message)
m.SendLocalizedMessage(1074836); // The container can not hold that type of object.
return false;
}
public override void AddItem(Item dropped)
{
base.AddItem(dropped);
InvalidateWeight();
}
public override void RemoveItem(Item dropped)
{
base.RemoveItem(dropped);
InvalidateWeight();
}
public override void OnAdded(IEntity parent)
{
if (parent is Mobile mob) Attributes.AddStatBonuses(mob);
}
public override void OnRemoved(IEntity parent)
{
if (parent is Mobile mob) Attributes.RemoveStatBonuses(mob);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (m_Crafter != null)
list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
if (m_Quality == ClothingQuality.Exceptional)
list.Add(1063341); // exceptional
Item ammo = Ammo;
if (ammo != null)
{
if (ammo is Arrow)
list.Add(1075265, "{0}\t{1}", ammo.Amount, Capacity); // Ammo: ~1_QUANTITY~/~2_CAPACITY~ arrows
else if (ammo is Bolt)
list.Add(1075266, "{0}\t{1}", ammo.Amount, Capacity); // Ammo: ~1_QUANTITY~/~2_CAPACITY~ bolts
}
else
{
list.Add(1075265, "{0}\t{1}", 0, Capacity); // Ammo: ~1_QUANTITY~/~2_CAPACITY~ arrows
}
int prop;
if ((prop = m_DamageIncrease) != 0)
list.Add(1074762, prop.ToString()); // Damage modifier: ~1_PERCENT~%
int phys, fire, cold, pois, nrgy, chaos, direct;
phys = fire = cold = pois = nrgy = chaos = direct = 0;
AlterBowDamage(ref phys, ref fire, ref cold, ref pois, ref nrgy, ref chaos, ref direct);
if (phys != 0)
list.Add(1060403, phys.ToString()); // physical damage ~1_val~%
if (fire != 0)
list.Add(1060405, fire.ToString()); // fire damage ~1_val~%
if (cold != 0)
list.Add(1060404, cold.ToString()); // cold damage ~1_val~%
if (pois != 0)
list.Add(1060406, pois.ToString()); // poison damage ~1_val~%
if (nrgy != 0)
list.Add(1060407, nrgy.ToString()); // energy damage ~1_val
if (chaos != 0)
list.Add(1072846, chaos.ToString()); // chaos damage ~1_val~%
if (direct != 0)
list.Add(1079978, direct.ToString()); // Direct Damage: ~1_PERCENT~%
list.Add(1075085); // Requirement: Mondain's Legacy
if ((prop = Attributes.DefendChance) != 0)
list.Add(1060408, prop.ToString()); // defense chance increase ~1_val~%
if ((prop = Attributes.BonusDex) != 0)
list.Add(1060409, prop.ToString()); // dexterity bonus ~1_val~
if ((prop = Attributes.EnhancePotions) != 0)
list.Add(1060411, prop.ToString()); // enhance potions ~1_val~%
if ((prop = Attributes.CastRecovery) != 0)
list.Add(1060412, prop.ToString()); // faster cast recovery ~1_val~
if ((prop = Attributes.CastSpeed) != 0)
list.Add(1060413, prop.ToString()); // faster casting ~1_val~
if ((prop = Attributes.AttackChance) != 0)
list.Add(1060415, prop.ToString()); // hit chance increase ~1_val~%
if ((prop = Attributes.BonusHits) != 0)
list.Add(1060431, prop.ToString()); // hit point increase ~1_val~
if ((prop = Attributes.BonusInt) != 0)
list.Add(1060432, prop.ToString()); // intelligence bonus ~1_val~
if ((prop = Attributes.LowerManaCost) != 0)
list.Add(1060433, prop.ToString()); // lower mana cost ~1_val~%
if ((prop = Attributes.LowerRegCost) != 0)
list.Add(1060434, prop.ToString()); // lower reagent cost ~1_val~%
if ((prop = Attributes.Luck) != 0)
list.Add(1060436, prop.ToString()); // luck ~1_val~
if ((prop = Attributes.BonusMana) != 0)
list.Add(1060439, prop.ToString()); // mana increase ~1_val~
if ((prop = Attributes.RegenMana) != 0)
list.Add(1060440, prop.ToString()); // mana regeneration ~1_val~
if ((prop = Attributes.NightSight) != 0)
list.Add(1060441); // night sight
if ((prop = Attributes.ReflectPhysical) != 0)
list.Add(1060442, prop.ToString()); // reflect physical damage ~1_val~%
if ((prop = Attributes.RegenStam) != 0)
list.Add(1060443, prop.ToString()); // stamina regeneration ~1_val~
if ((prop = Attributes.RegenHits) != 0)
list.Add(1060444, prop.ToString()); // hit point regeneration ~1_val~
if ((prop = Attributes.SpellDamage) != 0)
list.Add(1060483, prop.ToString()); // spell damage increase ~1_val~%
if ((prop = Attributes.BonusStam) != 0)
list.Add(1060484, prop.ToString()); // stamina increase ~1_val~
if ((prop = Attributes.BonusStr) != 0)
list.Add(1060485, prop.ToString()); // strength bonus ~1_val~
if ((prop = Attributes.WeaponSpeed) != 0)
list.Add(1060486, prop.ToString()); // swing speed increase ~1_val~%
if ((prop = m_LowerAmmoCost) > 0)
list.Add(1075208, prop.ToString()); // Lower Ammo Cost ~1_Percentage~%
double weight = ammo != null ? ammo.Weight + ammo.Amount : 0;
list.Add(1072241, "{0}\t{1}\t{2}\t{3}", Items.Count, DefaultMaxItems, (int)weight,
DefaultMaxWeight); // Contents: ~1_COUNT~/~2_MAXCOUNT items, ~3_WEIGHT~/~4_MAXWEIGHT~ stones
if ((prop = m_WeightReduction) != 0)
list.Add(1072210, prop.ToString()); // Weight reduction: ~1_PERCENTAGE~%
}
private static void SetSaveFlag(ref SaveFlag flags, SaveFlag toSet, bool setIf)
{
if (setIf)
flags |= toSet;
}
private static bool GetSaveFlag(SaveFlag flags, SaveFlag toGet) => (flags & toGet) != 0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
SaveFlag flags = SaveFlag.None;
SetSaveFlag(ref flags, SaveFlag.Attributes, !Attributes.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.LowerAmmoCost, m_LowerAmmoCost != 0);
SetSaveFlag(ref flags, SaveFlag.WeightReduction, m_WeightReduction != 0);
SetSaveFlag(ref flags, SaveFlag.DamageIncrease, m_DamageIncrease != 0);
SetSaveFlag(ref flags, SaveFlag.Crafter, m_Crafter != null);
SetSaveFlag(ref flags, SaveFlag.Quality, true);
SetSaveFlag(ref flags, SaveFlag.Capacity, m_Capacity > 0);
writer.WriteEncodedInt((int)flags);
if (GetSaveFlag(flags, SaveFlag.Attributes))
Attributes.Serialize(writer);
if (GetSaveFlag(flags, SaveFlag.LowerAmmoCost))
writer.Write(m_LowerAmmoCost);
if (GetSaveFlag(flags, SaveFlag.WeightReduction))
writer.Write(m_WeightReduction);
if (GetSaveFlag(flags, SaveFlag.DamageIncrease))
writer.Write(m_DamageIncrease);
if (GetSaveFlag(flags, SaveFlag.Crafter))
writer.Write(m_Crafter);
if (GetSaveFlag(flags, SaveFlag.Quality))
writer.Write((int)m_Quality);
if (GetSaveFlag(flags, SaveFlag.Capacity))
writer.Write(m_Capacity);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
SaveFlag flags = (SaveFlag)reader.ReadEncodedInt();
if (GetSaveFlag(flags, SaveFlag.Attributes))
Attributes = new AosAttributes(this, reader);
else
Attributes = new AosAttributes(this);
if (GetSaveFlag(flags, SaveFlag.LowerAmmoCost))
m_LowerAmmoCost = reader.ReadInt();
if (GetSaveFlag(flags, SaveFlag.WeightReduction))
m_WeightReduction = reader.ReadInt();
if (GetSaveFlag(flags, SaveFlag.DamageIncrease))
m_DamageIncrease = reader.ReadInt();
if (GetSaveFlag(flags, SaveFlag.Crafter))
m_Crafter = reader.ReadMobile();
if (GetSaveFlag(flags, SaveFlag.Quality))
m_Quality = (ClothingQuality)reader.ReadInt();
if (GetSaveFlag(flags, SaveFlag.Capacity))
m_Capacity = reader.ReadInt();
}
public virtual void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
}
public void InvalidateWeight()
{
if (RootParent is Mobile m) m.UpdateTotals();
}
[Flags]
private enum SaveFlag
{
None = 0x00000000,
Attributes = 0x00000001,
DamageModifier = 0x00000002,
LowerAmmoCost = 0x00000004,
WeightReduction = 0x00000008,
Crafter = 0x00000010,
Quality = 0x00000020,
Capacity = 0x00000040,
DamageIncrease = 0x00000080
}
}
}
using System;
using Server.Engines.Craft;
namespace Server.Items
{
public class BaseQuiver : Container, ICraftable
{
private static readonly Type[] m_Ammo =
{
typeof(Arrow), typeof(Bolt)
};
private int m_Capacity;
private Mobile m_Crafter;
private int m_DamageIncrease;
private int m_LowerAmmoCost;
private ClothingQuality m_Quality;
private int m_WeightReduction;
public BaseQuiver(int itemID = 0x2FB7) : base(itemID)
{
Weight = 2.0;
Capacity = 500;
Layer = Layer.Cloak;
Attributes = new AosAttributes(this);
DamageIncrease = 10;
}
public BaseQuiver(Serial serial) : base(serial)
{
}
public override int DefaultGumpID => 0x108;
public override int DefaultMaxItems => 1;
public override int DefaultMaxWeight => 50;
public override double DefaultWeight => 2.0;
[CommandProperty(AccessLevel.GameMaster)]
public AosAttributes Attributes { get; private set; }
[CommandProperty(AccessLevel.GameMaster)]
public int Capacity
{
get => m_Capacity;
set
{
m_Capacity = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int LowerAmmoCost
{
get => m_LowerAmmoCost;
set
{
m_LowerAmmoCost = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int WeightReduction
{
get => m_WeightReduction;
set
{
m_WeightReduction = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int DamageIncrease
{
get => m_DamageIncrease;
set
{
m_DamageIncrease = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Crafter
{
get => m_Crafter;
set
{
m_Crafter = value;
InvalidateProperties();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public ClothingQuality Quality
{
get => m_Quality;
set
{
m_Quality = value;
InvalidateProperties();
}
}
public Item Ammo => Items.Count > 0 ? Items[0] : null;
public virtual int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes,
BaseTool tool, CraftItem craftItem, int resHue)
{
Quality = (ClothingQuality)quality;
if (makersMark)
Crafter = from;
return quality;
}
public override void OnAfterDuped(Item newItem)
{
if (!(newItem is BaseQuiver quiver))
return;
quiver.Attributes = new AosAttributes(newItem, Attributes);
}
public override void UpdateTotal(Item sender, TotalType type, int delta)
{
InvalidateProperties();
base.UpdateTotal(sender, type, delta);
}
public override int GetTotal(TotalType type)
{
int total = base.GetTotal(type);
if (type == TotalType.Weight)
total -= total * m_WeightReduction / 100;
return total;
}
public bool CheckType(Item item)
{
Type type = item.GetType();
Item ammo = Ammo;
if (ammo != null)
{
if (ammo.GetType() == type)
return true;
}
else
{
for (int i = 0; i < m_Ammo.Length; i++)
if (type == m_Ammo[i])
return true;
}
return false;
}
public override bool CheckHold(Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight)
{
if (CheckType(item))
return (Items.Count >= DefaultMaxItems && !checkItems && Ammo?.Deleted == false &&
Ammo.Amount + item.Amount <= m_Capacity) || (item.Amount <= m_Capacity &&
base.CheckHold(m, item, message, checkItems, plusItems, plusWeight));
if (message)
m.SendLocalizedMessage(1074836); // The container can not hold that type of object.
return false;
}
public override void AddItem(Item dropped)
{
base.AddItem(dropped);
InvalidateWeight();
}
public override void RemoveItem(Item dropped)
{
base.RemoveItem(dropped);
InvalidateWeight();
}
public override void OnAdded(IEntity parent)
{
if (parent is Mobile mob) Attributes.AddStatBonuses(mob);
}
public override void OnRemoved(IEntity parent)
{
if (parent is Mobile mob) Attributes.RemoveStatBonuses(mob);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (m_Crafter != null)
list.Add(1050043, m_Crafter.Name); // crafted by ~1_NAME~
if (m_Quality == ClothingQuality.Exceptional)
list.Add(1063341); // exceptional
Item ammo = Ammo;
if (ammo != null)
{
if (ammo is Arrow)
list.Add(1075265, "{0}\t{1}", ammo.Amount, Capacity); // Ammo: ~1_QUANTITY~/~2_CAPACITY~ arrows
else if (ammo is Bolt)
list.Add(1075266, "{0}\t{1}", ammo.Amount, Capacity); // Ammo: ~1_QUANTITY~/~2_CAPACITY~ bolts
}
else
{
list.Add(1075265, "{0}\t{1}", 0, Capacity); // Ammo: ~1_QUANTITY~/~2_CAPACITY~ arrows
}
int prop;
if ((prop = m_DamageIncrease) != 0)
list.Add(1074762, prop.ToString()); // Damage modifier: ~1_PERCENT~%
int phys, fire, cold, pois, nrgy, chaos, direct;
phys = fire = cold = pois = nrgy = chaos = direct = 0;
AlterBowDamage(ref phys, ref fire, ref cold, ref pois, ref nrgy, ref chaos, ref direct);
if (phys != 0)
list.Add(1060403, phys.ToString()); // physical damage ~1_val~%
if (fire != 0)
list.Add(1060405, fire.ToString()); // fire damage ~1_val~%
if (cold != 0)
list.Add(1060404, cold.ToString()); // cold damage ~1_val~%
if (pois != 0)
list.Add(1060406, pois.ToString()); // poison damage ~1_val~%
if (nrgy != 0)
list.Add(1060407, nrgy.ToString()); // energy damage ~1_val
if (chaos != 0)
list.Add(1072846, chaos.ToString()); // chaos damage ~1_val~%
if (direct != 0)
list.Add(1079978, direct.ToString()); // Direct Damage: ~1_PERCENT~%
list.Add(1075085); // Requirement: Mondain's Legacy
if ((prop = Attributes.DefendChance) != 0)
list.Add(1060408, prop.ToString()); // defense chance increase ~1_val~%
if ((prop = Attributes.BonusDex) != 0)
list.Add(1060409, prop.ToString()); // dexterity bonus ~1_val~
if ((prop = Attributes.EnhancePotions) != 0)
list.Add(1060411, prop.ToString()); // enhance potions ~1_val~%
if ((prop = Attributes.CastRecovery) != 0)
list.Add(1060412, prop.ToString()); // faster cast recovery ~1_val~
if ((prop = Attributes.CastSpeed) != 0)
list.Add(1060413, prop.ToString()); // faster casting ~1_val~
if ((prop = Attributes.AttackChance) != 0)
list.Add(1060415, prop.ToString()); // hit chance increase ~1_val~%
if ((prop = Attributes.BonusHits) != 0)
list.Add(1060431, prop.ToString()); // hit point increase ~1_val~
if ((prop = Attributes.BonusInt) != 0)
list.Add(1060432, prop.ToString()); // intelligence bonus ~1_val~
if ((prop = Attributes.LowerManaCost) != 0)
list.Add(1060433, prop.ToString()); // lower mana cost ~1_val~%
if ((prop = Attributes.LowerRegCost) != 0)
list.Add(1060434, prop.ToString()); // lower reagent cost ~1_val~%
if ((prop = Attributes.Luck) != 0)
list.Add(1060436, prop.ToString()); // luck ~1_val~
if ((prop = Attributes.BonusMana) != 0)
list.Add(1060439, prop.ToString()); // mana increase ~1_val~
if ((prop = Attributes.RegenMana) != 0)
list.Add(1060440, prop.ToString()); // mana regeneration ~1_val~
if ((prop = Attributes.NightSight) != 0)
list.Add(1060441); // night sight
if ((prop = Attributes.ReflectPhysical) != 0)
list.Add(1060442, prop.ToString()); // reflect physical damage ~1_val~%
if ((prop = Attributes.RegenStam) != 0)
list.Add(1060443, prop.ToString()); // stamina regeneration ~1_val~
if ((prop = Attributes.RegenHits) != 0)
list.Add(1060444, prop.ToString()); // hit point regeneration ~1_val~
if ((prop = Attributes.SpellDamage) != 0)
list.Add(1060483, prop.ToString()); // spell damage increase ~1_val~%
if ((prop = Attributes.BonusStam) != 0)
list.Add(1060484, prop.ToString()); // stamina increase ~1_val~
if ((prop = Attributes.BonusStr) != 0)
list.Add(1060485, prop.ToString()); // strength bonus ~1_val~
if ((prop = Attributes.WeaponSpeed) != 0)
list.Add(1060486, prop.ToString()); // swing speed increase ~1_val~%
if ((prop = m_LowerAmmoCost) > 0)
list.Add(1075208, prop.ToString()); // Lower Ammo Cost ~1_Percentage~%
double weight = ammo != null ? ammo.Weight + ammo.Amount : 0;
list.Add(1072241, "{0}\t{1}\t{2}\t{3}", Items.Count, DefaultMaxItems, (int)weight,
DefaultMaxWeight); // Contents: ~1_COUNT~/~2_MAXCOUNT items, ~3_WEIGHT~/~4_MAXWEIGHT~ stones
if ((prop = m_WeightReduction) != 0)
list.Add(1072210, prop.ToString()); // Weight reduction: ~1_PERCENTAGE~%
}
private static void SetSaveFlag(ref SaveFlag flags, SaveFlag toSet, bool setIf)
{
if (setIf)
flags |= toSet;
}
private static bool GetSaveFlag(SaveFlag flags, SaveFlag toGet) => (flags & toGet) != 0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
SaveFlag flags = SaveFlag.None;
SetSaveFlag(ref flags, SaveFlag.Attributes, !Attributes.IsEmpty);
SetSaveFlag(ref flags, SaveFlag.LowerAmmoCost, m_LowerAmmoCost != 0);
SetSaveFlag(ref flags, SaveFlag.WeightReduction, m_WeightReduction != 0);
SetSaveFlag(ref flags, SaveFlag.DamageIncrease, m_DamageIncrease != 0);
SetSaveFlag(ref flags, SaveFlag.Crafter, m_Crafter != null);
SetSaveFlag(ref flags, SaveFlag.Quality, true);
SetSaveFlag(ref flags, SaveFlag.Capacity, m_Capacity > 0);
writer.WriteEncodedInt((int)flags);
if (GetSaveFlag(flags, SaveFlag.Attributes))
Attributes.Serialize(writer);
if (GetSaveFlag(flags, SaveFlag.LowerAmmoCost))
writer.Write(m_LowerAmmoCost);
if (GetSaveFlag(flags, SaveFlag.WeightReduction))
writer.Write(m_WeightReduction);
if (GetSaveFlag(flags, SaveFlag.DamageIncrease))
writer.Write(m_DamageIncrease);
if (GetSaveFlag(flags, SaveFlag.Crafter))
writer.Write(m_Crafter);
if (GetSaveFlag(flags, SaveFlag.Quality))
writer.Write((int)m_Quality);
if (GetSaveFlag(flags, SaveFlag.Capacity))
writer.Write(m_Capacity);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
SaveFlag flags = (SaveFlag)reader.ReadEncodedInt();
if (GetSaveFlag(flags, SaveFlag.Attributes))
Attributes = new AosAttributes(this, reader);
else
Attributes = new AosAttributes(this);
if (GetSaveFlag(flags, SaveFlag.LowerAmmoCost))
m_LowerAmmoCost = reader.ReadInt();
if (GetSaveFlag(flags, SaveFlag.WeightReduction))
m_WeightReduction = reader.ReadInt();
if (GetSaveFlag(flags, SaveFlag.DamageIncrease))
m_DamageIncrease = reader.ReadInt();
if (GetSaveFlag(flags, SaveFlag.Crafter))
m_Crafter = reader.ReadMobile();
if (GetSaveFlag(flags, SaveFlag.Quality))
m_Quality = (ClothingQuality)reader.ReadInt();
if (GetSaveFlag(flags, SaveFlag.Capacity))
m_Capacity = reader.ReadInt();
}
public virtual void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
}
public void InvalidateWeight()
{
if (RootParent is Mobile m) m.UpdateTotals();
}
[Flags]
private enum SaveFlag
{
None = 0x00000000,
Attributes = 0x00000001,
DamageModifier = 0x00000002,
LowerAmmoCost = 0x00000004,
WeightReduction = 0x00000008,
Crafter = 0x00000010,
Quality = 0x00000020,
Capacity = 0x00000040,
DamageIncrease = 0x00000080
}
}
}

View file

@ -1,29 +1,29 @@
namespace Server.Items
{
[Flippable(0x2FB7, 0x3171)]
public class ElvenQuiver : BaseQuiver
{
[Constructible]
public ElvenQuiver() => WeightReduction = 30;
public ElvenQuiver(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1032657; // elven quiver
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
[Flippable(0x2FB7, 0x3171)]
public class ElvenQuiver : BaseQuiver
{
[Constructible]
public ElvenQuiver() => WeightReduction = 30;
public ElvenQuiver(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1032657; // elven quiver
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,35 +1,35 @@
namespace Server.Items
{
public class QuiverOfBlight : ElvenQuiver
{
[Constructible]
public QuiverOfBlight() => Hue = 0x4F3;
public QuiverOfBlight(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073111; // Quiver of Blight
public override void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
phys = fire = nrgy = chaos = direct = 0;
cold = pois = 50;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class QuiverOfBlight : ElvenQuiver
{
[Constructible]
public QuiverOfBlight() => Hue = 0x4F3;
public QuiverOfBlight(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073111; // Quiver of Blight
public override void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
phys = fire = nrgy = chaos = direct = 0;
cold = pois = 50;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,35 +1,35 @@
namespace Server.Items
{
public class QuiverOfFire : ElvenQuiver
{
[Constructible]
public QuiverOfFire() => Hue = 0x4E7;
public QuiverOfFire(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073109; // quiver of fire
public override void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
cold = pois = nrgy = chaos = direct = 0;
phys = fire = 50;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class QuiverOfFire : ElvenQuiver
{
[Constructible]
public QuiverOfFire() => Hue = 0x4E7;
public QuiverOfFire(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073109; // quiver of fire
public override void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
cold = pois = nrgy = chaos = direct = 0;
phys = fire = 50;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,35 +1,35 @@
namespace Server.Items
{
public class QuiverOfIce : ElvenQuiver
{
[Constructible]
public QuiverOfIce() => Hue = 0x4ED;
public QuiverOfIce(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073110; // quiver of ice
public override void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
fire = pois = nrgy = chaos = direct = 0;
phys = cold = 50;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class QuiverOfIce : ElvenQuiver
{
[Constructible]
public QuiverOfIce() => Hue = 0x4ED;
public QuiverOfIce(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073110; // quiver of ice
public override void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
fire = pois = nrgy = chaos = direct = 0;
phys = cold = 50;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,35 +1,35 @@
namespace Server.Items
{
public class QuiverOfLightning : ElvenQuiver
{
[Constructible]
public QuiverOfLightning() => Hue = 0x4F9;
public QuiverOfLightning(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073112; // Quiver of Lightning
public override void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
fire = cold = pois = chaos = direct = 0;
phys = nrgy = 50;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
namespace Server.Items
{
public class QuiverOfLightning : ElvenQuiver
{
[Constructible]
public QuiverOfLightning() => Hue = 0x4F9;
public QuiverOfLightning(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1073112; // Quiver of Lightning
public override void AlterBowDamage(ref int phys, ref int fire, ref int cold, ref int pois, ref int nrgy,
ref int chaos, ref int direct)
{
fire = cold = pois = chaos = direct = 0;
phys = nrgy = 50;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1,34 +1,34 @@
namespace Server.Items
{
public class Arrow : Item, ICommodity
{
[Constructible]
public Arrow(int amount = 1) : base(0xF3F)
{
Stackable = true;
Amount = amount;
}
public Arrow(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Arrow : Item, ICommodity
{
[Constructible]
public Arrow(int amount = 1) : base(0xF3F)
{
Stackable = true;
Amount = amount;
}
public Arrow(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,34 +1,34 @@
namespace Server.Items
{
public class Bolt : Item, ICommodity
{
[Constructible]
public Bolt(int amount = 1) : base(0x1BFB)
{
Stackable = true;
Amount = amount;
}
public Bolt(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Bolt : Item, ICommodity
{
[Constructible]
public Bolt(int amount = 1) : base(0x1BFB)
{
Stackable = true;
Amount = amount;
}
public Bolt(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,34 +1,34 @@
namespace Server.Items
{
public class Feather : Item, ICommodity
{
[Constructible]
public Feather(int amount = 1) : base(0x1BD1)
{
Stackable = true;
Amount = amount;
}
public Feather(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Feather : Item, ICommodity
{
[Constructible]
public Feather(int amount = 1) : base(0x1BD1)
{
Stackable = true;
Amount = amount;
}
public Feather(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,34 +1,34 @@
namespace Server.Items
{
public class Shaft : Item, ICommodity
{
[Constructible]
public Shaft(int amount = 1) : base(0x1BD4)
{
Stackable = true;
Amount = amount;
}
public Shaft(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Shaft : Item, ICommodity
{
[Constructible]
public Shaft(int amount = 1) : base(0x1BD4)
{
Stackable = true;
Amount = amount;
}
public Shaft(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,357 +1,357 @@
namespace Server.Items
{
public abstract class BaseIngot : Item, ICommodity
{
private CraftResource m_Resource;
public BaseIngot(CraftResource resource, int amount = 1) : base(0x1BF2)
{
Stackable = true;
Amount = amount;
Hue = CraftResources.GetHue(resource);
m_Resource = resource;
}
public BaseIngot(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override double DefaultWeight => 0.1;
public override int LabelNumber
{
get
{
if (m_Resource >= CraftResource.DullCopper && m_Resource <= CraftResource.Valorite)
return 1042684 + (m_Resource - CraftResource.DullCopper);
return 1042692;
}
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
var info = reader.ReadInt() switch
{
0 => OreInfo.Iron,
1 => OreInfo.DullCopper,
2 => OreInfo.ShadowIron,
3 => OreInfo.Copper,
4 => OreInfo.Bronze,
5 => OreInfo.Gold,
6 => OreInfo.Agapite,
7 => OreInfo.Verite,
8 => OreInfo.Valorite,
_ => null
};
m_Resource = CraftResources.GetFromOreInfo(info);
break;
}
}
}
public override void AddNameProperty(ObjectPropertyList list)
{
if (Amount > 1)
list.Add(1050039, "{0}\t#{1}", Amount, 1027154); // ~1_NUMBER~ ~2_ITEMNAME~
else
list.Add(1027154); // ingots
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(m_Resource))
{
int num = CraftResources.GetLocalizationNumber(m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(m_Resource));
}
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class IronIngot : BaseIngot
{
[Constructible]
public IronIngot(int amount = 1) : base(CraftResource.Iron, amount)
{
}
public IronIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class DullCopperIngot : BaseIngot
{
[Constructible]
public DullCopperIngot(int amount = 1) : base(CraftResource.DullCopper, amount)
{
}
public DullCopperIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class ShadowIronIngot : BaseIngot
{
[Constructible]
public ShadowIronIngot(int amount = 1) : base(CraftResource.ShadowIron, amount)
{
}
public ShadowIronIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class CopperIngot : BaseIngot
{
[Constructible]
public CopperIngot(int amount = 1) : base(CraftResource.Copper, amount)
{
}
public CopperIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class BronzeIngot : BaseIngot
{
[Constructible]
public BronzeIngot(int amount = 1) : base(CraftResource.Bronze, amount)
{
}
public BronzeIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class GoldIngot : BaseIngot
{
[Constructible]
public GoldIngot(int amount = 1) : base(CraftResource.Gold, amount)
{
}
public GoldIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class AgapiteIngot : BaseIngot
{
[Constructible]
public AgapiteIngot(int amount = 1) : base(CraftResource.Agapite, amount)
{
}
public AgapiteIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class VeriteIngot : BaseIngot
{
[Constructible]
public VeriteIngot(int amount = 1) : base(CraftResource.Verite, amount)
{
}
public VeriteIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class ValoriteIngot : BaseIngot
{
[Constructible]
public ValoriteIngot(int amount = 1) : base(CraftResource.Valorite, amount)
{
}
public ValoriteIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public abstract class BaseIngot : Item, ICommodity
{
private CraftResource m_Resource;
public BaseIngot(CraftResource resource, int amount = 1) : base(0x1BF2)
{
Stackable = true;
Amount = amount;
Hue = CraftResources.GetHue(resource);
m_Resource = resource;
}
public BaseIngot(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override double DefaultWeight => 0.1;
public override int LabelNumber
{
get
{
if (m_Resource >= CraftResource.DullCopper && m_Resource <= CraftResource.Valorite)
return 1042684 + (m_Resource - CraftResource.DullCopper);
return 1042692;
}
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
var info = reader.ReadInt() switch
{
0 => OreInfo.Iron,
1 => OreInfo.DullCopper,
2 => OreInfo.ShadowIron,
3 => OreInfo.Copper,
4 => OreInfo.Bronze,
5 => OreInfo.Gold,
6 => OreInfo.Agapite,
7 => OreInfo.Verite,
8 => OreInfo.Valorite,
_ => null
};
m_Resource = CraftResources.GetFromOreInfo(info);
break;
}
}
}
public override void AddNameProperty(ObjectPropertyList list)
{
if (Amount > 1)
list.Add(1050039, "{0}\t#{1}", Amount, 1027154); // ~1_NUMBER~ ~2_ITEMNAME~
else
list.Add(1027154); // ingots
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(m_Resource))
{
int num = CraftResources.GetLocalizationNumber(m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(m_Resource));
}
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class IronIngot : BaseIngot
{
[Constructible]
public IronIngot(int amount = 1) : base(CraftResource.Iron, amount)
{
}
public IronIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class DullCopperIngot : BaseIngot
{
[Constructible]
public DullCopperIngot(int amount = 1) : base(CraftResource.DullCopper, amount)
{
}
public DullCopperIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class ShadowIronIngot : BaseIngot
{
[Constructible]
public ShadowIronIngot(int amount = 1) : base(CraftResource.ShadowIron, amount)
{
}
public ShadowIronIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class CopperIngot : BaseIngot
{
[Constructible]
public CopperIngot(int amount = 1) : base(CraftResource.Copper, amount)
{
}
public CopperIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class BronzeIngot : BaseIngot
{
[Constructible]
public BronzeIngot(int amount = 1) : base(CraftResource.Bronze, amount)
{
}
public BronzeIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class GoldIngot : BaseIngot
{
[Constructible]
public GoldIngot(int amount = 1) : base(CraftResource.Gold, amount)
{
}
public GoldIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class AgapiteIngot : BaseIngot
{
[Constructible]
public AgapiteIngot(int amount = 1) : base(CraftResource.Agapite, amount)
{
}
public AgapiteIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class VeriteIngot : BaseIngot
{
[Constructible]
public VeriteIngot(int amount = 1) : base(CraftResource.Verite, amount)
{
}
public VeriteIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1BF2, 0x1BEF)]
public class ValoriteIngot : BaseIngot
{
[Constructible]
public ValoriteIngot(int amount = 1) : base(CraftResource.Valorite, amount)
{
}
public ValoriteIngot(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,221 +1,221 @@
namespace Server.Items
{
public abstract class BaseScales : Item, ICommodity
{
private CraftResource m_Resource;
public BaseScales(CraftResource resource, int amount = 1) : base(0x26B4)
{
Stackable = true;
Amount = amount;
Hue = CraftResources.GetHue(resource);
m_Resource = resource;
}
public BaseScales(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1053139; // dragon scales
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
}
}
}
public class RedScales : BaseScales
{
[Constructible]
public RedScales(int amount = 1) : base(CraftResource.RedScales, amount)
{
}
public RedScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class YellowScales : BaseScales
{
[Constructible]
public YellowScales(int amount = 1) : base(CraftResource.YellowScales, amount)
{
}
public YellowScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BlackScales : BaseScales
{
[Constructible]
public BlackScales(int amount = 1) : base(CraftResource.BlackScales, amount)
{
}
public BlackScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GreenScales : BaseScales
{
[Constructible]
public GreenScales(int amount = 1) : base(CraftResource.GreenScales, amount)
{
}
public GreenScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class WhiteScales : BaseScales
{
[Constructible]
public WhiteScales(int amount = 1) : base(CraftResource.WhiteScales, amount)
{
}
public WhiteScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BlueScales : BaseScales
{
[Constructible]
public BlueScales(int amount = 1) : base(CraftResource.BlueScales, amount)
{
}
public BlueScales(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1053140; // sea serpent scales
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public abstract class BaseScales : Item, ICommodity
{
private CraftResource m_Resource;
public BaseScales(CraftResource resource, int amount = 1) : base(0x26B4)
{
Stackable = true;
Amount = amount;
Hue = CraftResources.GetHue(resource);
m_Resource = resource;
}
public BaseScales(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1053139; // dragon scales
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
}
}
}
public class RedScales : BaseScales
{
[Constructible]
public RedScales(int amount = 1) : base(CraftResource.RedScales, amount)
{
}
public RedScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class YellowScales : BaseScales
{
[Constructible]
public YellowScales(int amount = 1) : base(CraftResource.YellowScales, amount)
{
}
public YellowScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BlackScales : BaseScales
{
[Constructible]
public BlackScales(int amount = 1) : base(CraftResource.BlackScales, amount)
{
}
public BlackScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GreenScales : BaseScales
{
[Constructible]
public GreenScales(int amount = 1) : base(CraftResource.GreenScales, amount)
{
}
public GreenScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class WhiteScales : BaseScales
{
[Constructible]
public WhiteScales(int amount = 1) : base(CraftResource.WhiteScales, amount)
{
}
public WhiteScales(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BlueScales : BaseScales
{
[Constructible]
public BlueScales(int amount = 1) : base(CraftResource.BlueScales, amount)
{
}
public BlueScales(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1053140; // sea serpent scales
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,82 +1,82 @@
using System;
namespace Server.Items
{
public class BigFish : Item, ICarvable
{
private Mobile m_Fisher;
[Constructible]
public BigFish() : base(0x09CC)
{
Weight = Utility.RandomMinMax(3,
200); // TODO: Find correct formula. max on OSI currently 200, OSI dev says it's not 200 as max, and ~ 1/1,000,000 chance to get highest
Hue = Utility.RandomBool() ? 0x847 : 0x58C;
}
public BigFish(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Fisher
{
get => m_Fisher;
set
{
m_Fisher = value;
InvalidateProperties();
}
}
public override int LabelNumber => 1041112; // a big fish
public void Carve(Mobile from, Item item)
{
ScissorHelper(from, new RawFishSteak(), Math.Max(16, (int)Weight) / 4, false);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (Weight >= 20)
{
if (m_Fisher != null)
list.Add(1070857, m_Fisher.Name); // Caught by ~1_fisherman~
list.Add(1070858, ((int)Weight).ToString()); // ~1_weight~ stones
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write(m_Fisher);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Fisher = reader.ReadMobile();
break;
}
case 0:
{
Weight = Utility.RandomMinMax(3, 200);
break;
}
}
}
}
}
using System;
namespace Server.Items
{
public class BigFish : Item, ICarvable
{
private Mobile m_Fisher;
[Constructible]
public BigFish() : base(0x09CC)
{
Weight = Utility.RandomMinMax(3,
200); // TODO: Find correct formula. max on OSI currently 200, OSI dev says it's not 200 as max, and ~ 1/1,000,000 chance to get highest
Hue = Utility.RandomBool() ? 0x847 : 0x58C;
}
public BigFish(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Fisher
{
get => m_Fisher;
set
{
m_Fisher = value;
InvalidateProperties();
}
}
public override int LabelNumber => 1041112; // a big fish
public void Carve(Mobile from, Item item)
{
ScissorHelper(from, new RawFishSteak(), Math.Max(16, (int)Weight) / 4, false);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (Weight >= 20)
{
if (m_Fisher != null)
list.Add(1070857, m_Fisher.Name); // Caught by ~1_fisherman~
list.Add(1070858, ((int)Weight).ToString()); // ~1_weight~ stones
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write(m_Fisher);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Fisher = reader.ReadMobile();
break;
}
case 0:
{
Weight = Utility.RandomMinMax(3, 200);
break;
}
}
}
}
}

View file

@ -1,36 +1,36 @@
namespace Server.Items
{
public class Fish : Item, ICarvable
{
[Constructible]
public Fish(int amount = 1) : base(Utility.Random(0x09CC, 4))
{
Stackable = true;
Weight = 1.0;
Amount = amount;
}
public Fish(Serial serial) : base(serial)
{
}
public void Carve(Mobile from, Item item)
{
ScissorHelper(from, new RawFishSteak(), 4);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Fish : Item, ICarvable
{
[Constructible]
public Fish(int amount = 1) : base(Utility.Random(0x09CC, 4))
{
Stackable = true;
Weight = 1.0;
Amount = amount;
}
public Fish(Serial serial) : base(serial)
{
}
public void Carve(Mobile from, Item item)
{
ScissorHelper(from, new RawFishSteak(), 4);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,198 +1,198 @@
using System;
using Server.Network;
using Server.Spells;
namespace Server.Items
{
public abstract class BaseMagicFish : Item
{
public BaseMagicFish(int hue) : base(0xDD6) => Hue = hue;
public BaseMagicFish(Serial serial) : base(serial)
{
}
public virtual int Bonus => 0;
public virtual StatType Type => StatType.Str;
public override double DefaultWeight => 1.0;
public virtual bool Apply(Mobile from)
{
bool applied = SpellHelper.AddStatOffset(from, Type, Bonus, TimeSpan.FromMinutes(1.0));
if (!applied)
from.SendLocalizedMessage(502173); // You are already under a similar effect.
return applied;
}
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (Apply(from))
{
from.FixedEffect(0x375A, 10, 15);
from.PlaySound(0x1E7);
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 501774); // You swallow the fish whole!
Delete();
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PrizedFish : BaseMagicFish
{
[Constructible]
public PrizedFish() : base(51)
{
}
public PrizedFish(Serial serial) : base(serial)
{
}
public override int Bonus => 5;
public override StatType Type => StatType.Int;
public override int LabelNumber => 1041073; // prized fish
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Hue == 151)
Hue = 51;
}
}
public class WondrousFish : BaseMagicFish
{
[Constructible]
public WondrousFish() : base(86)
{
}
public WondrousFish(Serial serial) : base(serial)
{
}
public override int Bonus => 5;
public override StatType Type => StatType.Dex;
public override int LabelNumber => 1041074; // wondrous fish
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Hue == 286)
Hue = 86;
}
}
public class TrulyRareFish : BaseMagicFish
{
[Constructible]
public TrulyRareFish() : base(76)
{
}
public TrulyRareFish(Serial serial) : base(serial)
{
}
public override int Bonus => 5;
public override StatType Type => StatType.Str;
public override int LabelNumber => 1041075; // truly rare fish
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Hue == 376)
Hue = 76;
}
}
public class PeculiarFish : BaseMagicFish
{
[Constructible]
public PeculiarFish() : base(66)
{
}
public PeculiarFish(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1041076; // highly peculiar fish
public override bool Apply(Mobile from)
{
from.Stam += 10;
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Hue == 266)
Hue = 66;
}
}
using System;
using Server.Network;
using Server.Spells;
namespace Server.Items
{
public abstract class BaseMagicFish : Item
{
public BaseMagicFish(int hue) : base(0xDD6) => Hue = hue;
public BaseMagicFish(Serial serial) : base(serial)
{
}
public virtual int Bonus => 0;
public virtual StatType Type => StatType.Str;
public override double DefaultWeight => 1.0;
public virtual bool Apply(Mobile from)
{
bool applied = SpellHelper.AddStatOffset(from, Type, Bonus, TimeSpan.FromMinutes(1.0));
if (!applied)
from.SendLocalizedMessage(502173); // You are already under a similar effect.
return applied;
}
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (Apply(from))
{
from.FixedEffect(0x375A, 10, 15);
from.PlaySound(0x1E7);
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 501774); // You swallow the fish whole!
Delete();
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class PrizedFish : BaseMagicFish
{
[Constructible]
public PrizedFish() : base(51)
{
}
public PrizedFish(Serial serial) : base(serial)
{
}
public override int Bonus => 5;
public override StatType Type => StatType.Int;
public override int LabelNumber => 1041073; // prized fish
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Hue == 151)
Hue = 51;
}
}
public class WondrousFish : BaseMagicFish
{
[Constructible]
public WondrousFish() : base(86)
{
}
public WondrousFish(Serial serial) : base(serial)
{
}
public override int Bonus => 5;
public override StatType Type => StatType.Dex;
public override int LabelNumber => 1041074; // wondrous fish
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Hue == 286)
Hue = 86;
}
}
public class TrulyRareFish : BaseMagicFish
{
[Constructible]
public TrulyRareFish() : base(76)
{
}
public TrulyRareFish(Serial serial) : base(serial)
{
}
public override int Bonus => 5;
public override StatType Type => StatType.Str;
public override int LabelNumber => 1041075; // truly rare fish
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Hue == 376)
Hue = 76;
}
}
public class PeculiarFish : BaseMagicFish
{
[Constructible]
public PeculiarFish() : base(66)
{
}
public PeculiarFish(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1041076; // highly peculiar fish
public override bool Apply(Mobile from)
{
from.Stam += 10;
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Hue == 266)
Hue = 66;
}
}
}

View file

@ -1,312 +1,312 @@
namespace Server.Items
{
public abstract class BaseGranite : Item
{
private CraftResource m_Resource;
public BaseGranite(CraftResource resource) : base(0x1779)
{
Hue = CraftResources.GetHue(resource);
Stackable = Core.ML;
m_Resource = resource;
}
public BaseGranite(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override double DefaultWeight => Core.ML ? 1.0 : 10.0;
public override int LabelNumber => 1044607; // high quality granite
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
case 0:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
}
if (version < 1)
Stackable = Core.ML;
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(m_Resource))
{
int num = CraftResources.GetLocalizationNumber(m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(m_Resource));
}
}
}
public class Granite : BaseGranite
{
[Constructible]
public Granite() : base(CraftResource.Iron)
{
}
public Granite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class DullCopperGranite : BaseGranite
{
[Constructible]
public DullCopperGranite() : base(CraftResource.DullCopper)
{
}
public DullCopperGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class ShadowIronGranite : BaseGranite
{
[Constructible]
public ShadowIronGranite() : base(CraftResource.ShadowIron)
{
}
public ShadowIronGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class CopperGranite : BaseGranite
{
[Constructible]
public CopperGranite() : base(CraftResource.Copper)
{
}
public CopperGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BronzeGranite : BaseGranite
{
[Constructible]
public BronzeGranite() : base(CraftResource.Bronze)
{
}
public BronzeGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GoldGranite : BaseGranite
{
[Constructible]
public GoldGranite() : base(CraftResource.Gold)
{
}
public GoldGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class AgapiteGranite : BaseGranite
{
[Constructible]
public AgapiteGranite() : base(CraftResource.Agapite)
{
}
public AgapiteGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class VeriteGranite : BaseGranite
{
[Constructible]
public VeriteGranite() : base(CraftResource.Verite)
{
}
public VeriteGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class ValoriteGranite : BaseGranite
{
[Constructible]
public ValoriteGranite() : base(CraftResource.Valorite)
{
}
public ValoriteGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
namespace Server.Items
{
public abstract class BaseGranite : Item
{
private CraftResource m_Resource;
public BaseGranite(CraftResource resource) : base(0x1779)
{
Hue = CraftResources.GetHue(resource);
Stackable = Core.ML;
m_Resource = resource;
}
public BaseGranite(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override double DefaultWeight => Core.ML ? 1.0 : 10.0;
public override int LabelNumber => 1044607; // high quality granite
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
case 0:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
}
if (version < 1)
Stackable = Core.ML;
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(m_Resource))
{
int num = CraftResources.GetLocalizationNumber(m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(m_Resource));
}
}
}
public class Granite : BaseGranite
{
[Constructible]
public Granite() : base(CraftResource.Iron)
{
}
public Granite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class DullCopperGranite : BaseGranite
{
[Constructible]
public DullCopperGranite() : base(CraftResource.DullCopper)
{
}
public DullCopperGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class ShadowIronGranite : BaseGranite
{
[Constructible]
public ShadowIronGranite() : base(CraftResource.ShadowIron)
{
}
public ShadowIronGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class CopperGranite : BaseGranite
{
[Constructible]
public CopperGranite() : base(CraftResource.Copper)
{
}
public CopperGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BronzeGranite : BaseGranite
{
[Constructible]
public BronzeGranite() : base(CraftResource.Bronze)
{
}
public BronzeGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GoldGranite : BaseGranite
{
[Constructible]
public GoldGranite() : base(CraftResource.Gold)
{
}
public GoldGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class AgapiteGranite : BaseGranite
{
[Constructible]
public AgapiteGranite() : base(CraftResource.Agapite)
{
}
public AgapiteGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class VeriteGranite : BaseGranite
{
[Constructible]
public VeriteGranite() : base(CraftResource.Verite)
{
}
public VeriteGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class ValoriteGranite : BaseGranite
{
[Constructible]
public ValoriteGranite() : base(CraftResource.Valorite)
{
}
public ValoriteGranite(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,41 +1,41 @@
namespace Server.Items
{
public class BagOfAllReagents : Bag
{
[Constructible]
public BagOfAllReagents(int amount = 50)
{
DropItem(new BlackPearl(amount));
DropItem(new Bloodmoss(amount));
DropItem(new Garlic(amount));
DropItem(new Ginseng(amount));
DropItem(new MandrakeRoot(amount));
DropItem(new Nightshade(amount));
DropItem(new SulfurousAsh(amount));
DropItem(new SpidersSilk(amount));
DropItem(new BatWing(amount));
DropItem(new GraveDust(amount));
DropItem(new DaemonBlood(amount));
DropItem(new NoxCrystal(amount));
DropItem(new PigIron(amount));
}
public BagOfAllReagents(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class BagOfAllReagents : Bag
{
[Constructible]
public BagOfAllReagents(int amount = 50)
{
DropItem(new BlackPearl(amount));
DropItem(new Bloodmoss(amount));
DropItem(new Garlic(amount));
DropItem(new Ginseng(amount));
DropItem(new MandrakeRoot(amount));
DropItem(new Nightshade(amount));
DropItem(new SulfurousAsh(amount));
DropItem(new SpidersSilk(amount));
DropItem(new BatWing(amount));
DropItem(new GraveDust(amount));
DropItem(new DaemonBlood(amount));
DropItem(new NoxCrystal(amount));
DropItem(new PigIron(amount));
}
public BagOfAllReagents(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,33 +1,33 @@
namespace Server.Items
{
public class BagOfNecroReagents : Bag
{
[Constructible]
public BagOfNecroReagents(int amount = 50)
{
DropItem(new BatWing(amount));
DropItem(new GraveDust(amount));
DropItem(new DaemonBlood(amount));
DropItem(new NoxCrystal(amount));
DropItem(new PigIron(amount));
}
public BagOfNecroReagents(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class BagOfNecroReagents : Bag
{
[Constructible]
public BagOfNecroReagents(int amount = 50)
{
DropItem(new BatWing(amount));
DropItem(new GraveDust(amount));
DropItem(new DaemonBlood(amount));
DropItem(new NoxCrystal(amount));
DropItem(new PigIron(amount));
}
public BagOfNecroReagents(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,36 +1,36 @@
namespace Server.Items
{
public class BagOfReagents : Bag
{
[Constructible]
public BagOfReagents(int amount = 50)
{
DropItem(new BlackPearl(amount));
DropItem(new Bloodmoss(amount));
DropItem(new Garlic(amount));
DropItem(new Ginseng(amount));
DropItem(new MandrakeRoot(amount));
DropItem(new Nightshade(amount));
DropItem(new SulfurousAsh(amount));
DropItem(new SpidersSilk(amount));
}
public BagOfReagents(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class BagOfReagents : Bag
{
[Constructible]
public BagOfReagents(int amount = 50)
{
DropItem(new BlackPearl(amount));
DropItem(new Bloodmoss(amount));
DropItem(new Garlic(amount));
DropItem(new Ginseng(amount));
DropItem(new MandrakeRoot(amount));
DropItem(new Nightshade(amount));
DropItem(new SulfurousAsh(amount));
DropItem(new SpidersSilk(amount));
}
public BagOfReagents(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public abstract class BaseReagent : Item
{
public BaseReagent(int itemID, int amount = 1) : base(itemID)
{
Stackable = true;
Amount = amount;
}
public BaseReagent(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
namespace Server.Items
{
public abstract class BaseReagent : Item
{
public BaseReagent(int itemID, int amount = 1) : base(itemID)
{
Stackable = true;
Amount = amount;
}
public BaseReagent(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class BatWing : BaseReagent, ICommodity
{
[Constructible]
public BatWing(int amount = 1) : base(0xF78, amount)
{
}
public BatWing(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class BatWing : BaseReagent, ICommodity
{
[Constructible]
public BatWing(int amount = 1) : base(0xF78, amount)
{
}
public BatWing(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class BlackPearl : BaseReagent, ICommodity
{
[Constructible]
public BlackPearl(int amount = 1) : base(0xF7A, amount)
{
}
public BlackPearl(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class BlackPearl : BaseReagent, ICommodity
{
[Constructible]
public BlackPearl(int amount = 1) : base(0xF7A, amount)
{
}
public BlackPearl(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class Bloodmoss : BaseReagent, ICommodity
{
[Constructible]
public Bloodmoss(int amount = 1) : base(0xF7B, amount)
{
}
public Bloodmoss(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Bloodmoss : BaseReagent, ICommodity
{
[Constructible]
public Bloodmoss(int amount = 1) : base(0xF7B, amount)
{
}
public Bloodmoss(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class DaemonBlood : BaseReagent, ICommodity
{
[Constructible]
public DaemonBlood(int amount = 1) : base(0xF7D, amount)
{
}
public DaemonBlood(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class DaemonBlood : BaseReagent, ICommodity
{
[Constructible]
public DaemonBlood(int amount = 1) : base(0xF7D, amount)
{
}
public DaemonBlood(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
// TODO: Commodity?
public class DaemonBone : BaseReagent
{
[Constructible]
public DaemonBone(int amount = 1) : base(0xF80, amount)
{
}
public DaemonBone(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 1.0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
// TODO: Commodity?
public class DaemonBone : BaseReagent
{
[Constructible]
public DaemonBone(int amount = 1) : base(0xF80, amount)
{
}
public DaemonBone(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 1.0;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class DeadWood : BaseReagent, ICommodity
{
[Constructible]
public DeadWood(int amount = 1) : base(0xF90, amount)
{
}
public DeadWood(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class DeadWood : BaseReagent, ICommodity
{
[Constructible]
public DeadWood(int amount = 1) : base(0xF90, amount)
{
}
public DeadWood(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class Garlic : BaseReagent, ICommodity
{
[Constructible]
public Garlic(int amount = 1) : base(0xF84, amount)
{
}
public Garlic(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Garlic : BaseReagent, ICommodity
{
[Constructible]
public Garlic(int amount = 1) : base(0xF84, amount)
{
}
public Garlic(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class Ginseng : BaseReagent, ICommodity
{
[Constructible]
public Ginseng(int amount = 1) : base(0xF85, amount)
{
}
public Ginseng(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Ginseng : BaseReagent, ICommodity
{
[Constructible]
public Ginseng(int amount = 1) : base(0xF85, amount)
{
}
public Ginseng(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class GraveDust : BaseReagent, ICommodity
{
[Constructible]
public GraveDust(int amount = 1) : base(0xF8F, amount)
{
}
public GraveDust(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class GraveDust : BaseReagent, ICommodity
{
[Constructible]
public GraveDust(int amount = 1) : base(0xF8F, amount)
{
}
public GraveDust(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class MandrakeRoot : BaseReagent, ICommodity
{
[Constructible]
public MandrakeRoot(int amount = 1) : base(0xF86, amount)
{
}
public MandrakeRoot(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class MandrakeRoot : BaseReagent, ICommodity
{
[Constructible]
public MandrakeRoot(int amount = 1) : base(0xF86, amount)
{
}
public MandrakeRoot(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class Nightshade : BaseReagent, ICommodity
{
[Constructible]
public Nightshade(int amount = 1) : base(0xF88, amount)
{
}
public Nightshade(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Nightshade : BaseReagent, ICommodity
{
[Constructible]
public Nightshade(int amount = 1) : base(0xF88, amount)
{
}
public Nightshade(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class NoxCrystal : BaseReagent, ICommodity
{
[Constructible]
public NoxCrystal(int amount = 1) : base(0xF8E, amount)
{
}
public NoxCrystal(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class NoxCrystal : BaseReagent, ICommodity
{
[Constructible]
public NoxCrystal(int amount = 1) : base(0xF8E, amount)
{
}
public NoxCrystal(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class PigIron : BaseReagent, ICommodity
{
[Constructible]
public PigIron(int amount = 1) : base(0xF8A, amount)
{
}
public PigIron(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class PigIron : BaseReagent, ICommodity
{
[Constructible]
public PigIron(int amount = 1) : base(0xF8A, amount)
{
}
public PigIron(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class SpidersSilk : BaseReagent, ICommodity
{
[Constructible]
public SpidersSilk(int amount = 1) : base(0xF8D, amount)
{
}
public SpidersSilk(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class SpidersSilk : BaseReagent, ICommodity
{
[Constructible]
public SpidersSilk(int amount = 1) : base(0xF8D, amount)
{
}
public SpidersSilk(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,31 +1,31 @@
namespace Server.Items
{
public class SulfurousAsh : BaseReagent, ICommodity
{
[Constructible]
public SulfurousAsh(int amount = 1) : base(0xF8C, amount)
{
}
public SulfurousAsh(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class SulfurousAsh : BaseReagent, ICommodity
{
[Constructible]
public SulfurousAsh(int amount = 1) : base(0xF8C, amount)
{
}
public SulfurousAsh(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,63 +1,63 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0xF95, 0xF96, 0xF97, 0xF98, 0xF99, 0xF9A, 0xF9B, 0xF9C)]
public class BoltOfCloth : Item, IScissorable, IDyable, ICommodity
{
[Constructible]
public BoltOfCloth(int amount = 1) : base(0xF95)
{
Stackable = true;
Weight = 5.0;
Amount = amount;
}
public BoltOfCloth(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted) return false;
Hue = sender.DyedHue;
return true;
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
ScissorHelper(from, new Cloth(), 50);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSingleClick(Mobile from)
{
int number = Amount == 1 ? 1049122 : 1049121;
from.Send(
new MessageLocalized(Serial, ItemID, MessageType.Label, 0x3B2, 3, number, "", (Amount * 50).ToString()));
}
}
}
using Server.Network;
namespace Server.Items
{
[Flippable(0xF95, 0xF96, 0xF97, 0xF98, 0xF99, 0xF9A, 0xF9B, 0xF9C)]
public class BoltOfCloth : Item, IScissorable, IDyable, ICommodity
{
[Constructible]
public BoltOfCloth(int amount = 1) : base(0xF95)
{
Stackable = true;
Weight = 5.0;
Amount = amount;
}
public BoltOfCloth(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted) return false;
Hue = sender.DyedHue;
return true;
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
ScissorHelper(from, new Cloth(), 50);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSingleClick(Mobile from)
{
int number = Amount == 1 ? 1049122 : 1049121;
from.Send(
new MessageLocalized(Serial, ItemID, MessageType.Label, 0x3B2, 3, number, "", (Amount * 50).ToString()));
}
}
}

View file

@ -1,34 +1,34 @@
namespace Server.Items
{
public class Bone : Item, ICommodity
{
[Constructible]
public Bone(int amount = 1) : base(0xf7e)
{
Stackable = true;
Amount = amount;
Weight = 1.0;
}
public Bone(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public class Bone : Item, ICommodity
{
[Constructible]
public Bone(int amount = 1) : base(0xf7e)
{
Stackable = true;
Amount = amount;
Weight = 1.0;
}
public Bone(Serial serial) : base(serial)
{
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,63 +1,63 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0x1766, 0x1768)]
public class Cloth : Item, IScissorable, IDyable, ICommodity
{
[Constructible]
public Cloth(int amount = 1) : base(0x1766)
{
Stackable = true;
Amount = amount;
}
public Cloth(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
ScissorHelper(from, new Bandage(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSingleClick(Mobile from)
{
int number = Amount == 1 ? 1049124 : 1049123;
from.Send(new MessageLocalized(Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", Amount.ToString()));
}
}
}
using Server.Network;
namespace Server.Items
{
[Flippable(0x1766, 0x1768)]
public class Cloth : Item, IScissorable, IDyable, ICommodity
{
[Constructible]
public Cloth(int amount = 1) : base(0x1766)
{
Stackable = true;
Amount = amount;
}
public Cloth(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
ScissorHelper(from, new Bandage(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSingleClick(Mobile from)
{
int number = Amount == 1 ? 1049124 : 1049123;
from.Send(new MessageLocalized(Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", Amount.ToString()));
}
}
}

View file

@ -1,104 +1,104 @@
using Server.Targeting;
namespace Server.Items
{
public class Cotton : Item, IDyable
{
[Constructible]
public Cotton(int amount = 1) : base(0xDF9)
{
Stackable = true;
Weight = 4.0;
Amount = amount;
}
public Cotton(Serial serial) : base(serial)
{
}
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502655); // What spinning wheel do you wish to spin this on?
from.Target = new PickWheelTarget(this);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
public virtual void OnSpun(ISpinningWheel wheel, Mobile from, int hue)
{
Item item = new SpoolOfThread(6);
item.Hue = hue;
from.AddToBackpack(item);
from.SendLocalizedMessage(1010577); // You put the spools of thread in your backpack.
}
private class PickWheelTarget : Target
{
private readonly Cotton m_Cotton;
public PickWheelTarget(Cotton cotton) : base(3, false, TargetFlags.None) => m_Cotton = cotton;
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Cotton.Deleted)
return;
ISpinningWheel wheel = targeted as ISpinningWheel;
if (wheel == null && targeted is AddonComponent component)
wheel = component.Addon as ISpinningWheel;
if (wheel is Item)
{
if (!m_Cotton.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (wheel.Spinning)
{
from.SendLocalizedMessage(502656); // That spinning wheel is being used.
}
else
{
m_Cotton.Consume();
wheel.BeginSpin(m_Cotton.OnSpun, from, m_Cotton.Hue);
}
}
else
{
from.SendLocalizedMessage(502658); // Use that on a spinning wheel.
}
}
}
}
}
using Server.Targeting;
namespace Server.Items
{
public class Cotton : Item, IDyable
{
[Constructible]
public Cotton(int amount = 1) : base(0xDF9)
{
Stackable = true;
Weight = 4.0;
Amount = amount;
}
public Cotton(Serial serial) : base(serial)
{
}
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502655); // What spinning wheel do you wish to spin this on?
from.Target = new PickWheelTarget(this);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
public virtual void OnSpun(ISpinningWheel wheel, Mobile from, int hue)
{
Item item = new SpoolOfThread(6);
item.Hue = hue;
from.AddToBackpack(item);
from.SendLocalizedMessage(1010577); // You put the spools of thread in your backpack.
}
private class PickWheelTarget : Target
{
private readonly Cotton m_Cotton;
public PickWheelTarget(Cotton cotton) : base(3, false, TargetFlags.None) => m_Cotton = cotton;
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Cotton.Deleted)
return;
ISpinningWheel wheel = targeted as ISpinningWheel;
if (wheel == null && targeted is AddonComponent component)
wheel = component.Addon as ISpinningWheel;
if (wheel is Item)
{
if (!m_Cotton.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (wheel.Spinning)
{
from.SendLocalizedMessage(502656); // That spinning wheel is being used.
}
else
{
m_Cotton.Consume();
wheel.BeginSpin(m_Cotton.OnSpun, from, m_Cotton.Hue);
}
}
else
{
from.SendLocalizedMessage(502658); // Use that on a spinning wheel.
}
}
}
}
}

View file

@ -1,94 +1,94 @@
using Server.Targeting;
namespace Server.Items
{
public class Flax : Item
{
[Constructible]
public Flax(int amount = 1) : base(0x1A9C)
{
Stackable = true;
Weight = 1.0;
Amount = amount;
}
public Flax(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502655); // What spinning wheel do you wish to spin this on?
from.Target = new PickWheelTarget(this);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
public virtual void OnSpun(ISpinningWheel wheel, Mobile from, int hue)
{
Item item = new SpoolOfThread(6);
item.Hue = hue;
from.AddToBackpack(item);
from.SendLocalizedMessage(1010577); // You put the spools of thread in your backpack.
}
private class PickWheelTarget : Target
{
private readonly Flax m_Flax;
public PickWheelTarget(Flax flax) : base(3, false, TargetFlags.None) => m_Flax = flax;
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Flax.Deleted)
return;
ISpinningWheel wheel = targeted as ISpinningWheel;
if (wheel == null && targeted is AddonComponent component)
wheel = component.Addon as ISpinningWheel;
if (wheel is Item)
{
if (!m_Flax.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (wheel.Spinning)
{
from.SendLocalizedMessage(502656); // That spinning wheel is being used.
}
else
{
m_Flax.Consume();
wheel.BeginSpin(m_Flax.OnSpun, from, m_Flax.Hue);
}
}
else
{
from.SendLocalizedMessage(502658); // Use that on a spinning wheel.
}
}
}
}
}
using Server.Targeting;
namespace Server.Items
{
public class Flax : Item
{
[Constructible]
public Flax(int amount = 1) : base(0x1A9C)
{
Stackable = true;
Weight = 1.0;
Amount = amount;
}
public Flax(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502655); // What spinning wheel do you wish to spin this on?
from.Target = new PickWheelTarget(this);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
public virtual void OnSpun(ISpinningWheel wheel, Mobile from, int hue)
{
Item item = new SpoolOfThread(6);
item.Hue = hue;
from.AddToBackpack(item);
from.SendLocalizedMessage(1010577); // You put the spools of thread in your backpack.
}
private class PickWheelTarget : Target
{
private readonly Flax m_Flax;
public PickWheelTarget(Flax flax) : base(3, false, TargetFlags.None) => m_Flax = flax;
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Flax.Deleted)
return;
ISpinningWheel wheel = targeted as ISpinningWheel;
if (wheel == null && targeted is AddonComponent component)
wheel = component.Addon as ISpinningWheel;
if (wheel is Item)
{
if (!m_Flax.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (wheel.Spinning)
{
from.SendLocalizedMessage(502656); // That spinning wheel is being used.
}
else
{
m_Flax.Consume();
wheel.BeginSpin(m_Flax.OnSpun, from, m_Flax.Hue);
}
}
else
{
from.SendLocalizedMessage(502658); // Use that on a spinning wheel.
}
}
}
}
}

View file

@ -1,269 +1,269 @@
namespace Server.Items
{
public abstract class BaseHides : Item, ICommodity
{
private CraftResource m_Resource;
public BaseHides(CraftResource resource, int amount = 1) : base(0x1079)
{
Stackable = true;
Weight = 5.0;
Amount = amount;
Hue = CraftResources.GetHue(resource);
m_Resource = resource;
}
public BaseHides(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
if (m_Resource >= CraftResource.SpinedLeather && m_Resource <= CraftResource.BarbedLeather)
return 1049687 + (m_Resource - CraftResource.SpinedLeather);
return 1047023;
}
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
OreInfo info = new OreInfo(reader.ReadInt(), reader.ReadInt(), reader.ReadString());
m_Resource = CraftResources.GetFromOreInfo(info);
break;
}
}
}
public override void AddNameProperty(ObjectPropertyList list)
{
if (Amount > 1)
list.Add(1050039, "{0}\t#{1}", Amount, 1024216); // ~1_NUMBER~ ~2_ITEMNAME~
else
list.Add(1024216); // pile of hides
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(m_Resource))
{
int num = CraftResources.GetLocalizationNumber(m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(m_Resource));
}
}
}
[Flippable(0x1079, 0x1078)]
public class Hides : BaseHides, IScissorable
{
[Constructible]
public Hides(int amount = 1) : base(CraftResource.RegularLeather, amount)
{
}
public Hides(Serial serial) : base(serial)
{
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
if (Core.AOS && !IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502437); // Items you wish to cut must be in your backpack
return false;
}
ScissorHelper(from, new Leather(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1079, 0x1078)]
public class SpinedHides : BaseHides, IScissorable
{
[Constructible]
public SpinedHides(int amount = 1) : base(CraftResource.SpinedLeather, amount)
{
}
public SpinedHides(Serial serial) : base(serial)
{
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
if (Core.AOS && !IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502437); // Items you wish to cut must be in your backpack
return false;
}
ScissorHelper(from, new SpinedLeather(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1079, 0x1078)]
public class HornedHides : BaseHides, IScissorable
{
[Constructible]
public HornedHides(int amount = 1) : base(CraftResource.HornedLeather, amount)
{
}
public HornedHides(Serial serial) : base(serial)
{
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
if (Core.AOS && !IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502437); // Items you wish to cut must be in your backpack
return false;
}
ScissorHelper(from, new HornedLeather(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1079, 0x1078)]
public class BarbedHides : BaseHides, IScissorable
{
[Constructible]
public BarbedHides(int amount = 1) : base(CraftResource.BarbedLeather, amount)
{
}
public BarbedHides(Serial serial) : base(serial)
{
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
if (Core.AOS && !IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502437); // Items you wish to cut must be in your backpack
return false;
}
ScissorHelper(from, new BarbedLeather(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public abstract class BaseHides : Item, ICommodity
{
private CraftResource m_Resource;
public BaseHides(CraftResource resource, int amount = 1) : base(0x1079)
{
Stackable = true;
Weight = 5.0;
Amount = amount;
Hue = CraftResources.GetHue(resource);
m_Resource = resource;
}
public BaseHides(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
if (m_Resource >= CraftResource.SpinedLeather && m_Resource <= CraftResource.BarbedLeather)
return 1049687 + (m_Resource - CraftResource.SpinedLeather);
return 1047023;
}
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
OreInfo info = new OreInfo(reader.ReadInt(), reader.ReadInt(), reader.ReadString());
m_Resource = CraftResources.GetFromOreInfo(info);
break;
}
}
}
public override void AddNameProperty(ObjectPropertyList list)
{
if (Amount > 1)
list.Add(1050039, "{0}\t#{1}", Amount, 1024216); // ~1_NUMBER~ ~2_ITEMNAME~
else
list.Add(1024216); // pile of hides
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(m_Resource))
{
int num = CraftResources.GetLocalizationNumber(m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(m_Resource));
}
}
}
[Flippable(0x1079, 0x1078)]
public class Hides : BaseHides, IScissorable
{
[Constructible]
public Hides(int amount = 1) : base(CraftResource.RegularLeather, amount)
{
}
public Hides(Serial serial) : base(serial)
{
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
if (Core.AOS && !IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502437); // Items you wish to cut must be in your backpack
return false;
}
ScissorHelper(from, new Leather(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1079, 0x1078)]
public class SpinedHides : BaseHides, IScissorable
{
[Constructible]
public SpinedHides(int amount = 1) : base(CraftResource.SpinedLeather, amount)
{
}
public SpinedHides(Serial serial) : base(serial)
{
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
if (Core.AOS && !IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502437); // Items you wish to cut must be in your backpack
return false;
}
ScissorHelper(from, new SpinedLeather(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1079, 0x1078)]
public class HornedHides : BaseHides, IScissorable
{
[Constructible]
public HornedHides(int amount = 1) : base(CraftResource.HornedLeather, amount)
{
}
public HornedHides(Serial serial) : base(serial)
{
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
if (Core.AOS && !IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502437); // Items you wish to cut must be in your backpack
return false;
}
ScissorHelper(from, new HornedLeather(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1079, 0x1078)]
public class BarbedHides : BaseHides, IScissorable
{
[Constructible]
public BarbedHides(int amount = 1) : base(CraftResource.BarbedLeather, amount)
{
}
public BarbedHides(Serial serial) : base(serial)
{
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
if (Core.AOS && !IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502437); // Items you wish to cut must be in your backpack
return false;
}
ScissorHelper(from, new BarbedLeather(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,209 +1,209 @@
namespace Server.Items
{
public abstract class BaseLeather : Item, ICommodity
{
private CraftResource m_Resource;
public BaseLeather(CraftResource resource, int amount = 1) : base(0x1081)
{
Stackable = true;
Weight = 1.0;
Amount = amount;
Hue = CraftResources.GetHue(resource);
m_Resource = resource;
}
public BaseLeather(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
if (m_Resource >= CraftResource.SpinedLeather && m_Resource <= CraftResource.BarbedLeather)
return 1049684 + (m_Resource - CraftResource.SpinedLeather);
return 1047022;
}
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
OreInfo info = new OreInfo(reader.ReadInt(), reader.ReadInt(), reader.ReadString());
m_Resource = CraftResources.GetFromOreInfo(info);
break;
}
}
}
public override void AddNameProperty(ObjectPropertyList list)
{
if (Amount > 1)
list.Add(1050039, "{0}\t#{1}", Amount, 1024199); // ~1_NUMBER~ ~2_ITEMNAME~
else
list.Add(1024199); // cut leather
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(m_Resource))
{
int num = CraftResources.GetLocalizationNumber(m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(m_Resource));
}
}
}
[Flippable(0x1081, 0x1082)]
public class Leather : BaseLeather
{
[Constructible]
public Leather(int amount = 1) : base(CraftResource.RegularLeather, amount)
{
}
public Leather(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1081, 0x1082)]
public class SpinedLeather : BaseLeather
{
[Constructible]
public SpinedLeather(int amount = 1) : base(CraftResource.SpinedLeather, amount)
{
}
public SpinedLeather(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1081, 0x1082)]
public class HornedLeather : BaseLeather
{
[Constructible]
public HornedLeather(int amount = 1) : base(CraftResource.HornedLeather, amount)
{
}
public HornedLeather(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1081, 0x1082)]
public class BarbedLeather : BaseLeather
{
[Constructible]
public BarbedLeather(int amount = 1) : base(CraftResource.BarbedLeather, amount)
{
}
public BarbedLeather(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
namespace Server.Items
{
public abstract class BaseLeather : Item, ICommodity
{
private CraftResource m_Resource;
public BaseLeather(CraftResource resource, int amount = 1) : base(0x1081)
{
Stackable = true;
Weight = 1.0;
Amount = amount;
Hue = CraftResources.GetHue(resource);
m_Resource = resource;
}
public BaseLeather(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public CraftResource Resource
{
get => m_Resource;
set
{
m_Resource = value;
InvalidateProperties();
}
}
public override int LabelNumber
{
get
{
if (m_Resource >= CraftResource.SpinedLeather && m_Resource <= CraftResource.BarbedLeather)
return 1049684 + (m_Resource - CraftResource.SpinedLeather);
return 1047022;
}
}
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Resource);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
case 0:
{
OreInfo info = new OreInfo(reader.ReadInt(), reader.ReadInt(), reader.ReadString());
m_Resource = CraftResources.GetFromOreInfo(info);
break;
}
}
}
public override void AddNameProperty(ObjectPropertyList list)
{
if (Amount > 1)
list.Add(1050039, "{0}\t#{1}", Amount, 1024199); // ~1_NUMBER~ ~2_ITEMNAME~
else
list.Add(1024199); // cut leather
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (!CraftResources.IsStandard(m_Resource))
{
int num = CraftResources.GetLocalizationNumber(m_Resource);
if (num > 0)
list.Add(num);
else
list.Add(CraftResources.GetName(m_Resource));
}
}
}
[Flippable(0x1081, 0x1082)]
public class Leather : BaseLeather
{
[Constructible]
public Leather(int amount = 1) : base(CraftResource.RegularLeather, amount)
{
}
public Leather(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1081, 0x1082)]
public class SpinedLeather : BaseLeather
{
[Constructible]
public SpinedLeather(int amount = 1) : base(CraftResource.SpinedLeather, amount)
{
}
public SpinedLeather(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1081, 0x1082)]
public class HornedLeather : BaseLeather
{
[Constructible]
public HornedLeather(int amount = 1) : base(CraftResource.HornedLeather, amount)
{
}
public HornedLeather(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Flippable(0x1081, 0x1082)]
public class BarbedLeather : BaseLeather
{
[Constructible]
public BarbedLeather(int amount = 1) : base(CraftResource.BarbedLeather, amount)
{
}
public BarbedLeather(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,63 +1,63 @@
using Server.Network;
namespace Server.Items
{
[Flippable(0x1765, 0x1767)]
public class UncutCloth : Item, IScissorable, IDyable, ICommodity
{
[Constructible]
public UncutCloth(int amount = 1) : base(0x1767)
{
Stackable = true;
Amount = amount;
}
public UncutCloth(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
ScissorHelper(from, new Bandage(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSingleClick(Mobile from)
{
int number = Amount == 1 ? 1049124 : 1049123;
from.Send(new MessageLocalized(Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", Amount.ToString()));
}
}
}
using Server.Network;
namespace Server.Items
{
[Flippable(0x1765, 0x1767)]
public class UncutCloth : Item, IScissorable, IDyable, ICommodity
{
[Constructible]
public UncutCloth(int amount = 1) : base(0x1767)
{
Stackable = true;
Amount = amount;
}
public UncutCloth(Serial serial) : base(serial)
{
}
public override double DefaultWeight => 0.1;
int ICommodity.DescriptionNumber => LabelNumber;
bool ICommodity.IsDeedable => true;
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (Deleted || !from.CanSee(this)) return false;
ScissorHelper(from, new Bandage(), 1);
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSingleClick(Mobile from)
{
int number = Amount == 1 ? 1049124 : 1049123;
from.Send(new MessageLocalized(Serial, ItemID, MessageType.Regular, 0x3B2, 3, number, "", Amount.ToString()));
}
}
}

View file

@ -1,142 +1,142 @@
using Server.Targeting;
namespace Server.Items
{
public class Wool : Item, IDyable
{
[Constructible]
public Wool(int amount = 1) : base(0xDF8)
{
Stackable = true;
Weight = 4.0;
Amount = amount;
}
public Wool(Serial serial) : base(serial)
{
}
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502655); // What spinning wheel do you wish to spin this on?
from.Target = new PickWheelTarget(this);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
public virtual void OnSpun(ISpinningWheel wheel, Mobile from, int hue)
{
Item item = new DarkYarn(3);
item.Hue = hue;
from.AddToBackpack(item);
from.SendLocalizedMessage(1010576); // You put the balls of yarn in your backpack.
}
private class PickWheelTarget : Target
{
private readonly Wool m_Wool;
public PickWheelTarget(Wool wool) : base(3, false, TargetFlags.None) => m_Wool = wool;
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Wool.Deleted)
return;
ISpinningWheel wheel = targeted as ISpinningWheel;
if (wheel == null && targeted is AddonComponent component)
wheel = component.Addon as ISpinningWheel;
if (wheel is Item)
{
if (!m_Wool.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (wheel.Spinning)
{
from.SendLocalizedMessage(502656); // That spinning wheel is being used.
}
else
{
m_Wool.Consume();
wheel.BeginSpin(m_Wool.OnSpun, from, m_Wool.Hue);
}
}
else
{
from.SendLocalizedMessage(502658); // Use that on a spinning wheel.
}
}
}
}
public class TaintedWool : Wool
{
[Constructible]
public TaintedWool(int amount = 1) : base(0x101F)
{
Stackable = true;
Weight = 4.0;
Amount = amount;
}
public TaintedWool(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSpun(ISpinningWheel wheel, Mobile from, int hue)
{
Item item = new DarkYarn();
item.Hue = hue;
from.AddToBackpack(item);
from.SendLocalizedMessage(1010574); // You put a ball of yarn in your backpack.
}
}
}
using Server.Targeting;
namespace Server.Items
{
public class Wool : Item, IDyable
{
[Constructible]
public Wool(int amount = 1) : base(0xDF8)
{
Stackable = true;
Weight = 4.0;
Amount = amount;
}
public Wool(Serial serial) : base(serial)
{
}
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(502655); // What spinning wheel do you wish to spin this on?
from.Target = new PickWheelTarget(this);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
public virtual void OnSpun(ISpinningWheel wheel, Mobile from, int hue)
{
Item item = new DarkYarn(3);
item.Hue = hue;
from.AddToBackpack(item);
from.SendLocalizedMessage(1010576); // You put the balls of yarn in your backpack.
}
private class PickWheelTarget : Target
{
private readonly Wool m_Wool;
public PickWheelTarget(Wool wool) : base(3, false, TargetFlags.None) => m_Wool = wool;
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Wool.Deleted)
return;
ISpinningWheel wheel = targeted as ISpinningWheel;
if (wheel == null && targeted is AddonComponent component)
wheel = component.Addon as ISpinningWheel;
if (wheel is Item)
{
if (!m_Wool.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (wheel.Spinning)
{
from.SendLocalizedMessage(502656); // That spinning wheel is being used.
}
else
{
m_Wool.Consume();
wheel.BeginSpin(m_Wool.OnSpun, from, m_Wool.Hue);
}
}
else
{
from.SendLocalizedMessage(502658); // Use that on a spinning wheel.
}
}
}
}
public class TaintedWool : Wool
{
[Constructible]
public TaintedWool(int amount = 1) : base(0x101F)
{
Stackable = true;
Weight = 4.0;
Amount = amount;
}
public TaintedWool(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSpun(ISpinningWheel wheel, Mobile from, int hue)
{
Item item = new DarkYarn();
item.Hue = hue;
from.AddToBackpack(item);
from.SendLocalizedMessage(1010574); // You put a ball of yarn in your backpack.
}
}
}

View file

@ -1,206 +1,206 @@
using Server.Targeting;
namespace Server.Items
{
public abstract class BaseClothMaterial : Item, IDyable
{
public BaseClothMaterial(int itemID, int amount = 1) : base(itemID)
{
Stackable = true;
Weight = 1.0;
Amount = amount;
}
public BaseClothMaterial(Serial serial) : base(serial)
{
}
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(500366); // Select a loom to use that on.
from.Target = new PickLoomTarget(this);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
private class PickLoomTarget : Target
{
private readonly BaseClothMaterial m_Material;
public PickLoomTarget(BaseClothMaterial material) : base(3, false, TargetFlags.None) => m_Material = material;
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Material.Deleted)
return;
ILoom loom = targeted as ILoom;
if (loom == null && targeted is AddonComponent component)
loom = component.Addon as ILoom;
if (loom != null)
{
if (!m_Material.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (loom.Phase < 4)
{
m_Material.Consume();
if (targeted is Item item)
item.SendLocalizedMessageTo(from, 1010001 + loom.Phase++);
}
else
{
Item create = new BoltOfCloth();
create.Hue = m_Material.Hue;
m_Material.Consume();
loom.Phase = 0;
from.SendLocalizedMessage(500368); // You create some cloth and put it in your backpack.
from.AddToBackpack(create);
}
}
else
{
from.SendLocalizedMessage(500367); // Try using that on a loom.
}
}
}
}
public class DarkYarn : BaseClothMaterial
{
[Constructible]
public DarkYarn(int amount = 1) : base(0xE1D, amount)
{
}
public DarkYarn(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class LightYarn : BaseClothMaterial
{
[Constructible]
public LightYarn(int amount = 1) : base(0xE1E, amount)
{
}
public LightYarn(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class LightYarnUnraveled : BaseClothMaterial
{
[Constructible]
public LightYarnUnraveled(int amount = 1) : base(0xE1F, amount)
{
}
public LightYarnUnraveled(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class SpoolOfThread : BaseClothMaterial
{
[Constructible]
public SpoolOfThread(int amount = 1) : base(0xFA0, amount)
{
}
public SpoolOfThread(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}
using Server.Targeting;
namespace Server.Items
{
public abstract class BaseClothMaterial : Item, IDyable
{
public BaseClothMaterial(int itemID, int amount = 1) : base(itemID)
{
Stackable = true;
Weight = 1.0;
Amount = amount;
}
public BaseClothMaterial(Serial serial) : base(serial)
{
}
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(500366); // Select a loom to use that on.
from.Target = new PickLoomTarget(this);
}
else
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
}
private class PickLoomTarget : Target
{
private readonly BaseClothMaterial m_Material;
public PickLoomTarget(BaseClothMaterial material) : base(3, false, TargetFlags.None) => m_Material = material;
protected override void OnTarget(Mobile from, object targeted)
{
if (m_Material.Deleted)
return;
ILoom loom = targeted as ILoom;
if (loom == null && targeted is AddonComponent component)
loom = component.Addon as ILoom;
if (loom != null)
{
if (!m_Material.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (loom.Phase < 4)
{
m_Material.Consume();
if (targeted is Item item)
item.SendLocalizedMessageTo(from, 1010001 + loom.Phase++);
}
else
{
Item create = new BoltOfCloth();
create.Hue = m_Material.Hue;
m_Material.Consume();
loom.Phase = 0;
from.SendLocalizedMessage(500368); // You create some cloth and put it in your backpack.
from.AddToBackpack(create);
}
}
else
{
from.SendLocalizedMessage(500367); // Try using that on a loom.
}
}
}
}
public class DarkYarn : BaseClothMaterial
{
[Constructible]
public DarkYarn(int amount = 1) : base(0xE1D, amount)
{
}
public DarkYarn(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class LightYarn : BaseClothMaterial
{
[Constructible]
public LightYarn(int amount = 1) : base(0xE1E, amount)
{
}
public LightYarn(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class LightYarnUnraveled : BaseClothMaterial
{
[Constructible]
public LightYarnUnraveled(int amount = 1) : base(0xE1F, amount)
{
}
public LightYarnUnraveled(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class SpoolOfThread : BaseClothMaterial
{
[Constructible]
public SpoolOfThread(int amount = 1) : base(0xFA0, amount)
{
}
public SpoolOfThread(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,44 +1,44 @@
namespace Server.Items
{
public class Aegis : HeaterShield
{
[Constructible]
public Aegis()
{
Hue = 0x47E;
ArmorAttributes.SelfRepair = 5;
Attributes.ReflectPhysical = 15;
Attributes.DefendChance = 15;
Attributes.LowerManaCost = 8;
}
public Aegis(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061602; // <20>gis
public override int ArtifactRarity => 11;
public override int BasePhysicalResistance => 15;
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version < 1)
PhysicalBonus = 0;
}
}
namespace Server.Items
{
public class Aegis : HeaterShield
{
[Constructible]
public Aegis()
{
Hue = 0x47E;
ArmorAttributes.SelfRepair = 5;
Attributes.ReflectPhysical = 15;
Attributes.DefendChance = 15;
Attributes.LowerManaCost = 8;
}
public Aegis(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061602; // <20>gis
public override int ArtifactRarity => 11;
public override int BasePhysicalResistance => 15;
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version < 1)
PhysicalBonus = 0;
}
}
}

View file

@ -1,43 +1,43 @@
namespace Server.Items
{
public class ArcaneShield : WoodenKiteShield
{
[Constructible]
public ArcaneShield()
{
ItemID = 0x1B78;
Hue = 0x556;
Attributes.NightSight = 1;
Attributes.SpellChanneling = 1;
Attributes.DefendChance = 15;
Attributes.CastSpeed = 1;
}
public ArcaneShield(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061101; // Arcane Shield
public override int ArtifactRarity => 11;
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Attributes.NightSight == 0)
Attributes.NightSight = 1;
}
}
namespace Server.Items
{
public class ArcaneShield : WoodenKiteShield
{
[Constructible]
public ArcaneShield()
{
ItemID = 0x1B78;
Hue = 0x556;
Attributes.NightSight = 1;
Attributes.SpellChanneling = 1;
Attributes.DefendChance = 15;
Attributes.CastSpeed = 1;
}
public ArcaneShield(Serial serial) : base(serial)
{
}
public override int LabelNumber => 1061101; // Arcane Shield
public override int ArtifactRarity => 11;
public override int InitMinHits => 255;
public override int InitMaxHits => 255;
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Attributes.NightSight == 0)
Attributes.NightSight = 1;
}
}
}

View file

@ -1,179 +1,179 @@
using Server.Network;
namespace Server.Items
{
public class BaseShield : BaseArmor
{
public BaseShield(int itemID) : base(itemID)
{
}
public BaseShield(Serial serial) : base(serial)
{
}
public override ArmorMaterialType MaterialType => ArmorMaterialType.Plate;
public override double ArmorRating
{
get
{
Mobile m = Parent as Mobile;
double ar = base.ArmorRating;
if (m != null)
return m.Skills.Parry.Value * ar / 200.0 + 1.0;
return ar;
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version < 1)
{
if (this is Aegis)
return;
// The 15 bonus points to resistances are not applied to shields on OSI.
PhysicalBonus = 0;
FireBonus = 0;
ColdBonus = 0;
PoisonBonus = 0;
EnergyBonus = 0;
}
}
public override int OnHit(BaseWeapon weapon, int damage)
{
if (Core.AOS)
{
if (ArmorAttributes.SelfRepair > Utility.Random(10))
{
HitPoints += 2;
}
else
{
double halfArmor = ArmorRating / 2.0;
int absorbed = (int)(halfArmor + halfArmor * Utility.RandomDouble());
if (absorbed < 2)
absorbed = 2;
int wear;
if (weapon.Type == WeaponType.Bashing)
wear = absorbed / 2;
else
wear = Utility.Random(2);
if (wear > 0 && MaxHitPoints > 0)
{
if (HitPoints >= wear)
{
HitPoints -= wear;
wear = 0;
}
else
{
wear -= HitPoints;
HitPoints = 0;
}
if (wear > 0)
{
if (MaxHitPoints > wear)
{
MaxHitPoints -= wear;
if (Parent is Mobile mobile)
mobile.LocalOverheadMessage(MessageType.Regular, 0x3B2,
1061121); // Your equipment is severely damaged.
}
else
{
Delete();
}
}
}
}
return 0;
}
if (!(Parent is Mobile owner))
return damage;
double ar = ArmorRating;
double chance = (owner.Skills.Parry.Value - ar * 2.0) / 100.0;
if (chance < 0.01)
chance = 0.01;
/*
FORMULA: Displayed AR = ((Parrying Skill * Base AR of Shield) <EFBFBD> 200) + 1
FORMULA: % Chance of Blocking = parry skill - (shieldAR * 2)
FORMULA: Melee Damage Absorbed = (AR of Shield) / 2 | Archery Damage Absorbed = AR of Shield
*/
if (owner.CheckSkill(SkillName.Parry, chance))
{
if (weapon.Skill == SkillName.Archery)
damage -= (int)ar;
else
damage -= (int)(ar / 2.0);
if (damage < 0)
damage = 0;
owner.FixedEffect(0x37B9, 10, 16);
if (Utility.Random(100) < 25) // 25% chance to lower durability
{
int wear = Utility.Random(2);
if (wear > 0 && MaxHitPoints > 0)
{
if (HitPoints >= wear)
{
HitPoints -= wear;
wear = 0;
}
else
{
wear -= HitPoints;
HitPoints = 0;
}
if (wear > 0)
{
if (MaxHitPoints > wear)
{
MaxHitPoints -= wear;
((Mobile)Parent).LocalOverheadMessage(MessageType.Regular, 0x3B2,
1061121); // Your equipment is severely damaged.
}
else
{
Delete();
}
}
}
}
}
return damage;
}
}
using Server.Network;
namespace Server.Items
{
public class BaseShield : BaseArmor
{
public BaseShield(int itemID) : base(itemID)
{
}
public BaseShield(Serial serial) : base(serial)
{
}
public override ArmorMaterialType MaterialType => ArmorMaterialType.Plate;
public override double ArmorRating
{
get
{
Mobile m = Parent as Mobile;
double ar = base.ArmorRating;
if (m != null)
return m.Skills.Parry.Value * ar / 200.0 + 1.0;
return ar;
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version < 1)
{
if (this is Aegis)
return;
// The 15 bonus points to resistances are not applied to shields on OSI.
PhysicalBonus = 0;
FireBonus = 0;
ColdBonus = 0;
PoisonBonus = 0;
EnergyBonus = 0;
}
}
public override int OnHit(BaseWeapon weapon, int damage)
{
if (Core.AOS)
{
if (ArmorAttributes.SelfRepair > Utility.Random(10))
{
HitPoints += 2;
}
else
{
double halfArmor = ArmorRating / 2.0;
int absorbed = (int)(halfArmor + halfArmor * Utility.RandomDouble());
if (absorbed < 2)
absorbed = 2;
int wear;
if (weapon.Type == WeaponType.Bashing)
wear = absorbed / 2;
else
wear = Utility.Random(2);
if (wear > 0 && MaxHitPoints > 0)
{
if (HitPoints >= wear)
{
HitPoints -= wear;
wear = 0;
}
else
{
wear -= HitPoints;
HitPoints = 0;
}
if (wear > 0)
{
if (MaxHitPoints > wear)
{
MaxHitPoints -= wear;
if (Parent is Mobile mobile)
mobile.LocalOverheadMessage(MessageType.Regular, 0x3B2,
1061121); // Your equipment is severely damaged.
}
else
{
Delete();
}
}
}
}
return 0;
}
if (!(Parent is Mobile owner))
return damage;
double ar = ArmorRating;
double chance = (owner.Skills.Parry.Value - ar * 2.0) / 100.0;
if (chance < 0.01)
chance = 0.01;
/*
FORMULA: Displayed AR = ((Parrying Skill * Base AR of Shield) <EFBFBD> 200) + 1
FORMULA: % Chance of Blocking = parry skill - (shieldAR * 2)
FORMULA: Melee Damage Absorbed = (AR of Shield) / 2 | Archery Damage Absorbed = AR of Shield
*/
if (owner.CheckSkill(SkillName.Parry, chance))
{
if (weapon.Skill == SkillName.Archery)
damage -= (int)ar;
else
damage -= (int)(ar / 2.0);
if (damage < 0)
damage = 0;
owner.FixedEffect(0x37B9, 10, 16);
if (Utility.Random(100) < 25) // 25% chance to lower durability
{
int wear = Utility.Random(2);
if (wear > 0 && MaxHitPoints > 0)
{
if (HitPoints >= wear)
{
HitPoints -= wear;
wear = 0;
}
else
{
wear -= HitPoints;
HitPoints = 0;
}
if (wear > 0)
{
if (MaxHitPoints > wear)
{
MaxHitPoints -= wear;
((Mobile)Parent).LocalOverheadMessage(MessageType.Regular, 0x3B2,
1061121); // Your equipment is severely damaged.
}
else
{
Delete();
}
}
}
}
}
return damage;
}
}
}

View file

@ -1,39 +1,39 @@
namespace Server.Items
{
public class BronzeShield : BaseShield
{
[Constructible]
public BronzeShield() : base(0x1B72) => Weight = 6.0;
public BronzeShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 1;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 25;
public override int InitMaxHits => 30;
public override int AosStrReq => 35;
public override int ArmorBase => 10;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
namespace Server.Items
{
public class BronzeShield : BaseShield
{
[Constructible]
public BronzeShield() : base(0x1B72) => Weight = 6.0;
public BronzeShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 1;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 25;
public override int InitMaxHits => 30;
public override int AosStrReq => 35;
public override int ArmorBase => 10;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
}

View file

@ -1,39 +1,39 @@
namespace Server.Items
{
public class Buckler : BaseShield
{
[Constructible]
public Buckler() : base(0x1B73) => Weight = 5.0;
public Buckler(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 1;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 20;
public override int ArmorBase => 7;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
namespace Server.Items
{
public class Buckler : BaseShield
{
[Constructible]
public Buckler() : base(0x1B73) => Weight = 5.0;
public Buckler(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 1;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 40;
public override int InitMaxHits => 50;
public override int AosStrReq => 20;
public override int ArmorBase => 7;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
}

View file

@ -1,71 +1,71 @@
using Server.Guilds;
namespace Server.Items
{
public class ChaosShield : BaseShield
{
[Constructible]
public ChaosShield() : base(0x1BC3)
{
if (!Core.AOS)
LootType = LootType.Newbied;
Weight = 5.0;
}
public ChaosShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 1;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 100;
public override int InitMaxHits => 125;
public override int AosStrReq => 95;
public override int ArmorBase => 32;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override bool OnEquip(Mobile from) => Validate(from) && base.OnEquip(from);
public override void OnSingleClick(Mobile from)
{
if (Validate(Parent as Mobile))
base.OnSingleClick(from);
}
public virtual bool Validate(Mobile m)
{
if (m?.Player != true || m.AccessLevel != AccessLevel.Player || Core.AOS)
return true;
if (!(m.Guild is Guild g) || g.Type != GuildType.Chaos)
{
m.FixedEffect(0x3728, 10, 13);
Delete();
return false;
}
return true;
}
}
using Server.Guilds;
namespace Server.Items
{
public class ChaosShield : BaseShield
{
[Constructible]
public ChaosShield() : base(0x1BC3)
{
if (!Core.AOS)
LootType = LootType.Newbied;
Weight = 5.0;
}
public ChaosShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 1;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 100;
public override int InitMaxHits => 125;
public override int AosStrReq => 95;
public override int ArmorBase => 32;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override bool OnEquip(Mobile from) => Validate(from) && base.OnEquip(from);
public override void OnSingleClick(Mobile from)
{
if (Validate(Parent as Mobile))
base.OnSingleClick(from);
}
public virtual bool Validate(Mobile m)
{
if (m?.Player != true || m.AccessLevel != AccessLevel.Player || Core.AOS)
return true;
if (!(m.Guild is Guild g) || g.Type != GuildType.Chaos)
{
m.FixedEffect(0x3728, 10, 13);
Delete();
return false;
}
return true;
}
}
}

View file

@ -1,39 +1,39 @@
namespace Server.Items
{
public class HeaterShield : BaseShield
{
[Constructible]
public HeaterShield() : base(0x1B76) => Weight = 8.0;
public HeaterShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 1;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 50;
public override int InitMaxHits => 65;
public override int AosStrReq => 90;
public override int ArmorBase => 23;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
namespace Server.Items
{
public class HeaterShield : BaseShield
{
[Constructible]
public HeaterShield() : base(0x1B76) => Weight = 8.0;
public HeaterShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 1;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 50;
public override int InitMaxHits => 65;
public override int AosStrReq => 90;
public override int ArmorBase => 23;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
}

View file

@ -1,52 +1,52 @@
namespace Server.Items
{
public class MetalKiteShield : BaseShield, IDyable
{
[Constructible]
public MetalKiteShield() : base(0x1B74) => Weight = 7.0;
public MetalKiteShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 1;
public override int InitMinHits => 45;
public override int InitMaxHits => 60;
public override int AosStrReq => 45;
public override int ArmorBase => 16;
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Weight == 5.0)
Weight = 7.0;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
namespace Server.Items
{
public class MetalKiteShield : BaseShield, IDyable
{
[Constructible]
public MetalKiteShield() : base(0x1B74) => Weight = 7.0;
public MetalKiteShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 1;
public override int InitMinHits => 45;
public override int InitMaxHits => 60;
public override int AosStrReq => 45;
public override int ArmorBase => 16;
public bool Dye(Mobile from, DyeTub sender)
{
if (Deleted)
return false;
Hue = sender.DyedHue;
return true;
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Weight == 5.0)
Weight = 7.0;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
}

View file

@ -1,39 +1,39 @@
namespace Server.Items
{
public class MetalShield : BaseShield
{
[Constructible]
public MetalShield() : base(0x1B7B) => Weight = 6.0;
public MetalShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 1;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 50;
public override int InitMaxHits => 65;
public override int AosStrReq => 45;
public override int ArmorBase => 11;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
namespace Server.Items
{
public class MetalShield : BaseShield
{
[Constructible]
public MetalShield() : base(0x1B7B) => Weight = 6.0;
public MetalShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 1;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 50;
public override int InitMaxHits => 65;
public override int AosStrReq => 45;
public override int ArmorBase => 11;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
}

View file

@ -1,74 +1,74 @@
using Server.Guilds;
namespace Server.Items
{
public class OrderShield : BaseShield
{
[Constructible]
public OrderShield() : base(0x1BC4)
{
if (!Core.AOS)
LootType = LootType.Newbied;
Weight = 7.0;
}
public OrderShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 1;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 100;
public override int InitMaxHits => 125;
public override int AosStrReq => 95;
public override int ArmorBase => 30;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Weight == 6.0)
Weight = 7.0;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override bool OnEquip(Mobile from) => Validate(from) && base.OnEquip(from);
public override void OnSingleClick(Mobile from)
{
if (Validate(Parent as Mobile))
base.OnSingleClick(from);
}
public virtual bool Validate(Mobile m)
{
if (Core.AOS || m?.Player != true || m.AccessLevel != AccessLevel.Player)
return true;
if (!(m.Guild is Guild g) || g.Type != GuildType.Order)
{
m.FixedEffect(0x3728, 10, 13);
Delete();
return false;
}
return true;
}
}
using Server.Guilds;
namespace Server.Items
{
public class OrderShield : BaseShield
{
[Constructible]
public OrderShield() : base(0x1BC4)
{
if (!Core.AOS)
LootType = LootType.Newbied;
Weight = 7.0;
}
public OrderShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 1;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 0;
public override int InitMinHits => 100;
public override int InitMaxHits => 125;
public override int AosStrReq => 95;
public override int ArmorBase => 30;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Weight == 6.0)
Weight = 7.0;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override bool OnEquip(Mobile from) => Validate(from) && base.OnEquip(from);
public override void OnSingleClick(Mobile from)
{
if (Validate(Parent as Mobile))
base.OnSingleClick(from);
}
public virtual bool Validate(Mobile m)
{
if (Core.AOS || m?.Player != true || m.AccessLevel != AccessLevel.Player)
return true;
if (!(m.Guild is Guild g) || g.Type != GuildType.Order)
{
m.FixedEffect(0x3728, 10, 13);
Delete();
return false;
}
return true;
}
}
}

View file

@ -1,42 +1,42 @@
namespace Server.Items
{
public class WoodenKiteShield : BaseShield
{
[Constructible]
public WoodenKiteShield() : base(0x1B79) => Weight = 5.0;
public WoodenKiteShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 1;
public override int InitMinHits => 50;
public override int InitMaxHits => 65;
public override int AosStrReq => 20;
public override int ArmorBase => 12;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Weight == 7.0)
Weight = 5.0;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
namespace Server.Items
{
public class WoodenKiteShield : BaseShield
{
[Constructible]
public WoodenKiteShield() : base(0x1B79) => Weight = 5.0;
public WoodenKiteShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 1;
public override int InitMinHits => 50;
public override int InitMaxHits => 65;
public override int AosStrReq => 20;
public override int ArmorBase => 12;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (Weight == 7.0)
Weight = 5.0;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
}

View file

@ -1,39 +1,39 @@
namespace Server.Items
{
public class WoodenShield : BaseShield
{
[Constructible]
public WoodenShield() : base(0x1B7A) => Weight = 5.0;
public WoodenShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 1;
public override int InitMinHits => 20;
public override int InitMaxHits => 25;
public override int AosStrReq => 20;
public override int ArmorBase => 8;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
namespace Server.Items
{
public class WoodenShield : BaseShield
{
[Constructible]
public WoodenShield() : base(0x1B7A) => Weight = 5.0;
public WoodenShield(Serial serial) : base(serial)
{
}
public override int BasePhysicalResistance => 0;
public override int BaseFireResistance => 0;
public override int BaseColdResistance => 0;
public override int BasePoisonResistance => 0;
public override int BaseEnergyResistance => 1;
public override int InitMinHits => 20;
public override int InitMaxHits => 25;
public override int AosStrReq => 20;
public override int ArmorBase => 8;
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
}
}

View file

@ -1,55 +1,55 @@
using Server.Engines.Craft;
namespace Server.Items
{
[Flippable(0xFAF, 0xFB0)]
[Anvil]
public class Anvil : Item
{
[Constructible]
public Anvil() : base(0xFAF) => Movable = false;
public Anvil(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Forge]
public class Forge : Item
{
[Constructible]
public Forge() : base(0xFB1) => Movable = false;
public Forge(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
using Server.Engines.Craft;
namespace Server.Items
{
[Flippable(0xFAF, 0xFB0)]
[Anvil]
public class Anvil : Item
{
[Constructible]
public Anvil() : base(0xFAF) => Movable = false;
public Anvil(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
[Forge]
public class Forge : Item
{
[Constructible]
public Forge() : base(0xFB1) => Movable = false;
public Forge(Serial serial) : base(serial)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -1,348 +1,348 @@
using Server.Engines.Craft;
namespace Server.Items
{
[Forge]
public class LargeForgeWest : Item
{
private InternalItem m_Item;
private InternalItem2 m_Item2;
[Constructible]
public LargeForgeWest() : base(0x199A)
{
Movable = false;
m_Item = new InternalItem(this);
m_Item2 = new InternalItem2(this);
}
public LargeForgeWest(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X, Y + 1, Z);
if (m_Item2 != null)
m_Item2.Location = new Point3D(X, Y + 2, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
if (m_Item2 != null)
m_Item2.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
m_Item2?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
writer.Write(m_Item2);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as InternalItem;
m_Item2 = reader.ReadItem() as InternalItem2;
}
[Forge]
private class InternalItem : Item
{
private LargeForgeWest m_Item;
public InternalItem(LargeForgeWest item) : base(0x1996)
{
Movable = false;
m_Item = item;
}
public InternalItem(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X, Y - 1, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as LargeForgeWest;
}
}
[Forge]
private class InternalItem2 : Item
{
private LargeForgeWest m_Item;
public InternalItem2(LargeForgeWest item) : base(0x1992)
{
Movable = false;
m_Item = item;
}
public InternalItem2(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X, Y - 2, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as LargeForgeWest;
}
}
}
[Forge]
public class LargeForgeEast : Item
{
private InternalItem m_Item;
private InternalItem2 m_Item2;
[Constructible]
public LargeForgeEast() : base(0x197A)
{
Movable = false;
m_Item = new InternalItem(this);
m_Item2 = new InternalItem2(this);
}
public LargeForgeEast(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X + 1, Y, Z);
if (m_Item2 != null)
m_Item2.Location = new Point3D(X + 2, Y, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
if (m_Item2 != null)
m_Item2.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
m_Item2?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
writer.Write(m_Item2);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as InternalItem;
m_Item2 = reader.ReadItem() as InternalItem2;
}
[Forge]
private class InternalItem : Item
{
private LargeForgeEast m_Item;
public InternalItem(LargeForgeEast item) : base(0x197E)
{
Movable = false;
m_Item = item;
}
public InternalItem(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X - 1, Y, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as LargeForgeEast;
}
}
[Forge]
private class InternalItem2 : Item
{
private LargeForgeEast m_Item;
public InternalItem2(LargeForgeEast item) : base(0x1982)
{
Movable = false;
m_Item = item;
}
public InternalItem2(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X - 2, Y, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as LargeForgeEast;
}
}
}
using Server.Engines.Craft;
namespace Server.Items
{
[Forge]
public class LargeForgeWest : Item
{
private InternalItem m_Item;
private InternalItem2 m_Item2;
[Constructible]
public LargeForgeWest() : base(0x199A)
{
Movable = false;
m_Item = new InternalItem(this);
m_Item2 = new InternalItem2(this);
}
public LargeForgeWest(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X, Y + 1, Z);
if (m_Item2 != null)
m_Item2.Location = new Point3D(X, Y + 2, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
if (m_Item2 != null)
m_Item2.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
m_Item2?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
writer.Write(m_Item2);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as InternalItem;
m_Item2 = reader.ReadItem() as InternalItem2;
}
[Forge]
private class InternalItem : Item
{
private LargeForgeWest m_Item;
public InternalItem(LargeForgeWest item) : base(0x1996)
{
Movable = false;
m_Item = item;
}
public InternalItem(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X, Y - 1, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as LargeForgeWest;
}
}
[Forge]
private class InternalItem2 : Item
{
private LargeForgeWest m_Item;
public InternalItem2(LargeForgeWest item) : base(0x1992)
{
Movable = false;
m_Item = item;
}
public InternalItem2(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X, Y - 2, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as LargeForgeWest;
}
}
}
[Forge]
public class LargeForgeEast : Item
{
private InternalItem m_Item;
private InternalItem2 m_Item2;
[Constructible]
public LargeForgeEast() : base(0x197A)
{
Movable = false;
m_Item = new InternalItem(this);
m_Item2 = new InternalItem2(this);
}
public LargeForgeEast(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X + 1, Y, Z);
if (m_Item2 != null)
m_Item2.Location = new Point3D(X + 2, Y, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
if (m_Item2 != null)
m_Item2.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
m_Item2?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
writer.Write(m_Item2);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as InternalItem;
m_Item2 = reader.ReadItem() as InternalItem2;
}
[Forge]
private class InternalItem : Item
{
private LargeForgeEast m_Item;
public InternalItem(LargeForgeEast item) : base(0x197E)
{
Movable = false;
m_Item = item;
}
public InternalItem(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X - 1, Y, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as LargeForgeEast;
}
}
[Forge]
private class InternalItem2 : Item
{
private LargeForgeEast m_Item;
public InternalItem2(LargeForgeEast item) : base(0x1982)
{
Movable = false;
m_Item = item;
}
public InternalItem2(Serial serial) : base(serial)
{
}
public override void OnLocationChange(Point3D oldLocation)
{
if (m_Item != null)
m_Item.Location = new Point3D(X - 2, Y, Z);
}
public override void OnMapChange()
{
if (m_Item != null)
m_Item.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
m_Item?.Delete();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write(m_Item);
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
m_Item = reader.ReadItem() as LargeForgeEast;
}
}
}
}

View file

@ -1,127 +1,127 @@
using System;
using Server.Gumps;
using Server.Mobiles;
using Server.Network;
namespace Server.Items
{
[Flippable(0xA57, 0xA58, 0xA59)]
public class Bedroll : Item
{
[Constructible]
public Bedroll() : base(0xA57) => Weight = 5.0;
public Bedroll(Serial serial) : base(serial)
{
}
public override void OnDoubleClick(Mobile from)
{
if (Parent != null || !VerifyMove(from))
return;
if (!from.InRange(this, 2))
{
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
return;
}
if (ItemID == 0xA57) // rolled
{
Direction dir = PlayerMobile.GetDirection4(from.Location, Location);
if (dir == Direction.North || dir == Direction.South)
ItemID = 0xA55;
else
ItemID = 0xA56;
}
else // unrolled
{
ItemID = 0xA57;
if (!from.HasGump<LogoutGump>())
{
CampfireEntry entry = Campfire.GetEntry(from);
if (entry?.Safe == true)
from.SendGump(new LogoutGump(entry, this));
}
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
private class LogoutGump : Gump
{
private readonly Bedroll m_Bedroll;
private readonly Timer m_CloseTimer;
private readonly CampfireEntry m_Entry;
public LogoutGump(CampfireEntry entry, Bedroll bedroll) : base(100, 0)
{
m_Entry = entry;
m_Bedroll = bedroll;
m_CloseTimer = Timer.DelayCall(TimeSpan.FromSeconds(10.0), CloseGump);
AddBackground(0, 0, 400, 350, 0xA28);
AddHtmlLocalized(100, 20, 200, 35, 1011015); // <center>Logging out via camping</center>
/* Using a bedroll in the safety of a camp will log you out of the game safely.
* If this is what you wish to do choose CONTINUE and you will be logged out.
* Otherwise, select the CANCEL button to avoid logging out at this time.
* The camp will remain secure for 10 seconds at which time this window will close
* and you not be logged out.
*/
AddHtmlLocalized(50, 55, 300, 140, 1011016, true, true);
AddButton(45, 298, 0xFA5, 0xFA7, 1);
AddHtmlLocalized(80, 300, 110, 35, 1011011); // CONTINUE
AddButton(200, 298, 0xFA5, 0xFA7, 0);
AddHtmlLocalized(235, 300, 110, 35, 1011012); // CANCEL
}
public override void OnResponse(NetState sender, RelayInfo info)
{
PlayerMobile pm = m_Entry.Player;
m_CloseTimer.Stop();
if (Campfire.GetEntry(pm) != m_Entry)
return;
if (info.ButtonID == 1 && m_Entry.Safe && m_Bedroll.Parent == null && m_Bedroll.IsAccessibleTo(pm)
&& m_Bedroll.VerifyMove(pm) && m_Bedroll.Map == pm.Map && pm.InRange(m_Bedroll, 2))
{
pm.PlaceInBackpack(m_Bedroll);
pm.BedrollLogout = true;
sender.Dispose();
}
Campfire.RemoveEntry(m_Entry);
}
private void CloseGump()
{
Campfire.RemoveEntry(m_Entry);
m_Entry.Player.CloseGump<LogoutGump>();
}
}
}
}
using System;
using Server.Gumps;
using Server.Mobiles;
using Server.Network;
namespace Server.Items
{
[Flippable(0xA57, 0xA58, 0xA59)]
public class Bedroll : Item
{
[Constructible]
public Bedroll() : base(0xA57) => Weight = 5.0;
public Bedroll(Serial serial) : base(serial)
{
}
public override void OnDoubleClick(Mobile from)
{
if (Parent != null || !VerifyMove(from))
return;
if (!from.InRange(this, 2))
{
from.LocalOverheadMessage(MessageType.Regular, 0x3B2, 1019045); // I can't reach that.
return;
}
if (ItemID == 0xA57) // rolled
{
Direction dir = PlayerMobile.GetDirection4(from.Location, Location);
if (dir == Direction.North || dir == Direction.South)
ItemID = 0xA55;
else
ItemID = 0xA56;
}
else // unrolled
{
ItemID = 0xA57;
if (!from.HasGump<LogoutGump>())
{
CampfireEntry entry = Campfire.GetEntry(from);
if (entry?.Safe == true)
from.SendGump(new LogoutGump(entry, this));
}
}
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.WriteEncodedInt(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadEncodedInt();
}
private class LogoutGump : Gump
{
private readonly Bedroll m_Bedroll;
private readonly Timer m_CloseTimer;
private readonly CampfireEntry m_Entry;
public LogoutGump(CampfireEntry entry, Bedroll bedroll) : base(100, 0)
{
m_Entry = entry;
m_Bedroll = bedroll;
m_CloseTimer = Timer.DelayCall(TimeSpan.FromSeconds(10.0), CloseGump);
AddBackground(0, 0, 400, 350, 0xA28);
AddHtmlLocalized(100, 20, 200, 35, 1011015); // <center>Logging out via camping</center>
/* Using a bedroll in the safety of a camp will log you out of the game safely.
* If this is what you wish to do choose CONTINUE and you will be logged out.
* Otherwise, select the CANCEL button to avoid logging out at this time.
* The camp will remain secure for 10 seconds at which time this window will close
* and you not be logged out.
*/
AddHtmlLocalized(50, 55, 300, 140, 1011016, true, true);
AddButton(45, 298, 0xFA5, 0xFA7, 1);
AddHtmlLocalized(80, 300, 110, 35, 1011011); // CONTINUE
AddButton(200, 298, 0xFA5, 0xFA7, 0);
AddHtmlLocalized(235, 300, 110, 35, 1011012); // CANCEL
}
public override void OnResponse(NetState sender, RelayInfo info)
{
PlayerMobile pm = m_Entry.Player;
m_CloseTimer.Stop();
if (Campfire.GetEntry(pm) != m_Entry)
return;
if (info.ButtonID == 1 && m_Entry.Safe && m_Bedroll.Parent == null && m_Bedroll.IsAccessibleTo(pm)
&& m_Bedroll.VerifyMove(pm) && m_Bedroll.Map == pm.Map && pm.InRange(m_Bedroll, 2))
{
pm.PlaceInBackpack(m_Bedroll);
pm.BedrollLogout = true;
sender.Dispose();
}
Campfire.RemoveEntry(m_Entry);
}
private void CloseGump()
{
Campfire.RemoveEntry(m_Entry);
m_Entry.Player.CloseGump<LogoutGump>();
}
}
}
}

View file

@ -1,194 +1,194 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Server.Mobiles;
using Server.Network;
namespace Server.Items
{
public enum CampfireStatus
{
Burning,
Extinguishing,
Off
}
public class Campfire : Item
{
public static readonly int SecureRange = 7;
private static readonly Dictionary<Mobile, CampfireEntry> m_Table = new Dictionary<Mobile, CampfireEntry>();
private readonly List<CampfireEntry> m_Entries;
private readonly Timer m_Timer;
public Campfire() : base(0xDE3)
{
Movable = false;
Light = LightType.Circle300;
m_Entries = new List<CampfireEntry>();
Created = DateTime.UtcNow;
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.0), OnTick);
}
public Campfire(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public DateTime Created { get; }
[CommandProperty(AccessLevel.GameMaster)]
public CampfireStatus Status
{
get
{
return ItemID switch
{
0xDE3 => CampfireStatus.Burning,
0xDE9 => CampfireStatus.Extinguishing,
_ => CampfireStatus.Off
};
}
set
{
if (Status == value)
return;
switch (value)
{
case CampfireStatus.Burning:
ItemID = 0xDE3;
Light = LightType.Circle300;
break;
case CampfireStatus.Extinguishing:
ItemID = 0xDE9;
Light = LightType.Circle150;
break;
default:
ItemID = 0xDEA;
Light = LightType.ArchedWindowEast;
ClearEntries();
break;
}
}
}
public static CampfireEntry GetEntry(Mobile player)
{
m_Table.TryGetValue(player, out CampfireEntry value);
return value;
}
public static void RemoveEntry(CampfireEntry entry)
{
m_Table.Remove(entry.Player);
entry.Fire.m_Entries.Remove(entry);
}
private void OnTick()
{
DateTime now = DateTime.UtcNow;
TimeSpan age = now - Created;
if (age >= TimeSpan.FromSeconds(100.0))
Delete();
else if (age >= TimeSpan.FromSeconds(90.0))
Status = CampfireStatus.Off;
else if (age >= TimeSpan.FromSeconds(60.0))
Status = CampfireStatus.Extinguishing;
if (Status == CampfireStatus.Off || Deleted)
return;
foreach (CampfireEntry entry in m_Entries.ToList())
if (!entry.Valid || entry.Player.NetState == null)
RemoveEntry(entry);
else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0))
{
entry.Safe = true;
entry.Player.SendLocalizedMessage(500621); // The camp is now secure.
}
IPooledEnumerable<NetState> eable = GetClientsInRange(SecureRange);
foreach (NetState state in eable)
if (state.Mobile is PlayerMobile pm && GetEntry(pm) == null)
{
CampfireEntry entry = new CampfireEntry(pm, this);
m_Table[pm] = entry;
m_Entries.Add(entry);
pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp.
}
eable.Free();
}
private void ClearEntries()
{
if (m_Entries == null)
return;
foreach (CampfireEntry entry in m_Entries.ToList())
RemoveEntry(entry);
}
public override void OnAfterDelete()
{
m_Timer?.Stop();
ClearEntries();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Delete();
}
}
public class CampfireEntry
{
private bool m_Safe;
public CampfireEntry(PlayerMobile player, Campfire fire)
{
Player = player;
Fire = fire;
Start = DateTime.UtcNow;
m_Safe = false;
}
public PlayerMobile Player { get; }
public Campfire Fire { get; }
public DateTime Start { get; }
public bool Valid => !Fire.Deleted && Fire.Status != CampfireStatus.Off && Player.Map == Fire.Map &&
Player.InRange(Fire, Campfire.SecureRange);
public bool Safe
{
get => Valid && m_Safe;
set => m_Safe = value;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using Server.Mobiles;
using Server.Network;
namespace Server.Items
{
public enum CampfireStatus
{
Burning,
Extinguishing,
Off
}
public class Campfire : Item
{
public static readonly int SecureRange = 7;
private static readonly Dictionary<Mobile, CampfireEntry> m_Table = new Dictionary<Mobile, CampfireEntry>();
private readonly List<CampfireEntry> m_Entries;
private readonly Timer m_Timer;
public Campfire() : base(0xDE3)
{
Movable = false;
Light = LightType.Circle300;
m_Entries = new List<CampfireEntry>();
Created = DateTime.UtcNow;
m_Timer = Timer.DelayCall(TimeSpan.FromSeconds(1.0), TimeSpan.FromSeconds(1.0), OnTick);
}
public Campfire(Serial serial) : base(serial)
{
}
[CommandProperty(AccessLevel.GameMaster)]
public DateTime Created { get; }
[CommandProperty(AccessLevel.GameMaster)]
public CampfireStatus Status
{
get
{
return ItemID switch
{
0xDE3 => CampfireStatus.Burning,
0xDE9 => CampfireStatus.Extinguishing,
_ => CampfireStatus.Off
};
}
set
{
if (Status == value)
return;
switch (value)
{
case CampfireStatus.Burning:
ItemID = 0xDE3;
Light = LightType.Circle300;
break;
case CampfireStatus.Extinguishing:
ItemID = 0xDE9;
Light = LightType.Circle150;
break;
default:
ItemID = 0xDEA;
Light = LightType.ArchedWindowEast;
ClearEntries();
break;
}
}
}
public static CampfireEntry GetEntry(Mobile player)
{
m_Table.TryGetValue(player, out CampfireEntry value);
return value;
}
public static void RemoveEntry(CampfireEntry entry)
{
m_Table.Remove(entry.Player);
entry.Fire.m_Entries.Remove(entry);
}
private void OnTick()
{
DateTime now = DateTime.UtcNow;
TimeSpan age = now - Created;
if (age >= TimeSpan.FromSeconds(100.0))
Delete();
else if (age >= TimeSpan.FromSeconds(90.0))
Status = CampfireStatus.Off;
else if (age >= TimeSpan.FromSeconds(60.0))
Status = CampfireStatus.Extinguishing;
if (Status == CampfireStatus.Off || Deleted)
return;
foreach (CampfireEntry entry in m_Entries.ToList())
if (!entry.Valid || entry.Player.NetState == null)
RemoveEntry(entry);
else if (!entry.Safe && now - entry.Start >= TimeSpan.FromSeconds(30.0))
{
entry.Safe = true;
entry.Player.SendLocalizedMessage(500621); // The camp is now secure.
}
IPooledEnumerable<NetState> eable = GetClientsInRange(SecureRange);
foreach (NetState state in eable)
if (state.Mobile is PlayerMobile pm && GetEntry(pm) == null)
{
CampfireEntry entry = new CampfireEntry(pm, this);
m_Table[pm] = entry;
m_Entries.Add(entry);
pm.SendLocalizedMessage(500620); // You feel it would take a few moments to secure your camp.
}
eable.Free();
}
private void ClearEntries()
{
if (m_Entries == null)
return;
foreach (CampfireEntry entry in m_Entries.ToList())
RemoveEntry(entry);
}
public override void OnAfterDelete()
{
m_Timer?.Stop();
ClearEntries();
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Delete();
}
}
public class CampfireEntry
{
private bool m_Safe;
public CampfireEntry(PlayerMobile player, Campfire fire)
{
Player = player;
Fire = fire;
Start = DateTime.UtcNow;
m_Safe = false;
}
public PlayerMobile Player { get; }
public Campfire Fire { get; }
public DateTime Start { get; }
public bool Valid => !Fire.Deleted && Fire.Status != CampfireStatus.Off && Player.Map == Fire.Map &&
Player.InRange(Fire, Campfire.SecureRange);
public bool Safe
{
get => Valid && m_Safe;
set => m_Safe = value;
}
}
}

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